STM32贪吃蛇游戏.doc_第1页
STM32贪吃蛇游戏.doc_第2页
STM32贪吃蛇游戏.doc_第3页
STM32贪吃蛇游戏.doc_第4页
STM32贪吃蛇游戏.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本人移植的STM32贪吃蛇游戏,亲测可行,以下为贪吃蛇驱动snake.c与snake.h,还有main.c,希望能对大家有点帮助。/*snake.c*/#include SNAKE.h#include lcd.h#include key.h/#include stdlib.h#include delay.hu8 Key_V_temp=0; /取出上次按键值u8 Key_Value=0; /取出上次按键值 /=/ 使用结构体定义变量 使程序的名称更加的清楚/=struct u8 X;u8 Y; u8 Yes;Food;/食物结构体#define SNAKE_Max_Long 10 /最大长度struct u8 XSNAKE_Max_Long;u8 YSNAKE_Max_Long;u8 Long; u8 Life; u8 Score;/蛇的分数u8 Level;/蛇的等级 Snake;/蛇结构体/=/函数名称:Trun_On_Point Trun_Off_Point (u8 x,u8 y)/函数功能:点亮或者熄灭 一个点。用于显示蛇身体/入口参数:无/出口参数:无/特别说明:此 Trun_On,函数换成其他的就可以兼容其他的液晶/ 入8*8 点阵 12864 等/=void Trun_On_Point (u8 x,u8 y)LCD_Fill(u16)(x*8),(u16)(y*8),(u16)(x*8+8),(u16)(y*8+8),RED);void Trun_Off_Point (u8 x,u8 y)LCD_Fill(u16)(x*8),(u16)(y*8),(u16)(x*8+8),(u16)(y*8+8),BLACK);/=/函数名称:void Init_SNAKE(void) /函数功能:绘制游戏界面,初始化游戏等级等参数/入口参数:无/出口参数:无/=void Init_SNAKE(void) u8 i;POINT_COLOR=WHITE;/画笔颜色BACK_COLOR=BLACK; /背景色 /*绘制游戏界面*/LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/绘制一个矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/ LCD_ShowString(0,280,200,16,16,Score);/Show ScoreLCD_ShowString(0,300,200,16,16,LEVEL);/Show LevelLCD_ShowNum(50,280,(u32)Snake.Score,4,16);LCD_ShowNum(50,300,(u32)Snake.Level,4,16);/LCDShow_u8Number(96,97,Snake.Level,0x00ff,0xBE5F);/*初始化蛇参数*/Snake.Long=2; /定义初始化蛇的长度Snake.Life=0; /初始化蛇还活着Snake.Score=0;Food.Yes=1;Key_Value=0; Key_V_temp=0;for(i=0;iSnake.Long;i+)/将蛇给赋值Snake.Xi=i+14;Snake.Yi=17;for(i=0;iSnake.Long;i+)/将蛇给画出来Trun_On_Point(Snake.Xi,Snake.Yi);/=/函数名称:void Display_dead(u8 i) /函数功能:显示死亡界面/入口参数:无/出口参数:无/=void Display_dead(void)LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/绘制一个矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/LCD_ShowString(0,280,200,16,16,GAME OVER! );LCD_ShowString(0,300,200,16,16,PRESS ENTER TO RESTART); while(Key_Value!=KEY_DOWN) Key_Value=KEY_Scan(0); LCD_Clear(BLACK);Init_SNAKE();/=/函数名称:void Display_Pass(u8 i)/函数功能:显示过关界面/入口参数:无/出口参数:无/=void Display_Pass(void)Snake.Level+;LCD_Clear(BLACK);LCD_Fill(0,0,8,280,DARKBLUE);/Rectangle(8,8-1,85,120,0xaa);/绘制一个矩形框, 0-127LCD_Fill(232,0,240,280,DARKBLUE);/LCD_Fill(0,0,240,8,DARKBLUE);/LCD_Fill(0,272,240,280,DARKBLUE);/ LCD_ShowString(0,280,200,16,16,YOU ARE WIN!);LCD_ShowString(0,300,200,16,16,PRESS ENTER TO CONTINUE); while(Key_Value!=KEY_DOWN) Key_Value=KEY_Scan(0); LCD_Clear(BLACK);Init_SNAKE();/=/函数名称:void Run_SNAKE(void)/函数功能:蛇运动函数 (游戏精华)/入口参数:无/出口参数:无/=void Run_SNAKE(void)u8 i=0;/*根据按键选择蛇的运动方向*/if(Key_Value=KEY_RIGHT&Key_V_temp!=KEY_LEFT)|(Key_Value=KEY_LEFT&Key_V_temp=KEY_RIGHT)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇头向你要求的方向移动for(i=0;iSnake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_RIGHT;if(Key_Value=KEY_LEFT&Key_V_temp!=KEY_RIGHT)|(Key_Value=KEY_RIGHT&Key_V_temp=KEY_LEFT)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2-1;Snake.YSnake.Long-1=Snake.YSnake.Long-2+0; /蛇头向你要求的方向移动for(i=0;iSnake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_LEFT;if( Key_Value=KEY_UP&Key_V_temp!=KEY_DOWN)|( Key_Value=KEY_DOWN&Key_V_temp=KEY_UP)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2-1; /蛇头向你要求的方向移动for(i=0;iSnake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_UP;if( Key_Value=KEY_DOWN&Key_V_temp!=KEY_UP)|( Key_Value=KEY_UP&Key_V_temp=KEY_DOWN)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;iSnake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;Snake.YSnake.Long-1=Snake.YSnake.Long-2+1; /蛇头向你要求的方向移动for(i=0;iSnake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi);Key_V_temp=KEY_DOWN;/*根据按键选择蛇的运动程序结束*/*判断蛇是否死亡*/if(Snake.XSnake.Long-1=30|Snake.YSnake.Long-1=33)/判蛇头是否撞到墙壁Snake.Life=1;for(i=3;iSnake.Long;i+)/从第三节开始判断蛇头是否咬到自己if(Snake.Xi=Snake.X0&Snake.Yi=Snake.Y0)Snake.Life=1;if(Snake.Life=1) /if the snake overDisplay_dead();/*判断蛇是否死亡程序结束*/*判断蛇是否最长了*/if(Snake.Long=SNAKE_Max_Long)Display_Pass();/ /*判蛇是否吃到食物*/if(Snake.XSnake.Long-1=Food.X&Snake.YSnake.Long-1=Food.Y)/Trun_Off_Point(Food.X,Food.Y); /消隐食物Snake.Long+;/蛇节数加1Snake.XSnake.Long-1=Food.X;Snake.YSnake.Long-1=Food.Y;Snake.Score+=10;LCD_ShowNum(50,280,(u32)Snake.Score,4,16);Food.Yes=1; /食物标志置1/*放果子程序*/if(Food.Yes=0)Trun_On_Point(Food.X,Food.Y); if(Food.Yes=1)while(1)Food.X=rand()%28+1; /获得随机数Food.Y=rand()%28+1; for(i=0;iSnake.Long;i+)/判断产生的食物坐标是否和蛇身重合if(Food.X=Snake.Xi)&(Food.X=Snake.Yi)break;if(i=Snake.Long)Food.Yes=0;break;/产生有效的食物坐标/ /*延时用于调整游戏速度*/delay_ms(100-Snake.Level*10);/*snake.h*/#include stm32f10x.h#ifndef _SNAKE_H_#define _SNAKE_H_#ifndef uchar#define uchar unsigned char #endif#ifndef uint#define uint unsigned int #endifvoid Init_SNAKE(void);void Run_SNAKE(void);void Display_Pass(void);void Display_dead(void);void Trun_On_Point (u8 x,u8 y);void Trun_Off_Point (u8 x,u8 y);extern u8 Key_V_temp; /取出上次按键值extern u8 Key_Value; /取出上次按键值/extern void Trun_On_Point (uchar x,uchar y,uchar color);#endif/*main.h*/#include led.h#include delay.h#include key.h#include sys.h#include lcd.h#include usart.h#include snake.h/ALIENTEK战舰STM32开发板实验13/TFTLCD显示实验 /技术支持:/广州市星翼电子科技有限公司void Key()u8 t;t=KEY_Scan(0);/得到键值 if(t) switch(t) case KEY_UP:/控制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论