最近有点事,耽误了文章的更新,需要说下的是,之前我用的VS2015写的代码,现在改成VS2010了~

根据早几天的文章,我们已经能创建出一条蛇,并能让他移动,今天的任务非常非常简单,我们只要在窗口上创建出食物即可~

思路是,我们随机一个X,Y出来,然后将数组 m_arrGameRange[x][y]改成3 然后在DrawGameRange函数加个判断 else if(m_arrGameRange[i][j] == 2)

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


好了,话不多说,我们在上次的代码的基础上加个函数,叫做CreateFood();没有返回值,我们再头文件加上void CreateFood();

然后在void CSnakeDlg::InitGameData()中调用下这个函数

CreateFood函数的实现代码如下

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代码改成下面这样

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);
			}
		}
	}
}

大功告成,运行看看是不是有食物了

大家可以多运行几次看看,食物是不是每次都在不同的地方~

今天的任务是不是很简单?吃食物的逻辑将在今晚或者明天早上发布,请大家关注哦~