接下来就是最终的成果展示了,实现的是一个比较完整的贪吃蛇游戏,基本功能包括:
吃食物增加长度;
撞到边界结束游戏(也就是重新开始);
我们在上一步实现了基本啊方向控制,这个时候我们要一步一步增加基础游戏功能,第一步就是吃食物增加长度,首先要产生一个事物,理论上最好使用随机数生成函数,不过这个工程还是不太了解的,这里我们使用的rand()函数,属于一个伪随机数函数。
主要产生随机食物的位置是初始化的时候以及吃到食物的时候:
rand_cnt = rand(); eat_snake.my_snake_food.iX = rand_cnt%24*10; rand_cnt = rand(); eat_snake.my_snake_food.iY = rand_cnt%13*10;
随机获取食物的横纵坐标,注意这里食物选择了和贪吃蛇身体一样的宽度,所以理论上显示屏幕最大是24*13;
接下来就是吃食物的操作,实际上就是运行的头部遇到食物就算吃到了:
if(eat_snake.my_snake_body[0].iX == eat_snake.my_snake_food.iX && eat_snake.my_snake_body[0].iY == eat_snake.my_snake_food.iY){
rand_cnt = rand();
eat_snake.my_snake_food.iX = rand_cnt%24*10;
rand_cnt = rand();
eat_snake.my_snake_food.iY = rand_cnt%13*10;
eat_snake.snake_body_len++;
}对于边界的判断不过是在达到边缘时的处理,之前的处理是传过去,现在是进行初始化从新开始:
void snake_move(){
uint16_t i;
for( i = eat_snake.snake_body_len; i > 0; i--){
eat_snake.my_snake_body[i].iX = eat_snake.my_snake_body[i-1].iX;
eat_snake.my_snake_body[i].iY = eat_snake.my_snake_body[i-1].iY;
}
if(eat_snake.snake_body_dir == 0){
if(eat_snake.my_snake_body[0].iX >= 230){
restart_flag = 1;
}
else{
eat_snake.my_snake_body[0].iX += eat_snake.snake_body_width;
eat_snake.my_snake_body[0].iY += 0;
}
}
else if(eat_snake.snake_body_dir == 1){
if(eat_snake.my_snake_body[0].iX == 0){
restart_flag = 1;
}
else{
eat_snake.my_snake_body[0].iX -= eat_snake.snake_body_width;
eat_snake.my_snake_body[0].iY += 0;
}
}
else if(eat_snake.snake_body_dir == 2){
if(eat_snake.my_snake_body[0].iY >= 120){
restart_flag = 1;
}
else{
eat_snake.my_snake_body[0].iY += eat_snake.snake_body_width;
eat_snake.my_snake_body[0].iX += 0;
}
}
else if(eat_snake.snake_body_dir == 3){
if(eat_snake.my_snake_body[0].iY == 0){
restart_flag = 1;
}
else{
eat_snake.my_snake_body[0].iY -= eat_snake.snake_body_width;
eat_snake.my_snake_body[0].iX += 0;
}
}
if(eat_snake.my_snake_body[0].iX == eat_snake.my_snake_food.iX && eat_snake.my_snake_body[0].iY == eat_snake.my_snake_food.iY){
rand_cnt = rand();
eat_snake.my_snake_food.iX = rand_cnt%24*10;
rand_cnt = rand();
eat_snake.my_snake_food.iY = rand_cnt%13*10;
eat_snake.snake_body_len++;
}
if(restart_flag == 1){
snake_init();
restart_flag = 0;
}
}整体的判断依然是在snake_move()中进行,实际上是在基础处理的基础上更改判断规则就可以了,不过这里实现的只是基础的贪吃蛇游戏功能,基本实现了游戏的操作,要是需要什么更加具有趣味性的操作,大家可以在此基础上进一步进行扩展。
整体的效果如下:
【彩屏贪吃蛇小游戏成果展示】 https://www.bilibili.com/video/BV1otWAe9EA4/?share_source=copy_web&vd_source=6c53bcbe419a41b4d4827b64953cb205
我要赚赏金
