基于Freescale三轴加速度传感器LCD的贪食蛇游戏设计_第1页
基于Freescale三轴加速度传感器LCD的贪食蛇游戏设计_第2页
基于Freescale三轴加速度传感器LCD的贪食蛇游戏设计_第3页
基于Freescale三轴加速度传感器LCD的贪食蛇游戏设计_第4页
基于Freescale三轴加速度传感器LCD的贪食蛇游戏设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、/说明:该程序是基于freescale MCU、三轴加速度传感器、ili9320 LCD所写的贪食蛇游/戏,上传代码拥有全部的设计思路以及大部分函数主体/=/ 宏定义按键/=#define Key_Up 1#define Key_Down 4#define Key_Left 2#define Key_Right 3#define uchar unsigned char/=/ 使用结构体定义变量 使程序的名称更加的清楚/=struct uchar X;uchar Y; uchar Yes;Food;/食物结构体#define SNAKE_Max_Long 20 /最大长度struct uchar

2、 XSNAKE_Max_Long;uchar YSNAKE_Max_Long;uchar Long; uchar Life; uchar Score;/蛇的分数uchar Level;/蛇的等级 Snake;/蛇结构体uchar Key_V_temp=0; /取出上次按键值uchar Key_Value=0;static int l=0;static uint16 KEY_Init3=0,0,0;static uint16 KEY_BASE3=0,0,0;score20="0","10","20","30",&qu

3、ot;40","50","60","70","80","90","100","110","120","130","140","150","160","170","180","190"int level20=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,

4、18,19,20;static const byte Channels = 13,14,15; /* Contents for the device control register */static word MMA_7260_OutV3; static byte SumChan; static byte OutFlg; void MMA_7260_Init_3(void) OutFlg = FALSE; /* No measured value */ /* ATD0CTL4: SMP2=0,SMP1=0,SMP0=0,PRS4=0,PRS3=0,PRS2=1,PRS1=0,PRS0=1 *

5、/ ATD0CTL4 = 5; /* Set sample time and prescaler */ /* ATD0CTL3: DJM=0,S8C=0,S4C=0,S2C=0,S1C=1,FIFO=0,FRZ1=0,FRZ0=0 */ ATD0CTL3 = 8; /* Set ATD control register 3 */ /* ATD0CTL0: ?=0,?=0,?=0,?=0,WRAP3=1,WRAP2=1,WRAP1=1,WRAP0=1 */ ATD0CTL0 = 15; /* Set wrap around */ /* ATD0CTL1: ETRIGSEL=0,SRES1=1,S

6、RES0=0,SMP_DIS=1,ETRIGCH3=1,ETRIGCH2=1,ETRIGCH1=1,ETRIGCH0=1 */ ATD0CTL1 = 95; /* Set resolution and discharge */ /* ATD0CTL2: ?=0,AFFC=1,ICLKSTP=0,ETRIGLE=0,ETRIGP=0,ETRIGE=0,ASCIE=0,ACMPIE=0 */ ATD0CTL2 = 64; /* Set ATD control register 2 */-static void MMA_7260_Measure_3(void) for (SumChan=0; Sum

7、Chan<3; SumChan+) ATD0CTL5 = ChannelsSumChan; /* Start measurement of next channel */ while (!ATD0STAT0_SCF) /* Wait for AD conversion complete */ MMA_7260_OutVSumChan = ATD0DR0; /* Save measured value */ OutFlg = TRUE; /* Measured values are available */-byte MMA_7260_GetValue16_3(word *Values)

8、if (!OutFlg) /* Is measured value(s) available? */ return 0; /* If no then error */ /* Note: Next 4 lines are speed optimized */ *Values+ = MMA_7260_OutV0; /* Save measured values to the output buffer */ *Values+ = MMA_7260_OutV1; /* Save measured values to the output buffer */ *Values+ = MMA_7260_O

