目录

目录

游戏简介

准备素材

开始编写

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图形库实现)相关推荐

  1. c语言跑酷游戏,C++用easyx图形库实现障碍跑酷小游戏

    用easyx图形库做一个简单的c++小游戏-障碍跑酷 开发环境:visual c++6.0 库:easyx图形库 下载地址 当时我原本是想模仿做一个Flappy Bird的小游戏,在想如何写的时候突然 ...

  2. C++写的是男人就下一百层小游戏,基于EasyX图形库(本人菜鸟)

    是男人就下一百层 小游戏 游戏整体源代码已打包,在最下面 首先建立一个board类: #pragma once #ifndef BOARD_H_ #define BOARD_H_ const int ...

  3. c语言 打字游戏,打字游戏初级版——C语言

    其中用到了图形库graphics.h 在网络课程中学到的. #include #include #include #include #include IMAGE backimg; IMAGE bami ...

  4. java d打字游戏_练习--java实现的打字游戏

    [实例简介] 简单的打字游戏.分别用单线程和多线程两种方式实现,多线程没有同步. [实例截图] [核心代码] 打字游戏 └── 打字游戏 ├── bin │   └── com │   └── qsl ...

  5. c语言使用easyX图形库制作打气球小游戏

    大一c语言使用easyX图形库制作打气球小游戏 如果你是入门easyX图形库,那么这个打气球小游戏将会是和不错的入门项目选择,easyX开创了可视化窗口,使用户更加直观的了解到对象的变化,总代码以及素 ...

  6. c语言循环写回合制小游戏_告别黑框框——用C语言Easyx图形库实现图形界面

    很早以前就接触到了Easyx图形库,当时感叹还有这么简单的C图形库供我们使用.后开用Easyx做过推箱子.图形界面钢琴等等简单的小游戏.今天给大家介绍一下Easyx图形库. Easyx图形库是针对C+ ...

  7. 贪吃蛇小游戏 c++ easyx图形库实现

    贪吃蛇小游戏 c++ easyx图形库实现 实施思路 1.用上下左右键来控制方向 2.按enter键开始 暂停 3.通过随机函数来实现食物的随机出现 4.通过单链表来构造蛇 5.蛇撞墙    咬到自己 ...

  8. 【C/C++小游戏】见缝插针(EasyX 图形库)

    目录 游戏简介 开始编写 1 预编译 2 初始化 全局变量 初始化函数 3 插入新的针 检测键盘 新的针 判断游戏失败 CreatePin 函数 4 移动针 5 绘制屏幕 针 圆 得分 按钮 Draw ...

  9. c语言/c++大作业基于easyx图形库自制RPG类型小游戏代码(附源码)

    目录 一.游戏玩法 二.完整代码 三.部分细节 透明化人物背景 关于easyx库中怎样贴出透明图片 地图的链表实现 移动检测 碰撞检测 总结 前言: 花两天边看easyx文档边学边写的期末小作业. 学 ...

最新文章

  1. 学习 慕课网 PHP工程师学习计划--我的笔记汇总
  2. ubuntu16.04安装retext,第一行图标flie,edit,help没有,其它图标也不显示?
  3. mysql主从切换gtid不一致_GTID 复制、主从不一致跳过操作、快速切换master
  4. bootstrap-实现loading效果
  5. qt之键盘的设计及QlineEdit内容读取
  6. apache代理时java获取IP的问题
  7. unicode编码转ascii编码
  8. 【C语言笔记】关于数组的一个陷阱!
  9. map集合遍历的五种方法
  10. 八皇后问题 (信息学奥赛一本通-T1213)
  11. 卧槽!火爆GitHub的算法电子书开放下载了!
  12. VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
  13. H3C用户入网配置(radius、domain、802.1x)
  14. “JEPG”到“TXT”,魔幻的Loot
  15. 紫外线杀菌装置:过流式Photoscience紫外线杀菌器
  16. 量子计算到底是什么?
  17. cocos2d-js html5自定义鼠标图案及设置原点方法
  18. Docute超简单的文档工具
  19. [C++]小根堆 插入/删除/初始化
  20. 中国橱柜行业品牌营销策略与竞争态势研究报告2022版

热门文章

  1. 家庭如何实现外网映射?--最全的保姆式教学
  2. 对于idea,关于java中制表符对不齐的问题,以及java中制表符“\t“对齐补全问题;以及修改idea的tab的位数
  3. 练习(一)——决策树与随机森林分析Titanic数据集船员生还情况
  4. linux服务原理大全,Linux服务的控制和管理原理
  5. 苹果新版本,ios14更新体验流程
  6. 多进程 Webview 实战
  7. DIY智能门控——应用篇02:RFID门禁
  8. 阿里云服务器配置选择个人和公司避坑指南!
  9. 【Android】Menu菜单详解——实战微信菜单
  10. upsource代码审查