嵌入式期末考之貪吃蛇游戲機的設計_第1頁
嵌入式期末考之貪吃蛇游戲機的設計_第2頁
嵌入式期末考之貪吃蛇游戲機的設計_第3頁
嵌入式期末考之貪吃蛇游戲機的設計_第4頁
嵌入式期末考之貪吃蛇游戲機的設計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式期末考之貪吃蛇游戲機的設計一、 項目總體說明1、用arm7系列型號為lpc2131的芯片設計一個貪吃蛇游戲機,其中還加入了ucos ii操作系統(tǒng)。2、用lcd12864來顯示游戲的主界面,以及用lcd1602顯示游戲開始的計時(time)、游戲所得的分數(score)和游戲通過的關數(lv)。其中“蛇”每吃的一個果實分數加1分,吃到2個果實游戲的關數加1,隨著分數和關數的增加,“蛇”跑動的速度越快,“蛇”的長度也越長,游戲的難度也越大。當“蛇”碰到游戲界面的邊框時,游戲結束.3、用5個獨立按鍵來控制“蛇”的上、下、左、右,以及游戲的重新開始。二、 項目硬件設計1、電源模塊:用3.3v的直

2、流電源。2、控制模塊:采用獨立式按鍵,獨立式按鍵電路配置靈活,硬件結構簡單,但每個按鍵必須占用一根i/o口線。在按鍵數量較多時,i/o口浪費較大。故只在按鍵數量不多時,采用這種按鍵。3、顯示模塊:采用lcd12864和lcd1602,它是一種專門用于顯示字母、數字、符號、字符等點陣式lcd。其有顯示質量高、數字接口、功耗低、體積小等優(yōu)點。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里面包括了系統(tǒng)初始化函數osinit(),界面初始化函數vguiinit(),游戲初始化函數vgameinit(),以及系統(tǒng)開始函數osstart()。3、ucos ii操作系統(tǒng)中,在游戲初始化函數vgameinit()中創(chuàng)建了一個游戲任務vtaskgame,優(yōu)先級為6;然后在游戲任務vtaskgame中創(chuàng)建了按鍵任務taskkey,優(yōu)先級為10,以及顯示游戲信息任務vtaski

4、nfo,優(yōu)先級為20.四、 系統(tǒng)運行截圖1、 系統(tǒng)運行截圖: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()/* 功能:創(chuàng)建一條蛇/*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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論