嵌入式期末考之贪吃蛇游戏机的设计_第1页
嵌入式期末考之贪吃蛇游戏机的设计_第2页
嵌入式期末考之贪吃蛇游戏机的设计_第3页
嵌入式期末考之贪吃蛇游戏机的设计_第4页
嵌入式期末考之贪吃蛇游戏机的设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式期末考之贪吃蛇游戏机的设计一、 项目总体说明1、用arm7系列型号为lpc2131的芯片设计一个贪吃蛇游戏机,其中还加入了ucos ii操作系统。2、用lcd12864来显示游戏的主界面,以及用lcd1602显示游戏开始的计时(time)、游戏所得的分数(score)和游戏通过的关数(lv)。其中“蛇”每吃的一个果实分数加1分,吃到2个果实游戏的关数加1,随着分数和关数的增加,“蛇”跑动的速度越快,“蛇”的长度也越长,游戏的难度也越大。当“蛇”碰到游戏界面的边框时,游戏结束.3、用5个独立按键来控制“蛇”的上、下、左、右,以及游戏的重新开始。二、 项目硬件设计1、电源模块:用3.3v的直

2、流电源。2、控制模块:采用独立式按键,独立式按键电路配置灵活,硬件结构简单,但每个按键必须占用一根i/o口线。在按键数量较多时,i/o口浪费较大。故只在按键数量不多时,采用这种按键。3、显示模块:采用lcd12864和lcd1602,它是一种专门用于显示字母、数字、符号、字符等点阵式lcd。其有显示质量高、数字接口、功耗低、体积小等优点。lpc2131lcd12864控制模块电源模块lcd1602图2.1 硬件模块划分三、 项目软件设计1、本设计包含了configure.h、includes.h、os_cfg.h、lcd1602.h、lcd12864.h、font.h、graphic.h等头文

3、件。以及包含了游戏显示信息gameinfo.c,按键处理keyprocess.c,游戏处理gameplay.c,游戏图形处理gamegraph.c,游戏动作处理gameactive.c等.c文件。2、主函数main.c里面包括了系统初始化函数osinit(),界面初始化函数vguiinit(),游戏初始化函数vgameinit(),以及系统开始函数osstart()。3、ucos ii操作系统中,在游戏初始化函数vgameinit()中创建了一个游戏任务vtaskgame,优先级为6;然后在游戏任务vtaskgame中创建了按键任务taskkey,优先级为10,以及显示游戏信息任务vtaski

4、nfo,优先级为20.四、 系统运行截图1、 系统运行截图:2、 “蛇”吃了一个果实之后,score加1:3、“蛇”吃了2个果实后,lv加1:五、软件源程序/*main.c*/*/*ucos+gui(greedy snake) */*在lpc2131上使用的ucos和12864的gui,以及1602驱动。 */*#include configure.h/* 名称:main* 功能:主函数*/int main (void)/ osinit(); / vguiinit(); / vgameinit(); / osstart(); / return 0;/*/* */*显示游戏信息* */* */*

5、#include configure.h/os_stk st_infostktask_stk_size;/* 名称:vshowtime* 功能:显示游戏时间*/int8u uca_timestr=time ;void vshowtime(int32u ultime)int8u ucminute,ucsecond;ucsecond=ultime%60;ucminute=ultime/60%60;vwritecmd1(first_line+1);vshowstring1(uca_timestr);vshowchar1(ucminute/10+0);vshowchar1(ucminute%10+0)

6、;vshowchar1(:);vshowchar1(ucsecond/10+0);vshowchar1(ucsecond%10+0);/* 名称:uca_scorestr* 功能:显示游戏分数*/int8u uca_scorestr=score:;void vshowscore(int32u ulscore)vwritecmd1(second_line);vshowstring1(uca_scorestr); vshowchar1(ulscore/1000%10+0); vshowchar1(ulscore/100%10+0); vshowchar1(ulscore/10%10+0); vsh

7、owchar1(ulscore%10+0);/* 名称:uca_levelstr* 功能:显示游戏等级*/int8u uca_levelstr=lv:;void vshowlevel(int8u uclevel)vwritecmd1(second_line+11);vshowstring1(uca_levelstr);vshowchar1(uclevel/10%10+0);vshowchar1(uclevel%10+0);/* 名称:vtaskinfo* 功能:显示游戏信息*/void vtaskinfo(void *pdata)while(1)vshowtime(st_snake.ultim

8、e+);vshowscore(st_snake.ulscore);vshowlevel(st_snake.uclevel);ostimedlyhmsm(0,0,0,80);/*/* */*按键处理* */* */*#include configure.hos_stk st_keystktask_stk_size;/#define key_sel pinsel1#define key_dir iodir#define key_set ioset#define key_clr ioclr#define key_pin iopin #define key_beg 25/* 名称:vkeyinit*

