设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册

QQ登录

只需一步,快速开始

搜索
查看: 1703|回复: 0

[原创] MFC实现贪吃蛇游戏之食物的产生

[复制链接]
发表于 2016-11-14 09:08:12 | 显示全部楼层 |阅读模式
最近有点事,耽误了文章的更新,需要说下的是,之前我用的VS2015写的代码,现在改成VS2010了~
根据早几天的文章,我们已经能创建出一条蛇,并能让他移动,今天的任务非常非常简单,我们只要在窗口上创建出食物即可~
思路是,我们随机一个X,Y出来,然后将数组 m_arrGameRange[x][y]改成3 然后在DrawGameRange函数加个判断 else if(m_arrGameRange[j] == 2)

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



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

CreateFood函数的实现代码如下
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void CSnakeDlg::CreateFood()
{
    srand(time(0));//创建一个时间种子
    int x = rand()%GAME_COL-1;//产生一个0--GAME_COL-1的随机数
    while (x == 0)//如果是0的话 会画在绿色的框框上,必须重新随机
    {
        x = rand()%GAME_COL-1;
    }

    int y = rand()%GAME_ROW-1;
    while (y == 0)
    {
        y = rand()%GAME_ROW-1;
    }

    m_arrGameRange[x][y] = 2;//将这个随机的行、列设置为2 表示食物
    Invalidate();
}
然后将DrawGameRange代码改成下面这样
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void CSnakeDlg::DrawGameRange(CDC& dc)
{
	CBrush brushGame(RGB(0, 0, 0));//创建黑色画刷 用来画游戏区域
	CBrush brushBorder(RGB(34, 176, 76));//创建绿色画刷 用来画边框
	CBrush brushFood(RGB(255,201,14));//创建橙色画刷 用来画食物
	//遍历行、列来画不同的颜色
	for (int i = 0; i < GAME_COL; i++)
	{
		for (int j = 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);
			}
			else if(m_arrGameRange[i][j] == 0)//画游戏区域
			{
				dc.FillRect(rt, &brushGame);
			}
			else if(m_arrGameRange[i][j] == 2)//画食物
			{
				dc.FillRect(rt, &brushFood);
			}
		}
	}
}

大功告成,运行看看是不是有食物了
20160919182953_13338.png

您需要登录后才可以回帖 登录 | 5秒快速注册

本版积分规则

关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2  

GMT+8, 2017-11-22 22:37 , Processed in 0.158509 second(s), 34 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表