C语言游戏开发之消消乐1
Hello,亲爱的读者们!
这是我第一次在简书上写文章哟~
我现在大二了,作为刚学完C语言的新手来说,课堂中学习的C语言知识固然重要,但也许久而久之会枯燥无味~
于是乎,趁着这个寒假,我在网上查找了些关于C语言的实际应用,恰巧在香蕉网上看到了夜夜爱消除的游戏开发,于是就跟着视频学习了起来,完成了消消乐的游戏开发,收获颇多~~
下面我将详细介绍开发~消消乐~项目的过程,希望通过本教程能够帮助到像我这样的C语言初学者;同时由于本人水平有限,难免会出现纰漏,希望广大读者能够多多提出意见,深表感谢!
1、开发环境
Microsoft Visual C++ 6.0(C语言编程应用软件) ————下载地址及安装教程见网上,同时还要去easyx官网下载easyx图形库以及附带的graphics头文件。
兴许有读者会问,可以用其他的C语言编程软件吗?比如visual studio 或者devc++。为此,我上网查了一下,devc++不支持easyx图形库(后面编程要绘制图形),而visual studio 和Microsoft Visual C++ 6.0一样,支持easyx库,可以编程完成这个小项目。
2、游戏思路
大家小时候应该都玩过消消乐,其具体的游戏过程以及游戏玩法,相信大家都有所了解。而对于开发人员来说,在项目开发前,必须要有明确的目标与清晰的思路。
消消乐的编程思路大致以下:
1.初始化游戏窗口(电脑上打开一个软件,通常都有一个窗口)
2.游戏开始界面
——绘制边框 ——绘制小球
——绘制光标 ——绘制时间
——绘制分数
3.游戏过程
——通过方向键移动光标
——判断相同颜色的小球,记录相同颜色小球位置
——将相同颜色小球消失一段时间
——小球下落,补充新小球
——刷新分数
4.计时时间到,显示游戏结束
5.释放资源
3、代码编写
1.首先,先写main函数。
#include <stdio.h>
int main()
{
initgame();//初始化游戏窗口
gamebegin();//游戏开始界面
gameplay();//玩游戏的具体过程
closegame();//游戏结束,释放资源
}
这里,main函数由initgame(),gamebegin(),
gameplay(),closegame()构成,通过注释表明各个函数的功能。main函数简洁明了,main函数里面的子函数再另外写,这也是C语言模块化编程的体现。
2.初始化游戏窗口和游戏结束释放资源(initgame()函数和closegame()函数的编写)
添加头文件#include <graphics.h>
根据easyx文档,在initgame()函数里写initgraph(1000, 700);//创建一个长1000,宽700的游戏窗口;在closegame函数里写
getch();//等待你按下任意键,再继续执行下面的语句;
closegraph;//关闭游戏窗口
由于用到getch()函数,还需添加头文件#include <conio.h>
3.编写游戏界面
根据前面的思路,依次绘制边框、小球、光标、时间和分数。
1)绘制边框
setlinestyle(PS_SOLID, 10);//线型为实线,宽度为10
setlinecolor(RGB(50, 50, 50));//边框的颜色
rectangle(255, 45, 745, 655);以(255,45)和(745,655)定义一个矩形边框
2)绘制小球
如何绘制一个红色小球?(以左上角为例)
easyx库提供了很多图形绘制函数,包括形状、颜色、样式等。
setlinecolor(RGB(255,0,0));//圆边界为红色
setlinestyle(PS_SOLID, 1);//圆边界线型为实线,线宽为1
setfillcolor(RGB(255,0,0));//圆的填充颜色为红色
fillcircle(280,70,20);//以(280,70)为圆心,半径20画圆
如何在边框里绘制180个红色小球?
——这里要用到for循环
for(int x=280;x<740;x+=40)
{
for(int y=70;y<650;y+=40)
{
setlinecolor(RGB(255,0,0));
setlinestyle(PS_SOLID, 1);
setfillcolor(RGB(255,0,0));
fillcircle(x,y,18);//小球半径适当改小
}
}
如何绘制180个不同颜色的小球?
~大家想一下~
这里,需要用到随机数,小编在这里想说,当时在学C语言的时候,当学到随机数,感觉用处不大。现在看来,呵呵@
为此,需要添加头文件:#include <time.h>
如果要产生0-9的随机数——
srand((unsigned)time(NULL));
//提供随机数种子
int random=rand()%10;
//生成随机数
这样,生成180个不同颜色的小球的程序可以这样写:
首先,定义一个数组,用来存放6种不同的颜色。
COLORREF colorArr[6]={RGB(200,0,0),RGB(0,200,0),RGB(0,0,200),
RGB(200,200,0),RGB(200,0,200),RGB(0,200,200)};
其次,再修改之前的程序如下:
srand((unsigned)time(NULL));
setlinestyle(PS_SOLID, 1);
for(int x=280;x<740;x+=40)
{
for(int y=70;y<650;y+=40)
{
COLORREF c1=colorArr[rand()%6];
setlinecolor(c1);
setfillcolor(c1);
fillcircle(x,y,18);
}
}
3)绘制光标
——先随机找一中心点绘制白色矩形光标
setlinecolor(RGB(255,255,255));
rectangle(480-20,390-20,480+20,390+20);
由于后期绘制移动的光标,所以将它封装成函数,以便多次调用。
void drawcursor(int x,int y,COLORREF c1)
//绘制光标
{
setlinecolor(c1);
rectangle(x-20,y-20,x+20,y+20);
}
因为x,y同时出现才有意义,为此定义一个结构体的数据类型,用以表示位置坐标。
typedef struct position{
int x;
int y;
}posType;//由于结构体名字过长,换个名字
void drawcursor(posType cur,COLORREF c1)
{
setlinecolor(c1);
rectangle(cur.x-20,cur.y-20,cur.x+20,cur.y+20);
}
我们在前面定义一个全局变量:
posType cur;//当前光标的位置
#原来的程序可修改为:
cur.x=480;
cur.y=390;
drawcursor(cur,RGB(255,255,255));
4)绘制时间
void drawtime(int sec)
{
char str[30];
settextcolor(RGB(255,255,0));//文字颜色
settextstyle(25,0,_T(“黑体”));//文字大小与字体
sprintf(str,“剩余时间:%2d s”,sec);//将字符串存入str数组
outtextxy(20,50,str);//在指定位置(20,50)输出字符串
}
5)绘制分数
void drawscore(int score)
{
char str[30];
settextcolor(RGB(255,0,0));//文字颜色
settextstyle(25,0,_T(“黑体”));//文字大小与字体
sprintf(str,“分数:%d ”,score);//将字符串存入str数组
outtextxy(20,550,str);//在指定位置(20,550)输出字符串
}
由于时间和分数都是需要刷新的,将它们封装成函数,可以在后面很方便地调用它们。
本章介绍的主要是就是游戏界面代码的编写,至于游戏具体过程的编写,后面会出详细的教程,希望广大读者批评指正,谢谢!
链接: C语言游戏开发之消消乐2