9、功能:按键初始化*/void vkeyinit(void)key_sel&=0xfc000000;/设置p0.16p0.28为gpio口key_dir|=0xff00ffff;/设置p0.25p0.28为输入key_set|=0xff00ffff;/* 名称:vkeyprocess* 功能:按键处理*/void vkeyprocess(void)int8u uckeycode,uctemp;uckeycode=(int8u)(key_pin25)&0x0f;if(!uckeycode)return;switch(uckeycode)case 1:uctemp=aspect_left ;brea

10、k; /leftcase 2:uctemp=aspect_top ;break; /upcase 4:uctemp=aspect_right ;break; /rightcase 8:uctemp=aspect_bottom;break; /downdefault:break; if(st_snake.ucaspect+uctemp)!=5) st_snake.ucaspect=uctemp;/* 名称:vtaskkey* 功能:按键处理*/void vtaskkey(void *pdata)while(1)vkeyprocess();ostimedlyhmsm(0,0,0,22);/*/*

11、*/*游戏处理* */* */*#include configure.h/snake st_snake;/* 名称:ucmovedecide()* 功能:判断是否可以移动*/int8u ucmovedecide(void)int8u ucrow,uccolumn;ucrow=*(st_snake.pucmap);uccolumn=*(st_snake.pucmap+1);switch(st_snake.ucaspect)case aspect_left:uccolumn-;break;case aspect_top:ucrow -;break;case aspect_right:uccolum

12、n+;break;case aspect_bottom:ucrow +;break;default:break;if(ucrowrow_max|uccolumncol_max)return game_over;if(ucrow=st_snake.ucbeanrow)&(uccolumn=st_snake.ucbeancolumn)return game_bean;if(ucgetbean(ucrow,uccolumn)=true)return game_over;return game_move;/* 名称:vgameover()* 功能:游戏结束*/void vgameover(void)/

13、vgameinit();/* 名称:vupdatelevel()* 功能:更新分数*/void vupdatelevel(void)st_snake.uclevel=st_snake.ulscore/2;st_snake.ucspeed=80-st_snake.uclevel*10;/* 名称:vupdatescore()* 功能:更新分数*/void vupdatescore(void)st_snake.ulscore+;vupdatelevel();/* 名称:vgamebean()* 功能:得到豆子*/void vgamebean(void)vaddsnake();vcreatebean

