版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、推箱子 (以前做的,現(xiàn)在加以整理傳上來給初學(xué)者做個參考,也整點分用用。)演示:/programs/view/tbeezcgrzwy/上電顯示游戲的名字及我的qq開始游戲1. 紅外:不同的遙控器用的芯片不同,發(fā)射出來的數(shù)據(jù)長度都不同。12864:不同的12864的指令可能是不同的,需要根據(jù)具體的模塊來編寫代碼。具體怎么用,去看數(shù)據(jù)手冊吧。我用的是漢升的 12864-15c。2. 游戲?qū)崿F(xiàn):a、我把屏幕分成了8*8的區(qū)域,箱子,目的地,人墻,都是8*8的。所以這個屏幕是16*8的了b、我的這塊12864,在基本指令集是寫入文字,再在擴展指令集時繪制圖形,文字會
2、反白顯示,我的菜單模塊就是根據(jù)這個特點來實現(xiàn)的。注釋中也叫文本模式,圖形模式。c、數(shù)據(jù)表示:a、在地圖中用0、1、2、3、4分別表示 空地、墻、人、目的地、箱子,他們的點陣數(shù)據(jù)保存在全局變量unsigned char code yuansu_code58中。b、在程序rom中,各關(guān)的地圖保存在全局變量unsigned char code ditu_ju_code3128(我只做了3關(guān))中。如:第一關(guān)的地圖數(shù)據(jù): 第一關(guān)游戲畫面:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
3、0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0c、一個重要的全局變量unsigned char idata ditu816,游戲開始時,rom中的地圖數(shù)據(jù)會被加載到這個數(shù)組中,之后,所有的游戲操作都會圍繞著這個數(shù)組展開。根據(jù)用戶的操作去修改這個數(shù)組,然后根據(jù)這個數(shù)組刷新屏幕。如,第一關(guān)開始時,將人左移一
4、格,idata ditu816=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0電路:推箱子地圖編輯器: (關(guān)閉本word文件再打開,下面
5、的flash可以重新開始。沒寫好,慚愧)(0空地 1墻 2人 3目的地 4箱子)源代碼:#include/*定義引腳連接*/ #define lcd_shuju p0 /12864的引腳#define lcd_en p3_4#define lcd_rs p3_5#define lcd_rw p3_6#define lcd_psb p3_7#define fm p2_3/蜂鳴器引腳/*定義按鍵常數(shù)*/ #definekey_shang 48#definekey_xia 176#definekey_zuo 232#definekey_you 104#definekey_quxiao 40#defi
6、nekey_queding 24#definekey_caidan 136/*紅外用的變量*/char ir_timer=0;/脈沖周期unsigned char ir_datah=0; /存儲8位數(shù)據(jù)碼unsigned char ir_datal=0; /存儲8位數(shù)據(jù)反碼bit ir_ok=0;/接收完bit starflag=0;/等于1時,表示幀已經(jīng)開始/*游戲時用的變量*/unsigned char biaoti0=;unsigned char biaoti1=推箱子;unsigned char biaoti2=;unsigned char shengming=qq:857448526
7、;unsigned int shengyi =0; /當不為0時,就用t1定時器播放聲音unsigned char ren_x,ren_y;/人的座標unsigned char jushu=0;/用來保存玩的是第幾局游戲bit wancheng =0;/是否全部完成char chexiao22=0,0,0,0;/記錄移動箱子時,人的x,y 及運動方向dx,dy 最大撤銷1步unsigned char idata ditu816;/當作內(nèi)存來使用,用來保存游戲的地圖,整個游戲都圍繞著這個數(shù)組展開unsigned char caidan_biaoqian0=打開:; /菜單上的文字unsigned
8、 char caidan_biaoqian1=;unsigned char caidan_biaoqian2=;unsigned char caidan_biaoqian3=;/*游戲元素的點陣數(shù)據(jù)*/unsigned char code yuansu_code58=0,0,0,0,0,0,0,0,/空地 0 255,255,255,255,255,255,255,255,/墻的點陣數(shù)據(jù) 1 0x00,0x18,0x5a,0x7e,0x18,0x24,0x42,0x00,/人的點陣數(shù)據(jù) 20x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00,/目的地的點陣數(shù)據(jù) 30x
9、00,0x7e,0x56,0x6a,0x56,0x6a,0x7e,0x00/箱子的點陣數(shù)據(jù) 4;unsigned char code ditu_ju_code3128=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,2,1,0,
10、0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,/第 1 局的地圖數(shù)據(jù)0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,2,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,4,0,4,0,4,1,0,0,0,0,0,0,0,0,1,0,0,1,1,4,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,4,0,1,1,1,0,0,0,0,0,0,0,1,0,0,3,3,3,3,3,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
11、,0,0,0,/第 2 局的地圖數(shù)據(jù)0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,3,3,3,0,1,0,0,0,0,0,0,0,0,0,0,1,3,3,3,3,1,1,1,1,0,0,0,0,0,1,1,1,0,4,1,1,1,0,0,1,0,0,0,0,0,1,0,4,4,0,0,4,0,4,0,1,0,0,0,0,0,1,0,0,0,0,4,0,4,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,2,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0/第 3 局的地圖數(shù)據(jù);/* 延時函數(shù)*/void y
12、anshi(int us) us*=3; for(us;us0;us-);/*與紅外有關(guān)的函數(shù)*/void t0_func() interrupt 1/定時器t0 中斷服務(wù)函數(shù),有兩個作用ir_timer+;/1、播放聲音。shengyi 是一個全局變量,if(shengyi1)/ 當它等于0時,蜂鳴器連接的引腳輸出低電平,fm=0;/ 當它不等于0時,輸出高電平,使蜂鳴器發(fā)聲shengyi-;/所以呢, shengyi值越大,蜂鳴器響的時間越長if(shengyi=1)/2、測量紅外脈沖的長度,用ir_timer保存。ir_timer=7時,認為該脈沖是1。 fm=1; shengyi=0;
13、void int0_func() interrupt 0 /外部中斷int0中斷服務(wù)函數(shù),用來 解析紅外 /這個只能用來解析幀長度為32個下降沿的紅外幀,/并且不處理長按一個鍵的情況,/在這里,開發(fā)板的硬件上面將紅外接收頭的out腳已經(jīng)經(jīng)過反向后再接單片機/所以剛好這里數(shù)的是下降沿static char i=0;/i用來保存這是第幾個脈沖 if(starflag)/starflag=0,認為這個脈沖是前導(dǎo)碼,下一個脈沖開始依次是/地址碼,地址反碼,數(shù)據(jù)碼,數(shù)據(jù)反碼,這里只處理了數(shù)據(jù)碼和數(shù)據(jù)反碼 if(ir_timer=33&ir_timer=16&i=7)ir_datah|=1;/ir_tim
14、er=7時,向數(shù)據(jù)碼中移入1,否則,移入0.ir_datah=1;elseir_datah=24&i=7時,向數(shù)據(jù)碼反碼中移入1,否則,移入0.if(ir_timer=7)ir_datal|=1; ir_datal=1;elseir_datal=32)/i=32時,標志著一個完整的紅外數(shù)據(jù)幀已經(jīng)接收完,將接收完標志致一ir_ok=1;elsei=0;starflag=1;ir_ok=0;ir_timer=0;/*獲取紅外按鍵值*/unsigned char scanf_hongwai()while(1)if(ir_ok) if(ir_datal | ir_datah) ir_ok=0;star
15、flag=0;shengyi=300; return ir_datah; /* 向 12864 寫指令 */void wzl(unsigned char zl) lcd_en=0; lcd_rs=0; lcd_rw=0; lcd_shuju=zl; lcd_en=1; yanshi(1); lcd_en=0;/*向 12864 寫數(shù)據(jù)*/void wshuju(unsigned char shuju) lcd_en=0; lcd_rs=1; lcd_rw=0; lcd_shuju=shuju; lcd_en=1; yanshi(1); lcd_en=0;/*文本轉(zhuǎn)到圖形模式 并開繪圖顯示*/v
16、oid wenben_to_tuxing()wzl(60); /8位接口、使用擴展指令集wzl(62);/使用擴展指令集,開繪圖顯示 /*繪圖轉(zhuǎn)到文本模式 并關(guān)繪圖顯示*/ void tuxing_to_wenben() wzl(60);/關(guān)繪圖 wzl(56);/轉(zhuǎn)到文本模式 /*圖形模式下的清屏*/void tuxing_qinping()unsigned char x=128;unsigned char y=128;qp0:wzl(y);wzl(x);qp1:wshuju(0);wshuju(0);x+;if(x144)goto qp1;x=0;y+;if(y160)goto qp0;/
17、*圖形模式下 繪制一條 高亮*/void tuxing_gaoliang(unsigned char n)/第幾行 從14 unsigned x=128,y=128,i=0,j=0;if(n=1)x=128;y=128;if(n=2)x=128;y=144;if(n=3)x=136;y=128;if(n=4)x=136;y=144;gl0:wzl(y+j);wzl(x);gl1:wshuju(255);wshuju(255);i+;if(i8)goto gl1;i=0;j+;if(j2) n-; goto cd;goto cd;break;case key_xia: if(n4) n+;got
18、o cd; goto cd;break;case key_quxiao: n=255;break;case key_queding:break;default:goto cd2;break;tuxing_to_wenben();wzl(1);/清屏yanshi(200);wenben_to_tuxing(); return n;/*按頁寫一個高為 8 的行 需要傳入左上角的坐標用戶 兩個 指針*/void tuxing_ye(unsigned char *tx0,unsigned char *tx1,unsigned char ye,unsigned char y)/tx0在左,tx1在右un
19、signed char i=y+8;while(yi)wzl(y);wzl(ye);wshuju(*tx0);tx0+;wshuju(*tx1);tx1+;y+;/*將內(nèi)存中的ditu寫入到屏幕*/void to_lcd()unsigned char i=0;unsigned char j=0; for(i=0;i4;i+) /寫上半屏for(j=0;j=14;j+=2)tuxing_ye(&yuansu_codedituij,&yuansu_codedituij+1,128+j/2,i*8+128); for(i=4;i8;i+)/寫下半屏for(j=0;j=14;j+=2)tuxing_y
20、e(&yuansu_codedituij,&yuansu_codedituij+1,j/2+136,(i-4)*8+128); /*用于檢測人或箱子能否移動 */void chuli(char dx, char dy)/dx,dy要么為0要么為1char x=ren_x+dx;char y=ren_y+dy; if(dituyx=0 | dituyx=3) /空地0 墻1 人2 目的地3 箱子4dituren_yren_x=0;dituyx=2;if(ditu_ju_codejushuren_x+ren_y*16 = 3) dituren_yren_x=3;ren_x=x;ren_y=y;if
21、(dituyx=4 & (dituy+dyx+dx=0 | dituy+dyx+dx=3) )dituren_yren_x=0; chexiao00=ren_x;/將此移動操作記錄到chexiaochexiao10=ren_y;chexiao01=dx;chexiao11=dy;if(ditu_ju_codejushuren_x+ren_y*16 = 3) dituren_yren_x=3;if(ditu_ju_codejushux+y*16 = 3) dituyx=3;dituyx=2;dituy+dyx+dx=4;ren_x=x;ren_y=y;to_lcd();/*測試完成*/bit j
22、iance() unsigned char i=0,j=0;for(i=0;i8;i+)/用來得到人的座標 for(j=0;j16;j+)if(dituij=3)return 0;if( ditu_ju_codejushuren_x+ren_y*16 =3) return 0;return 1;/*游戲完成*/void gaoding()shengyi=3906;/*按取消鍵時的處理函數(shù)*/void quxiao_func() /空地0 墻1 人2 目的地3 箱子4char dx,dy;if(chexiao00!=0)if( ditu_ju_codejushuren_x+ren_y*16=3
23、)/恢復(fù)人現(xiàn)在的這個地方的東西 dituren_yren_x=3;elsedituren_yren_x=0;ren_x= chexiao00;ren_y= chexiao10;ditu ren_y ren_x =2;dx= chexiao01;dy= chexiao11;ditu ren_y+dy ren_x+dx =4;if(ditu_ju_codejushuren_x+dx+dx+(dy+dy+ren_y)*16=3) dituren_y+dy+dyren_x+dx+dx=3;else dituren_y+dy+dyren_x+dx+dx=0; chexiao00=0; chexiao01
24、=0; chexiao10=0; chexiao11=0; /*游戲的正文*/unsigned char youxi()/按菜單鍵時返回0 游戲完成時返回 1unsigned char i=0,j=0; for(i=0;i8;i+)/加載地圖到內(nèi)存for(j=0;j16;j+)dituij=ditu_ju_codejushuj+i*16; to_lcd();for(i=0;i8;i+)/用來得到人的座標 for(j=0;j16;j+)if(dituij=2)ren_x=j;ren_y=i;while(1)i=scanf_hongwai();yanshi(2000);switch(i) case key_shang: chuli(0,-1); break; case key_xia: chuli(0,1); break; case key_zuo: chuli(-1,0); break; case key_you: chu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京郵電大學(xué)《程序設(shè)計語言B》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省上饒市2024年中考數(shù)學(xué)二模試題含答案
- 九江職業(yè)大學(xué)《商業(yè)推廣設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇航空職業(yè)技術(shù)學(xué)院《Premere視頻編輯應(yīng)用與實踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 黃淮學(xué)院《舞蹈編創(chuàng)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 【物理】第十二章 簡單機械 章末練習-2024-2025學(xué)年八年級下冊人教版物理
- 重慶商務(wù)職業(yè)學(xué)院《工程制圖與CAD》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶第二師范學(xué)院《藥物流行病學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江長征職業(yè)技術(shù)學(xué)院《普通生物學(xué)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江橫店影視職業(yè)學(xué)院《建筑工程計里與計價》2023-2024學(xué)年第一學(xué)期期末試卷
- 錄用通知書郵件
- 影響健康的主要因素課件
- 小學(xué)三年級數(shù)學(xué)軸對稱圖形練習題
- 【自考練習題】大連交通大學(xué)概率論與數(shù)理統(tǒng)計真題匯總(附答案解析)
- 布袋除塵器分部分項驗收記錄表完整
- 新編劍橋商務(wù)英語(初級)學(xué)生用書-答案
- 公路工程質(zhì)量鑒定辦法
- 水果購銷合同模板(精選5篇)
- 板框壓濾機方案具體方案模板
- 鉆探工程編錄方法課件
- 物理奧賽:力學(xué)物體的平衡31-優(yōu)質(zhì)課件
評論
0/150
提交評論