本文是基于STM32战舰V3开发板平台的贪吃蛇游戏,主要用到了开发板上的ATK-HC05蓝牙模块,按键模块,LCD液晶显示屏模块;在程序设计方面主要是对贪吃蛇游戏进行程序设计,深入理解贪吃蛇游戏的设计思想以及开发板与手机蓝牙的信息交互,最终通过软件与硬件的配合实现STM32战舰V3开发板平台的贪吃蛇游戏。
可利用按键KEY_UP、KEY0、KEY1、 KEY2分别代表上、左、下、右或者手机端控制蛇的走位
基本思路:蛇每吃一个食物蛇身子就增加一格,用WASD控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推
附加功能:包含等级选择、暂停/继续、分数制、关卡的选择,难度的设置等
地图的创建:创建地图,游戏开始前先建立好地图, 将外围一圈设置为城墙。
void show_map(void)
{
LCD_Fill(x1,y1,x2,y1+10,BLUE);
LCD_Fill(x1,y1,x1+10,y3,BLUE);
LCD_Fill(x4-10,y2,x4,y4,BLUE);
LCD_Fill(x3,y4-10,x4,y4,BLUE);
LCD_Fill(210,700,480,700,WHITE);
}
食物的产生
利用随机函数(rand())产生随机食物的坐标,该坐标的值不能与墙重合,不能与蛇身重合。食物我这里用的是红色方块表示。
void Creat_food(void)
{
rand(); //产生一个30到50的随机数
if(Food_flag==1)
{
Food_flag=0;
Food_x= (rand()%45+1)*10; //产生一个1到45的随机数
Food_y= (rand()%55+1)*10; //产生一个1到55的随机数
}
LCD_Fill(Food_x,Food_y,Food_x+10,Food_y+10,RED);
}
构造一条蛇
使用两个unsigned char类型的二维数组。 SNACK_x[100] SNACK_y[100]
SNACK_x[100] SNACK_y[100]
SNACK_x[0]=90,SNACK_y[0]=50;
SNACK_x[1]=80,SNACK_y[1]=50;
SNACK_x[2]=70,SNACK_y[2]=50;
for(i=0;i<3;i++)//初始化蛇身长为SNACK_L=3,初始化蛇的位置:
{
LCD_Fill(SNACK_x[i],SNACK_y[i],SNACK_x[i]+10,SNACK_y[i]+10,RED);
}
利用按键KEY_UP、KEY0、KEY1、 KEY2分别代表上、左、下、右或者手机端控制蛇的走位,以及当蛇每走一步就利用清屏,重新打印蛇身,模拟蛇的移动。
#define LEFT 1
#define RIGHT 2
#define UP 3
#define DOWN 4
for(i=SNACK_L-1;i>0;i--)//记录蛇身
{
SNACK_x[i]=SNACK_x[i-1];
SNACK_y[i]=SNACK_y[i-1];
}
//计算蛇头位置
if(DIR==RIGHT) SNACK_x[0]=SNACK_x[0]+10;
if(DIR==LEFT) SNACK_x[0]=SNACK_x[0]-10;
if(DIR==UP) SNACK_y[0]=SNACK_y[0]-10;
if(DIR==DOWN) SNACK_y[0]=SNACK_y[0]+10;
游戏结束
当蛇撞墙, 以及咬到自己的身体时候游戏结束.
if(SNACK_x[0]==0||SNACK_x[0]==470||SNACK_y[0]==0||SNACK_y[0]==590)//是否撞墙
{
GAME_state=2;//GAME OVER
delay_ms(500);
delay_ms(500);
LCD_Clear(WHITE);
return;
}
for(i=1;i
完整工程资源链接:https://download.csdn.net/download/qq_41676952/11572132