美文网首页
C语言游戏开发之消消乐1

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

作者: 世缘 | 来源:发表于2019-02-11 18:52 被阅读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

    相关文章

      网友评论

          本文标题:C语言游戏开发之消消乐1

          本文链接:https://www.haomeiwen.com/subject/ongteqtx.html