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

要用C语言编写一个单机小游戏,首先得安装一个图形库。在这里我用的是EasyX 图形库,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图形库了。
第四句:#include    srand();rand();两个函数所在的头文件,srand()是初始化随机种子,srand()配合time(NULL)用从而达到产生不重复的随机数的目的,rand()是产生随机数,srand()和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;//随机生成大写字母,65-90是大写字母的ASCII码,在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个               //随机数,其中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;
}
运行后的效果:
详细讲解C语言单机小游戏——打字母游戏_第1张图片

详细讲解C语言单机小游戏——打字母游戏_第2张图片

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

详细讲解C语言单机小游戏——打字母游戏_第3张图片

你可能感兴趣的:(详细讲解C语言单机小游戏——打字母游戏)