【C/C++小游戏】打字游戏(EasyX图形库实现)
目录
目录
游戏简介
准备素材
开始编写
1 预编译
2 字母结构体
3 初始化字母
4 字母下落
不断下落
掉到底下
MoveLetter() 函数
5 绘制屏幕
字母
分数
Draw() 函数
6 判断按键
7 音乐、背景
音乐
背景
Main函数
效果截图
完整代码
游戏简介
屏幕中不断下落字母,判断按下这个字母的按键,得分;字母掉下去,扣分。
上面这句话中,我们要给蓝色背景的字定义一个结构体,然后一步步实现红色字的内容。
代码思路
1. 字母结构体
2. 初始化字母
3. 字母下落(到底失分)
4. 绘制屏幕
5. 判断按键(得分)
6. 音乐、背景(可加可不加)
准备素材
背景图:
(偷偷说一件事:我的这些背景图,都是在 Scratch 上截的)
音效也是在 Scratch 上导出的……
开始编写
1 预编译
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib") // 音乐
#define WIDTH 640
#define HEIGHT 480
#define MAX_LETTER 10
#define SPEED 2
2 字母结构体
x x坐标
y y坐标
speed 下落速度
ch 字母
struct Letter
{int x;int y;char ch;
};
3 初始化字母
定义宏 MAX_LETTER 表示字母的数量。
定义 letter[MAX_LETTER] 表示所有字母的一维数组。
Letter letter[MAX_LETTER];
x坐标:25 ~ 615 的随机数
y坐标:-480 ~ 0 的随机数
字母:利用 ASCII码 取 A ~ Z 的随机数
// 初始化字母
void SetLetter()
{for (int i = 0; i < MAX_LETTER; i++){letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}
}
4 字母下落
不断下落
只要增加每个字母的y坐标就行了。
for (int i = 0; i < MAX_LETTER; i++)
{letter[i].y += SPEED;
}
掉到底下
判断字母的y坐标,如果大于屏幕高度,扣分,并且重新初始化这个字母。
if (letter[i].y >= HEIGHT)
{score--;letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';
}
MoveLetter() 函数
// 移动字母
void MoveLetter()
{for (int i = 0; i < MAX_LETTER; i++){letter[i].y += SPEED;if (letter[i].y >= HEIGHT){score--;letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}}
}
5 绘制屏幕
字母
setbkmode 函数设置字母背景的样子,这里用 TRANSPARENT 设为透明。
for (int i = 0; i < MAX_LETTER; i++)
{settextstyle(50, 20, "HandelGothic BT");setbkmode(TRANSPARENT);outtextxy(letter[i].x, letter[i].y, letter[i].ch);
}
分数
sprintf_s 函数:格式化输出到一个字符数组里。
char text[20];
sprintf_s(text, "Score: %d", score);
settextstyle(50, 20, "Arial");
outtextxy(20, 20, text);
Draw() 函数
// 绘制屏幕
void Draw()
{putimage(0, 0, &bk_img);for (int i = 0; i < MAX_LETTER; i++){settextstyle(50, 20, "HandelGothic BT");setbkmode(TRANSPARENT);outtextxy(letter[i].x, letter[i].y, letter[i].ch);}char text[20];sprintf_s(text, "Score: %d", score);settextstyle(50, 20, "Arial");outtextxy(20, 20, text);
}
6 判断按键
// 用户输入
void GetKey()
{if (_kbhit()){char input = _getch();input = input - 'a' + 'A';for (int i = 0; i < MAX_LETTER; i++){if (input == letter[i].ch){score++;letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}}}
}
7 音乐、背景
音乐
Playsound 函数:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
pszSound : 音乐文件路径,只能是 .wav 类型
hmod : 一般直接写 NULL ,不用管
fdwSound : 声音播放模式 ,常用:
SND_ASYNC 异步播放
SND_LOOP 循环播放
SND_NOSTOP 不打断原来的声音
在开始时 :PlaySound(".\\Bgm.wav", NULL, SND_ASYNC | SND_LOOP);
得分时:PlaySound(".\\Get.wav", NULL, SND_ASYNC | SND_NOSTOP);
按下空格 关闭 / 打开 音乐
if (input == ' ')
{if (isMusic){PlaySound(NULL, NULL, NULL);isMusic = false;}else{PlaySound(".\\Bgm.wav", NULL, SND_ASYNC | SND_LOOP);isMusic = true;}
}
背景
主函数:loadimage(&bk_img, ".\\Background.png", WIDTH, HEIGHT, true);
Draw函数:putimage(0, 0, &bk_img);
Main函数
int main()
{initgraph(WIDTH, HEIGHT);srand(time(NULL));loadimage(&bk_img, ".\\Background.png", WIDTH, HEIGHT, true);PlaySound(".\\Bgm.wav", NULL, SND_ASYNC | SND_LOOP);SetLetter();BeginBatchDraw();while (true){Draw();MoveLetter();GetKey();FlushBatchDraw();Sleep(10);}EndBatchDraw();closegraph();return 0;
}
效果截图
完整代码
/*
* 项目名称:打字游戏
* 开发环境:vs2022 + easyx
* 作者:轩
* 代码长度:131 行
* 完成时间:2023.1.1
* 用时:1 小时
*/#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
#define WIDTH 640
#define HEIGHT 480
#define MAX_LETTER 10
#define SPEED 2struct Letter
{int x;int y;char ch;
};IMAGE bk_img;
Letter letter[MAX_LETTER];
int score = 0; // 感谢 @ m0_74294396 提出的问题
bool isMusic = true;// 初始化字母
void SetLetter()
{for (int i = 0; i < MAX_LETTER; i++){letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}
}// 绘制屏幕
void Draw()
{putimage(0, 0, &bk_img);for (int i = 0; i < MAX_LETTER; i++){settextstyle(50, 20, "HandelGothic BT");setbkmode(TRANSPARENT);outtextxy(letter[i].x, letter[i].y, letter[i].ch);}char text[20];sprintf_s(text, "Score: %d", score);settextstyle(50, 20, "Arial");outtextxy(20, 20, text);
}// 移动字母
void MoveLetter()
{for (int i = 0; i < MAX_LETTER; i++){letter[i].y += SPEED;if (letter[i].y >= HEIGHT){score--;letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}}
}// 用户输入
void GetKey()
{if (_kbhit()){char input = _getch();if (input == ' '){if (isMusic){PlaySound(NULL, NULL, NULL);isMusic = false;}else{PlaySound(".\\Bgm.wav", NULL, SND_ASYNC | SND_LOOP);isMusic = true;}}input = input - 'a' + 'A';for (int i = 0; i < MAX_LETTER; i++){if (input == letter[i].ch){score++;PlaySound(".\\Get.wav", NULL, SND_ASYNC | SND_NOSTOP);letter[i].x = rand() % (WIDTH - 50) + 25;letter[i].y = rand() % HEIGHT - HEIGHT;letter[i].ch = rand() % 26 + 'A';}}}
}int main()
{initgraph(WIDTH, HEIGHT);srand(time(NULL));loadimage(&bk_img, ".\\Background.png", WIDTH, HEIGHT, true);PlaySound(".\\Bgm.wav", NULL, SND_ASYNC | SND_LOOP);SetLetter();BeginBatchDraw();while (true){Draw();MoveLetter();GetKey();FlushBatchDraw();Sleep(10);}EndBatchDraw();closegraph();return 0;
}
感谢 @ m0_74294396 提出的问题,已修改!
【C/C++小游戏】打字游戏(EasyX图形库实现)相关推荐
- c语言跑酷游戏,C++用easyx图形库实现障碍跑酷小游戏
用easyx图形库做一个简单的c++小游戏-障碍跑酷 开发环境:visual c++6.0 库:easyx图形库 下载地址 当时我原本是想模仿做一个Flappy Bird的小游戏,在想如何写的时候突然 ...
- C++写的是男人就下一百层小游戏,基于EasyX图形库(本人菜鸟)
是男人就下一百层 小游戏 游戏整体源代码已打包,在最下面 首先建立一个board类: #pragma once #ifndef BOARD_H_ #define BOARD_H_ const int ...
- c语言 打字游戏,打字游戏初级版——C语言
其中用到了图形库graphics.h 在网络课程中学到的. #include #include #include #include #include IMAGE backimg; IMAGE bami ...
- java d打字游戏_练习--java实现的打字游戏
[实例简介] 简单的打字游戏.分别用单线程和多线程两种方式实现,多线程没有同步. [实例截图] [核心代码] 打字游戏 └── 打字游戏 ├── bin │ └── com │ └── qsl ...
- c语言使用easyX图形库制作打气球小游戏
大一c语言使用easyX图形库制作打气球小游戏 如果你是入门easyX图形库,那么这个打气球小游戏将会是和不错的入门项目选择,easyX开创了可视化窗口,使用户更加直观的了解到对象的变化,总代码以及素 ...
- c语言循环写回合制小游戏_告别黑框框——用C语言Easyx图形库实现图形界面
很早以前就接触到了Easyx图形库,当时感叹还有这么简单的C图形库供我们使用.后开用Easyx做过推箱子.图形界面钢琴等等简单的小游戏.今天给大家介绍一下Easyx图形库. Easyx图形库是针对C+ ...
- 贪吃蛇小游戏 c++ easyx图形库实现
贪吃蛇小游戏 c++ easyx图形库实现 实施思路 1.用上下左右键来控制方向 2.按enter键开始 暂停 3.通过随机函数来实现食物的随机出现 4.通过单链表来构造蛇 5.蛇撞墙 咬到自己 ...
- 【C/C++小游戏】见缝插针(EasyX 图形库)
目录 游戏简介 开始编写 1 预编译 2 初始化 全局变量 初始化函数 3 插入新的针 检测键盘 新的针 判断游戏失败 CreatePin 函数 4 移动针 5 绘制屏幕 针 圆 得分 按钮 Draw ...
- c语言/c++大作业基于easyx图形库自制RPG类型小游戏代码(附源码)
目录 一.游戏玩法 二.完整代码 三.部分细节 透明化人物背景 关于easyx库中怎样贴出透明图片 地图的链表实现 移动检测 碰撞检测 总结 前言: 花两天边看easyx文档边学边写的期末小作业. 学 ...
最新文章
- 学习 慕课网 PHP工程师学习计划--我的笔记汇总
- ubuntu16.04安装retext,第一行图标flie,edit,help没有,其它图标也不显示?
- mysql主从切换gtid不一致_GTID 复制、主从不一致跳过操作、快速切换master
- bootstrap-实现loading效果
- qt之键盘的设计及QlineEdit内容读取
- apache代理时java获取IP的问题
- unicode编码转ascii编码
- 【C语言笔记】关于数组的一个陷阱!
- map集合遍历的五种方法
- 八皇后问题 (信息学奥赛一本通-T1213)
- 卧槽!火爆GitHub的算法电子书开放下载了!
- VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
- H3C用户入网配置(radius、domain、802.1x)
- “JEPG”到“TXT”,魔幻的Loot
- 紫外线杀菌装置:过流式Photoscience紫外线杀菌器
- 量子计算到底是什么?
- cocos2d-js html5自定义鼠标图案及设置原点方法
- Docute超简单的文档工具
- [C++]小根堆 插入/删除/初始化
- 中国橱柜行业品牌营销策略与竞争态势研究报告2022版
热门文章
- 家庭如何实现外网映射?--最全的保姆式教学
- 对于idea,关于java中制表符对不齐的问题,以及java中制表符“\t“对齐补全问题;以及修改idea的tab的位数
- 练习(一)——决策树与随机森林分析Titanic数据集船员生还情况
- linux服务原理大全,Linux服务的控制和管理原理
- 苹果新版本,ios14更新体验流程
- 多进程 Webview 实战
- DIY智能门控——应用篇02:RFID门禁
- 阿里云服务器配置选择个人和公司避坑指南!
- 【Android】Menu菜单详解——实战微信菜单
- upsource代码审查