C语言实现贪吃蛇小游戏

2020-03-27 17:57:56王振洲

4、实现生成食物的代码

void createFood()
{
 if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇头碰到食物
 {
 //蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物
 while (1)
 {
 int flag = 1;
 srand((unsigned int)time(NULL));
 food.x = rand() % (MAPWIDTH - 4) + 2;
 food.y = rand() % (MAPHEIGHT - 2) + 1;
 
 //随机生成的食物不能在蛇的身体上
 for (int i = 0; i < snake.len; i++)
 {
 if (snake.x[i] == food.x && snake.y[i] == food.y)
 {
 flag = 0;
 break;
 }
 }
 //随机生成的食物不能横坐标为奇数,也不能在蛇身,否则重新生成
 if (flag && food.x % 2 == 0)
 break;
 }
 
 //绘制食物
 gotoxy(food.x, food.y);
 printf("★");
 
 snake.len++;//吃到食物,蛇身长度加1
 sorce += 10;//每个食物得10分
 snake.speed -= 5;//随着吃的食物越来越多,速度会越来越快
 changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果
 }
 return;
}

5、判断蛇运动是否符合规范

bool snakeStatus()
{
 //蛇头碰到上下边界,游戏结束
 if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)
 return false;
 //蛇头碰到左右边界,游戏结束
 if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)
 return false;
 //蛇头碰到蛇身,游戏结束
 for (int i = 1; i < snake.len; i++)
 {
 if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
 return false;
 }
 return true;
}

六、main函数 

int main()
{
 drawMap();
 while (1)
 {
 keyDown();
 if (!snakeStatus())
 break;
 createFood();
 Sleep(snake.speed);
 }
 
 gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);
 printf("Game Over!n");
 gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);
 printf("本次游戏得分为:%dn", sorce);
 Sleep(5000);
 return 0;
}

七、运行效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。