C语言游戏开发之消消乐1

2019-02-11  本文已影响0人  世缘

        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个红色小球

如何绘制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

                C语言游戏开发之消消乐3

上一篇下一篇

猜你喜欢

热点阅读