freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機(jī)的推箱子游戲設(shè)計(jì)方案(編輯修改稿)

2025-06-02 00:19 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ,0x00,0x00,0x00,0x00,0xFD,0xFE,0x18,0x7F,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8D,0xB6,0x18,0x31,0xB6,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x1C,0x31,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x30,0x3C,0x31,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x3C,0x3F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x30,0x36,0x36,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x30,0x3E,0x36,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x66,0x33,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x63,0x33,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x63,0x31,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x78,0xF7,0xF9,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 游戲流程游戲中,程序循環(huán)執(zhí)行按鍵掃描程序,并做出相應(yīng)判斷。整個(gè)程序中,最關(guān)鍵的部分是要根據(jù)玩家的輸入,控制小人、箱子的移動(dòng)。定義一個(gè)二維數(shù)組,用于保存當(dāng)前游戲狀態(tài)每個(gè)字符位的元素,當(dāng)玩家按鍵輸入時(shí),改變?cè)摂?shù)組中相應(yīng)得數(shù)據(jù),再將此二維數(shù)組每個(gè)數(shù)據(jù)代碼的元素顯示出來(lái),就可以出現(xiàn)小人,箱子移動(dòng)的效果。每關(guān)開(kāi)始,進(jìn)行游戲初始化。將關(guān)卡數(shù)據(jù)寫(xiě)入上述二維數(shù)組中,并記入小人的位置(man_x,man_y)。程序只要根據(jù)小人移動(dòng)方向周圍的元素信息,結(jié)合游戲規(guī)則,只要判斷能夠移動(dòng)箱子、小人的情況,才顯示出來(lái),而不用對(duì)不能移動(dòng)的情況進(jìn)行判定,這大大簡(jiǎn)化了程序的編寫(xiě)。游戲流程框圖如下(以向上移動(dòng)為例,其他方向類似):圖32 流程框圖1圖33 流程框圖2圖34 流程框圖3小人、箱子移動(dòng)示意圖(按列看,不同的列對(duì)應(yīng)上述流程的不同情況):圖35 移動(dòng)示意圖5. 8完成本關(guān)每進(jìn)行一次移動(dòng)后就進(jìn)行是否過(guò)關(guān)的判定。將記錄本關(guān)每個(gè)字符位狀態(tài)的數(shù)組與存儲(chǔ)本關(guān)原始信息的數(shù)組的對(duì)應(yīng)數(shù)據(jù)進(jìn)行比較,若發(fā)現(xiàn)目的地上沒(méi)有箱子,則不算過(guò)關(guān),程序退出,進(jìn)入等待按鍵輸入程序,若所有的目的地都有箱子,則游戲過(guò)關(guān),初始化下一關(guān)游戲,顯示下一關(guān)游戲界面。/************************************************函數(shù)名:level_suc()功能:判斷是否通過(guò)本關(guān)卡入口參數(shù):返回值:*************************************************/void level_suc(){ unsigned char i,j,k=1。 for(i = 0。 i 8。 i++) //行 { if(k==0) break。 for(j = 0。 j 8。 j++) //列 { if(level[levelg][i][j]==4||level[levelg][i][j]==5)//循環(huán)掃描目標(biāo)位置都有箱子在,此關(guān)卡就通過(guò) { if(level_temp[i][j]==5) k=1。 //此位置箱子在目標(biāo)位置上 else { k=0。 //有目標(biāo)位置沒(méi)有箱子 break。 } } } } if(k==1) //所有目標(biāo)位置都有箱子 { if(levelg8) levelg+=1。 else levelg=0。 //通關(guān)后重新從第一關(guān)開(kāi)始 Timtcount=0。 //計(jì)時(shí)清零 TH0=(6553650000)/256。 TL0=(6553650000)%256。 tcount=0。 gamebg(levelg)。 }} 選關(guān)按相應(yīng)的選關(guān)鍵,會(huì)改變記錄游戲關(guān)卡的變量levelg,對(duì)游戲重新初始化,即可記錄所選關(guān)卡。相關(guān)程序如下:case 5: if(levelg!=8) levelg++。 gamebg(levelg)。 //顯示第一關(guān) Timtcount=0。 TH0=(6553650000)/256。 TL0=(6553650000)%256。 tcount=0。 break。 //下一關(guān) case 6: if(levelg!=0) levelg。 gamebg(levelg)。 //顯示第一關(guān) Timtcount=0。 TH0=(6553650000)/256。 TL0=(6553650000)%256。 tcount=0。 break。 //上一關(guān) 計(jì)時(shí)利用右半瓶的88字節(jié)的空間,顯示當(dāng)前游戲計(jì)時(shí)和當(dāng)前關(guān)卡。界面設(shè)計(jì)如下:圖36 計(jì)時(shí)界面其中漢字站4個(gè)字符,數(shù)字占兩個(gè)字符。點(diǎn)陣碼也是用字模軟件提取的,顯示方式與游戲元素的顯示方式相同。顯示效果如圖所示:圖37 計(jì)時(shí)界面顯示效果使用定時(shí)器0的計(jì)時(shí)功能,每到1秒,觸發(fā)中斷程序,計(jì)時(shí)變量Timtcount就加1,在對(duì)其進(jìn)行數(shù)字分解,將各位在響應(yīng)的位置上顯示出來(lái)。void t0_tt() interrupt 1{ TH0=(6553650000)/256。 TL0=(6553650000)%256。 tcount++。 if(tcount==20) { tcount=0。 Timtcount++。 time_change(Timtcount)。 } }void time_change(unsigned int ttime){ unsigned char a1,a2,a3,a4,a5。 unsigned char i,j。 a1=ttime/10000。 a2=ttime/1000%10。 a3=ttime/100%10。 a4=ttime/10%10。 a5=ttime%10。 for(j=0。j16。j++) //a1 { for(i=0。i1。i++) { setc_xy(9+i,32+j)。 write_cmd2(shuzi[a1][j],inc_wr)。 } } for(j=0。j16。j++) //a2 { for(i=0。i1。i++) { setc_xy(10+i,32+j)。 write_cmd2(shuzi[a2][j],inc_wr)。 } } for(j=0。j16。j++) //a3 { for(i=0。i1。i++) { setc_xy(11+i,32+j)。 write_cmd2(shuzi[a3][j],inc_wr)。 // } } for(j=0。j16。j++) //a4 { for(i=0。i1。i++) { setc_xy(12+i,32+j)。 write_cmd2(shuzi[a4][j],inc_wr)。 // } } for(j=0。j16。j++) //a5 { for(i=0。i1。i++) { setc_xy(13+i,32+j)。 write_cmd2(shuzi[a5][j],inc_wr)。 } } }調(diào)試總結(jié) 下面列些了在進(jìn)行proteus仿真過(guò)程中出現(xiàn)幾個(gè)問(wèn)題,通過(guò)解決這些問(wèn)題是我提高了調(diào)試能力。 1. 忘記將C文件調(diào)添加進(jìn)工程中,導(dǎo)致定義的函數(shù)不能被調(diào)用;2. 由按鍵掃描,獲取按鍵編號(hào),再通過(guò)按鍵編號(hào)執(zhí)行相關(guān)操作。記錄按鍵編號(hào)的變量要及時(shí)復(fù)位,否則在沒(méi)有按鍵按下時(shí),程序出現(xiàn)誤操作;3. 圖形液晶顯示器的最大特性是要先定位,在寫(xiě)數(shù)據(jù),而且是按1字節(jié)寫(xiě)入的,所以行是按位尋址,列是按字節(jié)尋址,即行有64行,列有8列。顯示時(shí)常常沒(méi)有注意到這個(gè),導(dǎo)致定位不準(zhǔn)確,沒(méi)有出現(xiàn)應(yīng)有的圖形;4. 調(diào)試時(shí)常常出現(xiàn)MULTIPLE PUBLIC DEFINITIONS的錯(cuò)誤而能編譯。經(jīng)過(guò)多方查找,解決了這個(gè)問(wèn)題,感受到結(jié)構(gòu)化編程對(duì)大型程序的編寫(xiě)和調(diào)試帶來(lái)方便;對(duì)于比較小的程序,一般只有一個(gè)c文件和一個(gè)頭文件,全局變量我們通常會(huì)直接定義在c文件中。在程序之前加int i定義。如果要在頭文件中定義有以下兩種方法:用extern來(lái)聲明:extern int i。這一句只是對(duì)變量i進(jìn)行聲明,在c文件的程序之前必須加上int i進(jìn)行定義。extern int i=0。這一句聲明和定義都做了。對(duì)于大一點(diǎn)的程序,有很多c文件和頭文件,這個(gè)時(shí)候全局變量就必須在頭文件中聲明(不需要初始化),然后在一個(gè)c文件中定義(該初始化的要初始化)。如果在頭文件中定義,則編譯的時(shí)候會(huì)出現(xiàn)重復(fù)定義的錯(cuò)誤。如果只有頭文件中聲明就會(huì)出現(xiàn)沒(méi)有定義有警告。.c文件主要是具體定義函數(shù)、定義全局變量的。.h文件主要是申明外部函數(shù),變量的。7 設(shè)計(jì)心得體會(huì)參考文獻(xiàn)[1] 陳海宴. 51單片機(jī)原理及應(yīng)用基于Keil C與Proteus. 北京航空航天大學(xué)出版,20100701,第1版.[2] 彭偉. 單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例——基于8051+PROTEUS仿真. 電子工業(yè)出版社,20090601 .[3] 浦濱. C游戲編程從入門到精通. 北京希望電子出版社,200251 [4] 李宏 張家田,等. 液晶顯示器件應(yīng)用技術(shù) 機(jī)械工業(yè)出版社, 200471 [5] AT89c52數(shù)據(jù)手冊(cè)附錄9 程序代碼 includeinclude include includeincludevoid main() { unsigned char kupdate。 unsigned char startflag。 int51_timec()。 //初始化51 init_12864()。 //初始化12864 startflag=1。 playing=0。 start_ui()。 while(1) { while(startflag) //等待確定鍵按下 { kupdate=16。 if(P1!=0x0f) //若沒(méi)有這句,有可能在按鍵掃描后執(zhí)行while(P1!=0x0f),就得不到按鍵值,使按鍵失效 { kupdate=keys_scan()。 while(P1!=0x0f)。 } switch(kupdate) { case 4: startflag=0。 playing=1。 break
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1