9、utV2; /* Save measured values to the output buffer */ OutFlg = FALSE; return 1; /* OK */=/贪食蛇游戏/=/函数名称:Trun_On_Point Trun_Off_Point (uchar x,uchar y)/函数功能:点亮或者熄灭 一个点。用于显示蛇身体/入口参数:无/出口参数:无/特别说明:此 Trun_On,函数换成其他的就可以兼容其他的液晶/ 入8*8 点阵 12864 等/=void Trun_On_Point (uchar x,uchar y,uchar color)ili9320_Recta

10、ngle(4*(x+2),(4*(y+2),(4*(x+3),(4*(y+3),color,color);/Bar(4*(x+2),(4*(y+2),(4*(x+3),(4*(y+3),color);void Trun_Off_Point (uchar x,uchar y)ili9320_Rectangle(4*(x+2),(4*(y+2),(4*(x+3),(4*(y+3),0xFFFF,0xFFFF);/=/函数名称:void Init_SNAKE(void) /函数功能:绘制游戏界面,初始化游戏等级等参数/入口参数:无/出口参数:无/=void Init_SNAKE(void) ucha

11、r i;/*获取方向基准*/ MMA_7260_Init_3(); MMA_7260_Measure_3(); MMA_7260_GetValue16_3(&KEY_BASE); /以下语句可以通过串口检验三轴加速度数据/* if(Flag) printp(" Get X Channel: %10D",KEY_BASE0); printp(" Get Y Channel: %10D",KEY_BASE1); printp(" Get Z Channel: %10D",KEY_BASE2); */ /*绘制游戏界面*/ ili9

12、320_Rectangle(4, 4, 166, 206,0,0); ili9320_Rectangle(5, 5, 167, 207,0,0);ili9320_Rectangle(6, 6, 168, 208,0,0);ili9320_Rectangle(5, 5, 169, 209,0,0);ili9320_Rectangle(7, 7, 167, 207,0xFFFF,0xFFFF);/绘制一个矩形框,160*240 ili9320_Write_multi_HZ_ASCII(167+10,32,32,32,"少女32.FON","少符32.FON"

13、,"07电信一",0xF800); ili9320_Write_multi_HZ_ASCII(167+10,66,32,32,"少女32.FON","少符32.FON","郑友金",0xF800); ili9320_Write_multi_HZ_ASCII(167+10,100,32,32,"少女32.FON","少符32.FON","贪食蛇",0xF800); /*初始化蛇参数*/Snake.Long=2; /定义初始化蛇的长度Snake.Life=0;

14、 /初始化蛇还活着Snake.Score=0;Food.Yes=1;Key_Value=0;for(i=0;i<Snake.Long;i+)/将蛇给赋值Snake.Xi=i+10;Snake.Yi=10;for(i=0;i<Snake.Long;i+)/将蛇给画出来Trun_On_Point(Snake.Xi,Snake.Yi,0);/=/函数名称:void Display_dead(uchar i) /函数功能:显示死亡界面/入口参数:无/出口参数:无/=void Display_dead(uchar i) l=0; Snake.Level=0; ili9320_Text(7+3

15、0,7+40,"GAME OVER",9,0,0xffff);ili9320_Delay(3000);Init_SNAKE();/=/函数名称:void Display_Pass(uchar i)/函数功能:显示过关界面/入口参数:无/出口参数:无/=void Display_Pass(uchar i) l+;Snake.Level+;ili9320_Text(7+30,7+40,"YOU WIN",7,0,0xffff);ili9320_Delay(3000);Init_SNAKE();/=/函数名称:void Display_finish(uchar

16、 i);/函数功能:显示通关界面/入口参数:无/出口参数:无/=void Display_finish(uchar i) l=0;Snake.Level=0;ili9320_Text(7+30,7+40,"YOU WIN",7,0,0xffff);ili9320_Text(7+30,7+80,"GAME FINISHED",13,0,0xffff);ili9320_Delay(4000);Init_SNAKE();/=/函数名称:void Run_SNAKE(void)/函数功能:蛇运动函数 /入口参数:无/出口参数:无/=void Run_SNAKE(

17、void) /*采用扫描MMA_7260方式确立方向*/ uchar i=0; uint16 KEY_Init4=0,0,0,0; /*获取方向基准*/ MMA_7260_Init_3(); MMA_7260_Measure_3(); MMA_7260_GetValue16_3(&KEY_Init);/以下语句可以通过串口检验三轴加速度数据 /* if(Flag) printp(" Get X1 Channel: %10D",KEY_Init0); printp(" Get Y1 Channel: %10D",KEY_Init1); printp

18、("Get Z1 Channel: %10D",KEY_Init2); printp(" Get X2 Channel: %10D",KEY_Init0-KEY_BASE0); printp(" Get Y2 Channel: %10D",KEY_Init1-KEY_BASE1); printp("Get Z2 Channel: %10D",KEY_Init2-KEY_BASE2); */ if(KEY_Init0-KEY_BASE0)>500 && (KEY_Init0-KEY_BASE0)

19、<3000)Key_Value=Key_Left; if(KEY_BASE0-KEY_Init0)>500 && (KEY_BASE0-KEY_Init0)<3000)Key_Value=Key_Right; if(KEY_Init1-KEY_BASE1)>500 && (KEY_Init1-KEY_BASE1)<3000)Key_Value=Key_Up; if(KEY_BASE1-KEY_Init1)>500 && (KEY_BASE1-KEY_Init1)<3000)Key_Value=Key_Do

20、wn; /Cpu_Delay100US(2100-Snake.Level*400); /*方向取值完毕*/ /*根据按键选择蛇的运动方向*/if(Key_Value=Key_Right&&Key_V_temp!=Key_Left)|(Key_Value=Key_Left&&Key_V_temp=Key_Right)if(Key_Value=Key_Right) /1.蛇行不是左向,下步可以右向。2.蛇行右向,按左向无效,继续右向Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;i<Snake.Long

21、-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;i<Snake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi,0xffff);Key_Value=0;/Key_V_temp=Key_Right;/if(Key_Value=Key_Left&

22、;&Key_V_temp!=Key_Right)|(Key_Value=Key_Right&&Key_V_temp=Key_Left)if(Key_Value=Key_Left)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;i<Snake.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.

23、YSnake.Long-2+0; /蛇头向你要求的方向移动for(i=0;i<Snake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi,0xffff);Key_Value=0;/Key_V_temp=Key_Left;/if( Key_Value=Key_Up&&Key_V_temp!=Key_Down)|( Key_Value=Key_Down&&Key_V_temp=Key_Up)if( Key_Value=Key_Up)Trun_Off_Point(Snake.X0,Snake.Y0); /

24、先把蛇尾给熄灭掉 for(i=0;i<Snake.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;i<Snake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi,0xffff);Key_Value=0;/Key_V_temp=Key_

25、Up;/if( Key_Value=Key_Down&&Key_V_temp!=Key_Up)|( Key_Value=Key_Up&&Key_V_temp=Key_Down)if( Key_Value=Key_Down)Trun_Off_Point(Snake.X0,Snake.Y0); /先把蛇尾给熄灭掉 for(i=0;i<Snake.Long-1;i+) /蛇身都是它前一段的蛇身的位置Snake.Xi=Snake.Xi+1;Snake.Yi=Snake.Yi+1; Snake.XSnake.Long-1=Snake.XSnake.Long-2+0;

26、Snake.YSnake.Long-1=Snake.YSnake.Long-2+1; /蛇头向你要求的方向移动for(i=0;i<Snake.Long;i+) /这个让蛇显示出来的函数Trun_On_Point(Snake.Xi,Snake.Yi,0xffff);Key_Value=0;/Key_V_temp=Key_Down;/*根据按键选择蛇的运动程序结束*/*判断蛇是否死亡*/if(Snake.XSnake.Long-1>=39|Snake.YSnake.Long-1>=49)/判蛇头是否撞到墙壁Snake.Life=1;for(i=3;i<Snake.Long;i+)/从第三节开始判断蛇头是否咬到自己if(Snake.Xi=Snake.X0&&Snake.Yi=Snake.Y0)Snake.Life=1;if(Snake.Life=1) /if the snake overi=Key_Value;Display_dead(i);/*判断蛇是否死亡程序结束*/*判断游戏是否全部完成*/ if(Snake.Level=2

温馨提示

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

评论

0/150

提交评论