VS2015贪吃蛇代码分析(10-7)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/86505729

点我下载代码

2.5.2 显示蛇的行动

通过自定义MoveSnake()显示贪吃蛇的行动。

(1)是否撞墙

在显示贪吃蛇的行动之前,首先要判断贪吃蛇是否撞到了墙上。通过自定义函数IsKnockWall()函数判断是否撞到墙上。在IsKnockWall()函数中,通过“2.3.2 ShowSnake()函数”中提到的全局变量,snake结构的指针head来判断是否撞到墙上。

if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26)

{

return true;

}

return false;

因为head表示贪吃蛇的头部,当头部超过地图的范围时,MoveSnake()函数返回true,表示撞到了墙上,否则返回false,表示没有撞到墙。

(2)结束游戏

当贪吃蛇撞到墙之后,应该结束游戏,显示游戏结束的原因以及最终的分数。在IsKnockWall()函数的if语句中,判断了贪吃蛇撞到墙之后,有如下代码

endgame_status = 1;

EndGame();

其中,endgame_status是int类型的全局变量,表示游戏结束的原因。endgame_status的值是1时,表示由于贪吃蛇撞到墙而游戏结束;值是2时表示贪吃蛇自己要到了自己而游戏结束;值是3时表示按下了Esc按键 而游戏结束。

EndGame()函数是一个自定义的函数,在该函数中,对endgame_status的值进行判断,根据不同的值显示不同的信息。

MySetConsoleCursorPosition(24, 12);
	switch(endgame_status)
	{
	case 1:
		printf("对不起,您撞到墙了。游戏结束.");
		break;
	case 2:
		printf("对不起,您咬到自己了。游戏结束.");
		break;
	case 3:
		printf("您的已经结束了游戏.");
		break;
	default:
		break;
	}
	MySetConsoleCursorPosition(24, 13);
	printf("您的得分是%d\n", total_score);

(3)移动贪吃蛇

如果贪吃蛇当前没有撞到墙,接下来就要根据上下左右按键移动贪吃蛇了。在“2.5.1 判断按键信息”中提到了表示贪吃蛇当前状态的变量snake_status,在MoveSnake()函数中接下来就要对该变量进行判断。

snake * nexthead = (snake*)malloc(sizeof(snake));

if (snake_status == U)

{

nexthead->x = head->x;

nexthead->y = head->y - 1;

.....

}

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/86505729