MFC实现贪吃蛇游戏之食物的产生

来源:互联网 发布:静力学有限元分析软件 编辑:程序博客网 时间:2024/04/29 14:21
http://www.dbgpro.com/archives/340.html
最近有点事,耽误了文章的更新,需要说下的是,之前我用的VS2015写的代码,现在改成VS2010了~
根据早几天的文章,我们已经能创建出一条蛇,并能让他移动,今天的任务非常非常简单,我们只要在窗口上创建出食物即可~
思路是,我们随机一个X,Y出来,然后将数组 m_arrGameRange[x][y]改成3 然后在DrawGameRange函数加个判断 else if(m_arrGameRange[j] == 2)

大家可以先尝试下自己写个创建食物的代码,然后再看教程,这样有助于大家能力的提升!



好了,话不多说,我们在上次的代码的基础上加个函数,叫做CreateFood();没有返回值,我们再头文件加上void CreateFood();
然后在void CSnakeDlg::InitGameData()中调用下这个函数

CreateFood函数的实现代码如下
[C++] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
voidCSnakeDlg::CreateFood()
{
    srand(time(0));//创建一个时间种子
    intx = rand()%GAME_COL-1;//产生一个0--GAME_COL-1的随机数
    while(x == 0)//如果是0的话 会画在绿色的框框上,必须重新随机
    {
        x = rand()%GAME_COL-1;
    }
 
    inty = rand()%GAME_ROW-1;
    while(y == 0)
    {
        y = rand()%GAME_ROW-1;
    }
 
    m_arrGameRange[x][y] = 2;//将这个随机的行、列设置为2 表示食物
    Invalidate();
}
然后将DrawGameRange代码改成下面这样
[C++] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
voidCSnakeDlg::DrawGameRange(CDC& dc)
{
    CBrush brushGame(RGB(0, 0, 0));//创建黑色画刷 用来画游戏区域
    CBrush brushBorder(RGB(34, 176, 76));//创建绿色画刷 用来画边框
    CBrush brushFood(RGB(255,201,14));//创建橙色画刷 用来画食物
    //遍历行、列来画不同的颜色
    for(inti = 0; i < GAME_COL; i++)
    {
        for(intj = 0; j < GAME_ROW; j++)
        {
            //根据行列来计算一个矩形大小,每个矩形占20个像素
            CRect rt;
            rt.left = i * 20;
            rt.top = j * 20;
            rt.right = rt.left + 20;
            rt.bottom = rt.top + 20;
            if(m_arrGameRange[i][j] == 1)//需要画边框
            {
                //填充矩形的函数,
                //第一个参数是要填充的矩形
                //第二个参数是什么什么画刷填充矩形
                dc.FillRect(rt, &brushBorder);
            }
            elseif(m_arrGameRange[i][j] == 0)//画游戏区域
            {
                dc.FillRect(rt, &brushGame);
            }
            elseif(m_arrGameRange[i][j] == 2)//画食物
            {
                dc.FillRect(rt, &brushFood);
            }
        }
    }
}

大功告成,运行看看是不是有食物了
0 0
原创粉丝点击