Advertisement

c语言 字母小游戏,详细讲解C语言单机小游戏——打字母游戏

阅读量:

为了在单机环境中开发小游戏, 首先必须先安装相应的图形库工具. 其中, 在我的项目中采用了EasyX 图形库框架(虽然它专为C++设计), 但它仍然能够有效支持C++初学者进行图形和游戏编程的开发.

例如VC + EasyX这套工具能够快速地绘制出几何图形来描绘一座房屋;还可以用来绘制一辆移动的小型车辆;用来开发像俄罗斯方块、贪吃蛇以及黑白棋等小游戏;用来实践各种图形学算法;举不胜举。

之后我也计划定期开发少量小游戏,其核心目标仍然是之前提到过,旨在加速地获得积极反馈,从而激发初学者对编程的兴趣。

这是图形库的下载地址:

http://pan.baidu.com/s/1qYfWJne安装好后就可以用了。

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

我用的开发环境是Microsoft Visual Studio

在使用 scanf() 输入操作 或 sprintf() 字符串格式化输入操作 时 会 出现 安全 警告。

#define _CRT_SECURE_NO_WARNINGS 的作用是阻止vs弹出这个安全提示。该文将详细说明这些原因的具体内容,则会等到后续更新的文章中进行介绍。

第三句:#include 这就是调用我们安装的easyX图形库了。

在包含头文件中定义了两个用于处理随机数生成的函数:srand()和 rand()。通过调用 srand() 函数来设置初始的随机种子值。调用 srand() 函数时配合 time(NULL) 来获取当前时间点以确保每次生成的随机数不同。 rand() 函数负责生成一系列的伪随机数值。具体的解释在后面的博客中解说。现在只需依样画葫芦便可完成相关内容的学习与实现。

第五句:#include 是time()函数所在的头文件。

int main()

{

initgraph(600, 400);//初始画布600*400像素,和closegraph()成对出现

int x, y;//字母随机出现的坐标

char target;//字母

int key;//记录用户按键

char s[10] = { 0 };//score:显示得分

char f[10] = { 0 };//wrong:显示失败分数

int score = 0;

int wrong = 0;

sprintf(s,"SCORE:%d",score);//将整数score格式化为字符串,并将其存储在字符变量s中.

outtextxy(0,350,s);//将s字符串得分在0*350的位置输出

sprintf(f, "WRONG:%d", wrong);//格式化输入失分

outtextxy(0, 375, f);//丢分输出

srand((unsigned int)time(NULL));//生成随机种子

//循环出现字母

while (1)

{

target = 65 + (rand() % 26);//通过C标准库中的rand()函数返回一个介于0至RAND_MAX之间的整数值
//该表达式的作用是将此值加65后得到对应的大写字母字符
其对应的ASCII码范围为65至90
//其中RAND_MAX为stdlib.h中的最大整数值,在此情况下该表达式的取值范围确定为65至90

x = 30 + rand() % 540;//字母在x轴出现的位置

//判断是否结束游戏

if (wrong == 10)

{

cleardevice();//清屏

settextstyle(40,0,"宋体");//设置字体样式

settextcolor(RGB(177, 174, 46));//字体颜色

sprintf(s, "SCORE:%d", score);//格式化输入得分

outtextxy(210,130,"GAME OVER");//输出GAME OVER

outtextxy(210, 180, s);//输出得分

break;//退出while循环

}

//字母掉落效果

for (y = 0; y < 400; y++)

{

settextcolor(RGB(177,174,46));//设置字母颜色

outtextxy(x,y,target);//输出字母

//字母调到底部扣分

if (y >= 390)

{

wrong++;//扣分

setfillcolor(BLACK);//填充颜色

bar(x, y, x + 20, y + 20);//黑色矩形遮盖字母

settextcolor(WHITE);

sprintf(f, "WRONG:%d", wrong);

outtextxy(0, 375, f);//覆盖上次计分

break;//退出for循环

}

//判断用户是否按键

else if (_kbhit())

{

key = _getch();//记录按键

//打字正确

if (key == target || key == target + 32)

{

score++;//加分

setfillcolor(BLACK);

bar(x,y,x+20,y+20);//遮盖字母

settextcolor(WHITE);

sprintf(s, "SCORE:%d", score);

outtextxy(0, 350, s);//覆盖上次分数

break;//退出for循环

}

//打字错误

else

{

wrong++;//丢分

setfillcolor(BLACK);

bar(x, y, x + 20, y + 20);//遮盖字母

settextcolor(WHITE);

sprintf(f, "WRONG:%d", wrong);

outtextxy(0, 375, f);//覆盖分数

break;//退出for循环

}

}

Sleep(8);//设置字母下落速度

//防止字母掉落时遮盖得得分输出处

//y++一次就输出一次得分

settextcolor(WHITE);

outtextxy(0, 350, s);

outtextxy(0, 375, f);

}

}

getchar();//防止闪屏

closegraph();//关闭画布

return 0;

}

运行后的效果:

c474b73c19a2f23badb1861086d93039.png
6c226355d90f27d17648cb164c7d97b7.png

在后面的博客中我将会加上贴图技术,和音乐,大致效果:

5de19b80a4265b5ed2fdac4bba4a736f.png

全部评论 (0)

还没有任何评论哟~