14、();vupdatescore();/* 名称:vgameplay()* 功能:游戏动作处理*/void vgameplay(void)switch(ucmovedecide()case game_over:vgameover();break;case game_bean:vgamebean();case game_move:vmovesnake();break;default:break;/os_stk st_gamestktask_stk_size;/* 名称:vtaskgame()* 功能:游戏任务*/void vtaskgame(void *pdata)targetinit();vwr

15、itecmd1(first_line); ostaskcreate(vtaskkey ,(void *)0, &st_keystktask_stk_size - 1 ,10); ostaskcreate(vtaskinfo,(void *)0, &st_infostktask_stk_size - 1, 20);while(1)vgameplay();ostimedlyhmsm(0,0,0,st_snake.ucspeed);/*/* */*游戏图形* */* */*#include configure.h/int8u uca_beanmaprow_maxcol_max;/* 名称:vdraw

16、bean()* 功能:绘制一个点*/void vdrawbean(int8u ucrow,int8u uccolumn) /21123:026;459:014 /025;0154int8u ucxpos,ucypos;int8u ucx,ucy;if(ucrowrow_max|uccolumncol_max)return;uca_beanmapucrowuccolumn=true;ucxpos=frame_left+uccolumn*4;ucypos=frame_top +ucrow*4;for(ucx=0;ucx4;ucx+)for(ucy=0;ucyrow_max|uccolumncol_

17、max)return;uca_beanmapucrowuccolumn=false;vsetcolour(col_white);ucxpos=frame_left+uccolumn*4;ucypos=frame_top +ucrow*4;for(ucx=0;ucx4;ucx+)for(ucy=0;ucy4;ucy+)vdrawpixel(ucxpos+ucx,ucypos+ucy);vsetcolour(col_black);/*/* 名称:ucgetbean()/* 功能:获取一个点/*int8u ucgetbean(int8u ucrow,int8u uccolumn) /21123:02

18、6;459:014 /025;015return uca_beanmapucrowuccolumn;int8u uca_tan= /贪0x20,0x20,0x10,0x90,0xa8,0xa4,0xaa,0xb1,0xa2,0xe4,0xa8,0x88,0x10,0x30,0x10,0x00,0x00,0x00,0x80,0x9f,0x40,0x20,0x10,0x0e,0x10,0x20,0x60,0xdf,0x00,0x00,0x00,0x00;int8u uca_chi= /吃0x00,0xfc,0x04,0x04,0xfc,0x20,0x58,0x4f,0x4a,0x48,0x48,0

19、xc8,0x08,0x08,0x08,0x00,0x00,0x0f,0x02,0x02,0x07,0x00,0x30,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x70,0x00;int8u uca_she= /蛇0x00,0xf0,0x10,0xff,0x10,0xf0,0x20,0x18,0xe8,0x09,0x0e,0x0a,0xa8,0x18,0x08,0x00,0x20,0x23,0x21,0x1f,0x11,0x3b,0x10,0x00,0x3f,0x42,0x41,0x41,0x40,0x38,0x00,0x00;/* 名称:vgameinit()*

20、功能:游戏初始化*/void vgameinit(void)int8u ucrow,uccolumn;for(ucrow=0;ucrow=row_max;ucrow+)for(uccolumn=0;uccolumn=col_max;uccolumn+);vclearbean(ucrow,uccolumn);/ vshowchin(1,2,uca_tan); vshowchin(3,2,uca_chi); vshowchin(5,2,uca_she); /vdrawrect(frame_left-1,frame_top-1,frame_right+1,frame_bottom+1);vdrawr

21、ect(frame_left-2,frame_top-2,frame_right+2,frame_bottom+2);/ vkeyinit(); / st_snake.ultime =0; st_snake.ulscore =0; st_snake.uclevel =0; st_snake.ucspeed =80; st_snake.ucaspect=aspect_right; /vcreatesnake();/vcreatebean(); / ostaskcreate(vtaskgame, (void *)0, &st_gamestktask_stk_size - 1, 6);/*/* */

22、*游戏动作* */* */*#include configure.h/int8u uca_bean100;/*/* 名称:vcreatesnake()/* 功能:创建一条蛇/*void vcreatesnake(void)int8u uccount;/ st_snake.pucmap =uca_bean; st_snake.uclength=3; *(st_snake.pucmap)=5; *(st_snake.pucmap+1)=10; *(st_snake.pucmap+2)=5; *(st_snake.pucmap+3)=9; *(st_snake.pucmap+4)=5; *(st_s

23、nake.pucmap+5)=8; *(st_snake.pucmap+6)=5; *(st_snake.pucmap+7)=7; *(st_snake.pucmap+8)=5; *(st_snake.pucmap+9)=6; *(st_snake.pucmap+10)=5; *(st_snake.pucmap+11)=5; *(st_snake.pucmap+12)=5; *(st_snake.pucmap+13)=4; *(st_snake.pucmap+14)=5; *(st_snake.pucmap+15)=3; *(st_snake.pucmap+16)=5; *(st_snake.

24、pucmap+17)=2; *(st_snake.pucmap+18)=5; *(st_snake.pucmap+19)=1; for(uccount=0;uccount=1;uccount-)*(st_snake.pucmap+uccount*2)=*(st_snake.pucmap+(uccount-1)*2);*(st_snake.pucmap+uccount*2+1)=*(st_snake.pucmap+(uccount-1)*2+1);switch(st_snake.ucaspect)case aspect_left:(*(st_snake.pucmap+1)-;break;case

25、 aspect_top:(*(st_snake.pucmap )-;break;case aspect_right:(*(st_snake.pucmap+1)+;break;case aspect_bottom:(*(st_snake.pucmap )+;break;default:break;vdrawbean(*(st_snake.pucmap),*(st_snake.pucmap+1);/* 名称:vaddsnake()* 功能:增加蛇的长度*/void vaddsnake(void)int8u uccount;st_snake.uclength+;for(uccount=(st_sna

26、ke.uclength-1);uccount=1;uccount-)*(st_snake.pucmap+uccount*2)=*(st_snake.pucmap+(uccount-1)*2);*(st_snake.pucmap+uccount*2+1)=*(st_snake.pucmap+(uccount-1)*2+1); *st_snake.pucmap=st_snake.ucbeanrow;*(st_snake.pucmap+1)=st_snake.ucbeancolumn;/*/* */*gui字体* */* */*#include configure.htypedef struct f

27、ontint8u *pucacharlib;int8u uccharwidth;int8u uccharhigh;int8u *pucachinlib;int8u ucchinwidth;int8u ucchinhigh;font;font st_curfont=null,8,16,null,16,16;/*/* 名称:vshowchar/* 功能:字符显示/*void vshowchar(int8u ucpage,int8u ucline,const int8u *ucacharmap)vputcusrow(ucpage,ucline,st_curfont.uccharwidth,ucach

28、armap);vputcusrow(ucpage+1,ucline,st_curfont.uccharwidth,ucacharmap+st_curfont.uccharwidth);/*/* 名称:vshowchin/* 功能:汉字显示/*void vshowchin(int8u ucpage,int8u ucline,const int8u *ucacharmap)vputcusrow(ucpage,ucline,st_curfont.ucchinwidth,ucacharmap);vputcusrow(ucpage+1,ucline,st_curfont.ucchinwidth,ucac

29、harmap+st_curfont.ucchinwidth); const int8u uca_number1016=0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x0f,0x10,0x20,0x20,0x10,0x0f,0x00,0x00,0x10,0x10,0xf8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3f,0x20,0x20,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x30

温馨提示

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

评论

0/150

提交评论