基于STM32F407的贪吃蛇小游戏
硬件资源
LED灯
按键
4.3’TFTLCD屏
定时器
效果展示
游戏操作说明
点击屏幕中Start开始游戏
key0、key1、key2、keyup分别控制蛇的右下左上方向
如果蛇碰壁或者吃到自己,点击屏幕中的REStart重新开始游戏
部分SNAKE源码
初始化蛇
void snakeInit(){
TIM3_Int_Init(4999,7199); //初始化定时器
snake.length=3; //初始长度为3
snake.snakeX[0]=55;
snake.snakeX[1]=55;
snake.snakeX[2]=55;
snake.snakeY[0]=75;
snake.snakeY[1]=65;
snake.snakeY[2]=55;
snake.headX=snake.snakeX[0]; //记录下头部的位置
snake.headY=snake.snakeY[0]; //记录下头部的位置
snake.dir=-1; //设置运动方向
snake.tpdir=-1;//设置初始按键方向
snake.life=1; //1:蛇还活着;0:蛇死亡
generateFood();//生成食物
refresh(); //调用函数显示出蛇和食物的位置
刷新屏幕上蛇和食物的位置
void refresh(){
if(snake.life==1){
u8 i;
LCD_Fill(5,5,475,795,WHITE);
for(i=0;i<snake.length;i++){
LCD_DrawRectangle(snake.snakeX[i],snake.snakeY[i],snake.snakeX[i]+10,snake.snakeY[i]+10);
switch(i%3){
case 0:
LCD_Fill(snake.snakeX[i],snake.snakeY[i],snake.snakeX[i]+10,snake.snakeY[i]+10,GREEN);
break;
case 1:
LCD_Fill(snake.snakeX[i],snake.snakeY[i],snake.snakeX[i]+10,snake.snakeY[i]+10,BLUE);
break;
default:
LCD_Fill(snake.snakeX[i],snake.snakeY[i],snake.snakeX[i]+10,snake.snakeY[i]+10,YELLOW);
}
}
LCD_DrawRectangle(snake.foodX,snake.foodY,snake.foodX+10,snake.foodY+10);
LCD_Fill(snake.foodX,snake.foodY,snake.foodX+10,snake.foodY+10,RED);
LCD_Fill(snake.headX,snake.headY,snake.headX+10,snake.headY+10,RED);
}
}
所有源码
查看https://editor.csdn.net/md/?articleId=116117904