版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、廣東工程職業(yè)技術(shù)學(xué)院畢業(yè)論文 基于c語言的推箱子游戲設(shè)計 design of the push box based on combined language 作者姓名: 陳德坤 莫植忠 學(xué)科專業(yè): 應(yīng)用電子技術(shù) 學(xué)院(系部): 機(jī)電工程系 指導(dǎo)教師: 余金棟 廣東工程職業(yè)技術(shù)學(xué)院2010年1月摘 要近年來隨著科技的飛速發(fā)展,c語言的應(yīng)用正在不斷深入。c語言目前是國際上比較流行的計算機(jī)高級編程語言之一,因其簡潔、使用方便且具備強(qiáng)大的功能而受到編程人員的普通青睞。它既適合作為系統(tǒng)描述語言,也可用來編寫系統(tǒng)軟件,還可以用來編寫應(yīng)用軟件和設(shè)計游戲等。本文著重分析用c語言實現(xiàn)一個簡單的推箱子游戲,旨在介
2、紹推箱子游戲的實現(xiàn)方法,并逐步介紹c語言圖形編程的方法和技巧。在c語言編寫軟件win-tc上,涉及軟中斷、二維數(shù)組、鍵盤操作及圖形化函數(shù)等方面,顯示器中斷寄存器的設(shè)置、二維數(shù)組及結(jié)構(gòu)體的定義、鍵盤上鍵值的獲取、圖形方式下光標(biāo)的顯示和定位,以及部分圖形函數(shù)的使用實現(xiàn)了一個完整的推箱子游戲界面,界面清晰可見。關(guān)鍵詞:c語言;win-tc;推箱子abstractwith the rapid development of science and technology in recent years, c language, applications are continuously in depth.
3、 c language is now more popular internationally high-level computer programming language, one of its simplicity, easy to use and with powerful features favored by ordinary programmers. it is suitable as a system description language, can also be used to write system software, application software ca
4、n also be used to write and design games.this article focuses on analysis using c language to implement a simple sokoban game aimed at introducing the sokoban game implementation method, and gradually introduced the c language graphical programming methods and techniques. in the c language software,
5、 win-tc, the related soft interrupt, two-dimensional array, keyboard operation and graphical functions, etc., the display interrupt register settings, two-dimensional array, and structure of the definition of access keys on the keyboard, graphical mode, the cursor display and positioning, as well as
6、 some graphics functions used to achieve a complete sokoban game interface, the interface clearly visible.key words: c language; win-tc; pushbox目錄摘要iabstractii第一章 緒論11.1設(shè)計的功能11.2游戲的編程思想11.2.1 確定軟件的功能11.2.2 定義軟件的核心數(shù)據(jù)結(jié)構(gòu)11.2.3 對整個軟件進(jìn)行功能模塊劃分1 1.2.4 整個推箱子游戲的功能介紹.2第二章 游戲的總體設(shè)計22.1功能模塊設(shè)計2 2.1.1 系統(tǒng)模塊圖.2 2.1.
7、2 任務(wù)執(zhí)行流程圖.3 2.1.3 小人移動流程圖.32.2數(shù)據(jù)結(jié)構(gòu)設(shè)計3 2.2.1 設(shè)置全局變量.3 2.2.2 定義結(jié)構(gòu)體.42.3函數(shù)功能描述4第三章 推箱子游戲的程序?qū)崿F(xiàn)73.1源碼分析73.1.1程序預(yù)處理73.1.2初始化模塊.83.1.3畫圖模塊123.1.4移動箱子模塊.14 3.1.5 移動小人模塊18 3.1.6 功能控制模塊25 3.1.7 主函數(shù)253.2運(yùn)行結(jié)果分析.28 3.2.1進(jìn)入游戲選關(guān)界面283.2.2游戲第一關(guān).283.2.3.游戲第二、三關(guān).293.2.4 游戲結(jié)束30第四章 總結(jié).32參考文獻(xiàn).33第一章 緒論1.1設(shè)計的功能c語言是我們數(shù)計系都要學(xué)
8、的一門基礎(chǔ)學(xué)科。那么,為什么不用c語言編一個游戲來玩呢?學(xué)習(xí)程序設(shè)計,并不是一件艱苦、枯燥的事情,它能象電腦游戲一樣充滿好奇、富有樂趣,c語言對于電腦程序設(shè)計來說是一種非常重要的語言。設(shè)計者只要完成對推箱子游戲的功能描述,就可以利用計算機(jī)和工具,進(jìn)行設(shè)計處理,最終得到理想的設(shè)計結(jié)果。本設(shè)計是基于c語言編程技術(shù),用數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,集科學(xué)性,先進(jìn)性,創(chuàng)新性,實用性于一體,并在電腦屏幕上實現(xiàn)游戲界面的功能,包括選擇游戲關(guān)卡和游戲挑戰(zhàn)失敗可按空格鍵重新開始。1.2游戲的變成思想1.2.1 確定軟件的功能讓玩家通過按上下左右鍵推箱子,當(dāng)箱子們都推到了目的地后出現(xiàn)過關(guān)信息,并顯示下一關(guān)。推錯了玩家還按空格
9、鍵從新玩過這關(guān)。直到過完全部關(guān)卡。1.2.2 定義軟件的核心數(shù)據(jù)結(jié)構(gòu)我們定義一個二維數(shù)組ghouse來記錄屏幕上各點的狀態(tài)。char ghouse2020; 其中:0表示什么都沒有,b表示箱子,w表示墻壁,m表示目的地,i表示箱子在目的地。1.2.3 對整個軟件進(jìn)行功能模塊的劃分1.初始化:在屏幕上輸出歡迎信息,把ghouse數(shù)組的元素初始化為0。并根據(jù)各關(guān)的要求在屏幕上輸出墻、箱子、目的地和人。并用ghouse 數(shù)組記錄各點的狀態(tài)。2.進(jìn)入游戲循環(huán):這個游戲主循環(huán)是等待按鍵。當(dāng)接受到上下左右鍵時執(zhí)行相關(guān)操作:接受esc鍵時退出游戲;接受空格鍵時返回本關(guān)開頭;接受無效按鍵時做忽略處理。重點介紹
10、按上下左右鍵時如何執(zhí)行相關(guān)操作。3.判斷是否過關(guān):用一個鏈表win由每關(guān)的初始化函數(shù)傳給main函數(shù)。win鏈表主要記錄屏幕上的哪些點是目的地,并記錄目的地的位置。main函數(shù)每執(zhí)行一次操作后就判斷屏幕上的目的地是不是都有箱子了。1.2.4 整個推箱子游戲功能介紹本游戲一共4關(guān),由易到難,每一關(guān)都有初化、按鍵處理、重置及退出功能。(1)初始化包括屏幕初始化和每一關(guān)卡的初始化,屏幕被初始化寬80像素,高25像素。(2)按鍵處理包括移動小人和移動箱子,通過移動上下左右鍵來控制小人的移動,從而推 動箱子,以把箱子推到指定的目的地為過關(guān)。(3)每一關(guān)都可以重置,按空格鍵可以重置當(dāng)前關(guān)。(4)按esc鍵
11、可以在任何時候退出游戲。第二章 游戲的整體設(shè)計2.1功能模塊設(shè)計2.1.1 系統(tǒng)模塊圖本程序包括5個模塊,分別是初始化模塊、畫圖模塊、移動箱子模塊、移動小人模塊和功能控制模塊,如圖(一)所示。各個模塊的功能描述如下:(1)初始化模塊。 該模塊包括屏幕初始化和游戲第一關(guān)的初始化。屏幕初始化用于輸出歡迎信息和操作提示,游戲每一關(guān)的初始化是構(gòu)建每一關(guān)的關(guān)卡。(2)畫圖模塊。該模塊主要是被其它模塊調(diào)用,用于畫墻、在空地畫箱子、在目的地畫箱子、畫小人和畫目的地。(3)移動箱子模塊。該模塊用于移動箱子,包括目的地之間、空地之間和目的地與空地之間的箱子移動。(4)移動小人模塊。該模塊用于控制小人移動,從而推
12、動箱子到目的地。(5)功能控制模塊。該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關(guān)卡重置功能。推箱子游戲初始化模塊畫圖模塊移動箱子模塊移動小人模塊功能控制模塊2.1.2 任務(wù)執(zhí)行流程圖游戲從第一關(guān)開始,按上下左右方向鍵控制小人移動來推動箱子,可以在游戲中的任何時候按esc鍵退出。如果游戲無成功希望,可以按空格鍵回到當(dāng)前任務(wù)的開始狀態(tài);如果成功完成當(dāng)前關(guān),則進(jìn)入下一關(guān),如果當(dāng)前關(guān)是最后一關(guān),則顯示通關(guān)信息,提示游戲結(jié)束。2.1.3小人移動流程圖小人移動的方向有4個,move()函數(shù)(處理小人移動的函數(shù))對這4個方向移動的處理都一致,只是調(diào)用函數(shù)時的參數(shù)有所不同。首先判斷小
13、人移動的方向,然后根據(jù)小人所處世的當(dāng)前狀態(tài)、下一步狀態(tài)或者下下一步狀態(tài)進(jìn)行適當(dāng)?shù)奶幚怼?.2數(shù)據(jù)結(jié)構(gòu)設(shè)計2.2.1設(shè)置全局變量定義二維數(shù)組char status2020,用于記錄屏幕一各點的狀態(tài)。其中,“0”表示什么都沒有,“b”表示箱子,“w”表示目的地,“i”表示箱子在目的地。首先將屏幕20*20范圍內(nèi)的狀態(tài)初始化為0,然后根據(jù)具體情況,在畫箱子時,將箱子所在點的狀態(tài)改為“b”;在畫墻壁時,將墻壁所在點的狀態(tài)改為“w”;在畫目的地時,將目的地所在點的狀態(tài)改為“m”;當(dāng)箱子被推到目的地時,箱子所在點的狀態(tài)改為“i”,如果每一關(guān)中所有目的地的狀態(tài)都為“i”,則說明該關(guān)已完成。定義全局變量,ch
14、ar far *printscreen=(char far*)0xb8000000,用于在屏幕上輸出字符。彩色顯示器的字符緩沖區(qū)首地址為0xb8000000,每一個字符占2個字節(jié)(第一個字節(jié)為ascii值,第二個字節(jié)為顏色值),字符模式下屏幕寬80像素,高25像素,一屏可以寫80*25個字符。2.2.2定義結(jié)構(gòu)體typedef struct winerint x;int y;struct winer *p;winer;定義結(jié)構(gòu)體struct winer用于判斷每一關(guān)是否已完成。其中x用于存放目的地的橫坐標(biāo),y用于存放目的地的縱坐標(biāo)。如果所有表示目的地坐標(biāo)對應(yīng)的狀態(tài)都為“i”,即箱子在目的地,則
15、表示已經(jīng)過關(guān),可以進(jìn)入下一關(guān)。該結(jié)構(gòu)體的初始化在每一關(guān)的初始化時進(jìn)行。2.3函數(shù)功能描述1、 putoutchar()函數(shù)原型:void putoutchar(int y,int x,char ch,char fc,char bc),putoutchar()函數(shù)在屏幕上的指定位置輸出指定的字符。其中,x、y指明輸出的位置,ch表示輸出的字符,fc表示輸出的字符顏色,bc 表示背景色。2、 printwall()函數(shù)原型:void printwall(int x,int y)printwall()函數(shù)用于畫墻壁,傳入?yún)?shù)x、y指明位置。該函數(shù)調(diào)用putoutchar()進(jìn)行輸出,以黑色為背景畫綠
16、色墻,用小方塊表示墻(ascii值為219)。3、 printbox()函數(shù)原型:void printbox(int x,int y)printbox()函數(shù)用于在非目的地畫箱子,傳入?yún)?shù)x、y指明位置。該函數(shù)調(diào)用putoutchar()進(jìn)行輸出,以黑色為背景白色箱子,用ascii值為10的字符表示箱子。4、 printboxdes()函數(shù)原型:void printboxdes(int x,int y)printboxdes()函數(shù)用于在目的地畫箱子,傳入?yún)?shù)x、y指明位置。該函數(shù)調(diào)用putoutchar()進(jìn)行輸出,以黑色為背景畫黃色箱子,仍用ascii值為10的字符表示箱子。5、 prin
17、tdestination()函數(shù)原型:void printdestination(int x,int y)printdestination()函數(shù)用于畫目的地,傳入?yún)?shù)x、y指明位置。該函數(shù)調(diào)用putoutchar()進(jìn)行輸出,以黑色為背景畫黃色目的地,用心型表示(ascii值為003)。6、 printdestination1()函數(shù)原型: void printdestination1(int x,int y,winer *win,winer *pw),printdestination1()函數(shù)與printdestination()函數(shù)功能基本相同,都是畫目的地函數(shù),但是printdesti
18、nation1()增加了記錄每一個目的地位置的功能。其中x、y指明目的地的位置,每一關(guān)的所有目的地位置存放在結(jié)構(gòu)體struct winer中,形成一條鏈表,*winer返回鏈表的頭,*pw則指向鏈表的尾部。7、 printman()函數(shù)原型: void printman(int x,int y),printman()函數(shù)用于畫小人。x、y指明畫的位置。該函數(shù)通過軟中斷來實現(xiàn),首先設(shè)置寄存器ax的高位和低位,設(shè)置高位0xa表示在光標(biāo)位置顯示字符;設(shè)置低位02(ascii值),表示輸出的字符;然后設(shè)置寄存器cx為01,表示重復(fù)輸出的次數(shù),這里只輸出一次;最后產(chǎn)生類型為0x10的中斷,表示顯示器輸出
19、。8、 init()函數(shù)原型: void init(),init()函數(shù)用于初始化屏幕。該函數(shù)首先用兩個for循環(huán)初始化屏幕20*20范圍內(nèi)的狀態(tài),初始化為0,以后根據(jù)實際情況重新賦值;然后設(shè)置屏幕輸出狀態(tài),設(shè)置寄存器ax的高位為0,低位為3,表示以80*25的彩色方式顯示;最后移動光標(biāo)到指定的位置輸出操作提示信息以及版權(quán)信息。9、 初始化游戲函數(shù)原型:winer *initstep1()、winer *initstep2()、winer *initstep3()、winer *initstep4(),這幾個函數(shù)分別初始化游戲的第一關(guān)到第四關(guān)。這些函數(shù)的功能和實現(xiàn)步驟相似。首先根據(jù)需要在指定的
20、位置畫墻壁和畫箱子,在這里可以設(shè)置游戲的難度,初始化的墻壁越復(fù)雜,箱子越多,則游戲就越難。游戲的第一關(guān)至第四關(guān)難度依次增加。然后分別調(diào)用printdestination1()和printman()函數(shù)畫目的地和小人。函數(shù)返回包含各個目的地位置的鏈表。10、 移動箱子函數(shù)原型: void moveboxspacetospace(int x,int y,char a)、void moveboxdestospace(int x,int y, char a)、void moveboxspacetodes(int x,int y,char a)、void moveboxdestodes(int x,in
21、t y,char a),這幾個函數(shù)實現(xiàn)的功能分別是人空地移動箱子到空地、從目的地移動箱子到空地、從空地移動箱子到目的地和中從目的地移動箱子到目的地。x、y指明小人當(dāng)前所處的位置,字符a表示移動的方向,有“u”、“d”、“l(fā)”和“r”4個值,分別表示向上、下、左、右移動。這幾個函數(shù)的實現(xiàn)原理大致相似。對于前面兩個函數(shù),首先判斷移動的方向,人小人所在的位置沿著移動的方向移動一步畫小人,移動兩步畫箱子(調(diào)用printbox()函數(shù)),并設(shè)置狀態(tài)為“b”;對于后面兩個參數(shù),首先判斷移動的方向,從小人所在的位置沿著移動方向移動一步畫小人,移動兩上在目的地畫箱子(調(diào)用printboxdes()函數(shù)),并設(shè)
22、置狀態(tài)為“i”,表明箱子在目的地上。11、 judge()函數(shù)原型: int judge(int x,int y),judge()根據(jù)結(jié)構(gòu)體structxy中存的值來判斷該點的狀態(tài)。12、 move()函數(shù)原型: void moid(int x,int y,char a),move()函數(shù)根據(jù)按下的鍵來處理小人的移動。小人移動的方向有上(“u”)、下(“d”)、左(“l(fā)”)、右(“r”)4個,4個方向的處理方式一樣。首先判斷移動的方向,然后根據(jù)小人的當(dāng)前位置、下一步位置以及下下一步位置所在的狀態(tài)進(jìn)行處理。(1) 若下一步所在位置的狀態(tài)為墻壁(“w”),則直接退出,不作任何處理。(2) 若下一步
23、所在位置的狀態(tài)為目的地(“i”)或者什么都沒有(“0”),則: 若當(dāng)前位置的狀態(tài)為目的地,則在當(dāng)前位置畫目的地(調(diào)用printdestination()函數(shù))、在下一步位置畫小人(調(diào)用printman()函數(shù))。 若當(dāng)前位置的狀態(tài)為非目的地,則輸出空格清空當(dāng)前位置的小人,并在下一步位置畫小人(調(diào)用printman()函數(shù))。(3) 若下一步所在位置的狀態(tài)為箱子(“b”),則: 如果下下一步位置的狀態(tài)為“0”,則把箱子從空地移動到空地(調(diào)用moveboxspacetospace()函數(shù)),然后把光標(biāo)移動到下一步位置(如果當(dāng)前位置的狀態(tài)為目的地,則應(yīng)先畫目的地(調(diào)用printdestinanion
24、()函數(shù))。 如果下下一步位置的狀態(tài)為目的地,則把箱子從空地移動到目的地(調(diào)用moveboxspacetodes()函數(shù)),然后把光標(biāo)移動到下一步位置(如果當(dāng)前位置的狀態(tài) 為目的地,則應(yīng)先畫目的地(調(diào)用printdestination()函數(shù))。 其它情況則直接返回,不作任何處理。(4) 若下一步所在位置的狀態(tài)為箱子在目的地(“i”),則: 如果下下一步位置的狀態(tài)為“0”,則把箱子從目的地移動到空地(調(diào)用moveboxdestospace()函數(shù)),然后把光標(biāo)移動到下一步位置(如果當(dāng)前位置的狀態(tài)為目的地,則應(yīng)先畫目的地(調(diào)用printdestination()函數(shù))。 如果下下一步位置的狀態(tài)為
25、目的地,則把箱子從目的地移動到目的地(調(diào)用moveboxdestodes()函數(shù)),然后把光標(biāo)移動到下一步位置(如果當(dāng)前位置的狀態(tài)為目的地,則應(yīng)先畫目的地(調(diào)用printdestination()函數(shù))。 其它情況則直接返回,不作任何處理。13、 reset()函數(shù)原型:void reset(int i)reset()函數(shù)的功能是重置當(dāng)前關(guān)。該函數(shù)首先判斷當(dāng)前關(guān)是第幾關(guān),然后調(diào)用init()函數(shù)和初始化當(dāng)前關(guān)的函數(shù)進(jìn)行重置。14、 主函數(shù)主函數(shù)首先設(shè)置寄存器ax的高位和低位,顯示器軟中斷,進(jìn)行顯示狀態(tài)的設(shè)置,初始化屏幕,初始化第一關(guān),并顯示操作提示信息和版權(quán)信息。然后根據(jù)按下的鍵(bioske
26、y(0)函數(shù)返回按下的鍵值)進(jìn)行處理,處理過程由move()函數(shù)進(jìn)行(如果按下esc鍵,則退出程序)。對于每一關(guān),如果所有的表示目的地的狀態(tài)都由“m”變成了“i”,則表示通過該關(guān),可以進(jìn)入下一關(guān)。第三章 推箱子游戲的程序?qū)崿F(xiàn)3.1源碼分析3.1.1程序預(yù)處理程序預(yù)處理部分包括加載頭文件、定義全局變量和定義數(shù)據(jù)結(jié)構(gòu),并對它們進(jìn)行初始化工作。其中加載頭文件的代碼如下:/*加載頭文件*/#include #include #include #include #include #include /*定義結(jié)構(gòu)體,判斷是否勝利*/typedef struct winer /*目的地的xy坐標(biāo)*/ int
27、x,y; struct winer *p; winer;/*定義全局變量*/*記錄屏幕上各點的狀態(tài)*/char status 2020;/*彩色顯示器的字符緩沖區(qū)首地址為0xb8000000*/char far *printscreen=(char far* )0xb8000000; /*自定義函數(shù)原型*/void putoutchar(int y,int x,char ch,char fc,char bc);void printwall(int x, int y);void printbox(int x, int y);void printboxdes(int x, int y);void
28、printdestination(int x, int y);void printdestination1(int x,int y,winer *win,winer *pw);void printman(int x, int y);void init();winer *initstep1();winer *initstep2();winer *initstep3();winer *initstep4();void moveboxspacetospace(int x ,int y, char a);void moveboxdestospace(int x ,int y, char a) ;voi
29、d moveboxspacetodes(int x, int y, char a);void moveboxdestodes(int x, int y, char a);int judge(int x, int y);void move(int x, int y, char a);void reset(int i);3.1.2初始化模塊該模塊主要用于對屏幕和關(guān)卡的初始化,初始化關(guān)卡時是調(diào)用畫圖模塊中畫圖函數(shù)。該模塊包括以下幾個函數(shù)。(1) void init(),初始化屏幕的大小、顯示方式、顯示操作提示信息和版權(quán)信息。(2) winer *initstep1(),初始化游戲的第一關(guān)。(3) w
30、iner *initstep2(),初始化游戲的第二關(guān)。(4) winer *initstep3(),初始化游戲的第三關(guān)。(5) winer *initstep4(),初始化游戲的第四關(guān)。其中初始化屏幕函數(shù)的詳細(xì)代碼如下:/*初始化屏幕函數(shù)*/void init() int i,j; for(i=0;i20;i+) for(j=0;j20;j+) /*屏幕20*20范圍內(nèi)狀態(tài)初始化為0,表示什么都沒有*/ statusij=0; /*設(shè)置寄存器ax地位,80*25彩色方式顯示*/ _al=3; /*設(shè)計寄存器ax高位*/ _ah=0; geninterrupt(0x10); /*移動光標(biāo)到指定
31、位置輸出屏幕信息*/ gotoxy(40,4); printf(welcome to the box world!); gotoxy(40,6); printf(you can use up, down, left,); gotoxy(40,8); printf(right key to control it, or); gotoxy(40,10); printf(you can press esc to quit it.); gotoxy(40,12); printf(press space to reset the game.); gotoxy(40,14); printf(wish yo
32、u have a good time !); gotoxy(40,16); printf(dec , 2009); /*初始化游戲第一關(guān)函數(shù)*/winer *initstep1() int x; int y; winer *win=null; winer *pw; /*在指定位置畫墻,構(gòu)建第一關(guān)*/ for(x=1,y=5;y=9;y+) printwall(x+4,y+10); for(y=5,x=2;x=5;x+) printwall(x+4,y+10); for(y=9,x=2;x=5;x+) printwall(x+4,y+10); for(y=1,x=3;x=8;x+) printw
33、all(x+4,y+10); for(x=3,y=3;x=5;x+) printwall(x+4,y+10); for(x=5,y=8;x=9;x+) printwall(x+4,y+10); for(x=7,y=4;x=9;x+) printwall(x+4,y+10); for(x=9,y=5;y=7;y+) printwall(x+4,y+10); for(x=8,y=2;y=3;y+) printwall(x+4,y+10); printwall(5+4,4+10); printwall(5+4,7+10); printwall(3+4,2+10); /*在指定位置畫箱子*/ prin
34、tbox(3+4,6+10); printbox(3+4,7+10); printbox(4+4,7+10); /*在指定位置畫目的地*/ printdestination1(4+4,2+10,&win,&pw); printdestination1(5+4,2+10,&win,&pw); printdestination1(6+4,2+10,&win,&pw); /*在指定位置畫小人*/ printman(2+4,8+10); return win; /*初始化游戲第二關(guān)函數(shù)*/winer *initstep2() int x; int y; winer *win=null; winer *
35、pw; /*在指定位置畫墻,構(gòu)建第二關(guān)*/ for(x=1,y=4;y=7;y+) printwall(x+4,y+10); for(x=2,y=2;y=4;y+) printwall(x+4,y+10); for(x=2,y=7;x=4;x+) printwall(x+4,y+10); for(x=4,y=1;x=8;x+) printwall(x+4,y+10); for(x=8,y=2;y=8;y+) printwall(x+4,y+10); for(x=4,y=8;x=8;x+) printwall(x+4,y+10); for(x=4,y=6;x=5;x+) printwall(x+
36、4,y+10); for(x=3,y=2;x=4;x+) printwall(x+4,y+10); for(x=4,y=4;x=5;x+) printwall(x+4,y+10); printwall(6+4,3+10); /*在指定位置畫箱子*/ printbox(3+4,5+10); printbox(6+4,6+10); printbox(7+4,3+10); /*在指定位置畫目的地*/ printdestination1(5+4,7+10,&win,&pw); printdestination1(6+4,7+10,&win,&pw); printdestination1(7+4,7+1
37、0,&win,&pw); /*在指定位置畫小人*/ printman(2+4,6+10); return win; /*初始化游戲第三關(guān)函數(shù)*/winer *initstep3() int x; int y; winer *win=null; winer *pw; /*在指定位置畫墻,構(gòu)建第三關(guān)*/ for(x=1,y=2;y=8;y+) printwall(x+4,y+10); for(x=2,y=2;x=4;x+) printwall(x+4,y+10); for(x=4,y=1;y=3;y+) printwall(x+4,y+10); for(x=5,y=1;x=8;x+) printw
38、all(x+4,y+10); for(x=8,y=2;y=5;y+) printwall(x+4,y+10); for(x=5,y=5;x=7;x+) printwall(x+4,y+10); for(x=7,y=6;y=9;y+) printwall(x+4,y+10); for(x=3,y=9;x=6;x+) printwall(x+4,y+10); for(x=3,y=6;y=8;y+) printwall(x+4,y+10); printwall(2+4,8+10); printwall(5+4,7+10); /*在指定位置畫箱子*/ printbox(6+4,3+10); print
39、box(4+4,4+10); printbox(5+4,6+10); /*在指定位置畫目的地*/ printdestination1(2+4,5+10,&win,&pw); printdestination1(2+4,6+10,&win,&pw); printdestination1(2+4,7+10,&win,&pw); /*在指定位置畫小人*/ printman(2+4,4+10); return win; /*在指定位置畫墻,構(gòu)建第四關(guān)*/winer *initstep4() int x; int y; winer *win=null; winer *pw; for(x=1,y=1;y=
40、6;y+) printwall(x+4,y+10); for(x=2,y=7;y=8;y+) printwall(x+4,y+10); for(x=2,y=1;x=7;x+) printwall(x+4,y+10); for(x=7,y=2;y=4;y+) printwall(x+4,y+10); for(x=6,y=4;y=9;y+) printwall(x+4,y+10); for(x=3,y=9;x=5;x+) printwall(x+4,y+10); for(x=3,y=3;yx=x; (*pw)-y=y; (*pw)-p=null; /*如果當(dāng)前點不是目的地的第一個點*/ else
41、qw=(winer* )malloc(sizeof(winer); qw-x=x; qw-y=y; /*(*pw)的下一個節(jié)點為qw*/ (*pw)-p=qw; /*(*qw)指向qw所指向的節(jié)點*/ (*pw)=qw; qw-p=null; /*畫目的地函數(shù)*/void printdestination(int x,int y) /*以黑色為背景畫黃色目的地,用心型表示*/ putoutchar(y-1,x-1,003,yellow,black); /*記錄狀態(tài)為目的地*/ statusxy=m; /*畫小人函數(shù)*/void printman(int x,int y) gotoxy(y,x)
42、; /*設(shè)置寄存器ax的地位,輸出的字符*/ _al=02; /*設(shè)置寄存器cx,字符重復(fù)次數(shù)為1*/ _cx=01; /*設(shè)置寄存器ax的高位,在光標(biāo)位置顯示字符*/ _ah=0xa; /*產(chǎn)生軟終端,顯示器輸出,畫出小人*/ geninterrupt(0x10); 3.1.4移動箱子模塊該模塊是實現(xiàn)箱子的移動。根據(jù)游戲規(guī)則,箱子可以在空地之間、目的地之間、空地和目的地之間來回移動,因此,實現(xiàn)本模塊共有以下4個函數(shù)。(1) void moveboxspacetospace(int x,int y,char a),把箱子從空地移動到空地。(2) void moveboxdestospace(i
43、nt x,int y,char a),把箱子從目的地移動到空地。(3) void moveboxspacetodes(int x,int y,char a),把箱子從空地移動到目的地。(4) void moveboxdestodes(int x,int y,char a),把箱子從目的地移動到目的地。其中從空地移動箱子到空地函數(shù)的詳細(xì)代碼如下:*從空地移動箱子到空地函數(shù)*/void moveboxspacetospace(int x,int y,char a) switch(a) /*如果按向上鍵*/ case u: /*重設(shè)(x-1),y)位置狀態(tài)為0*/ statusx-1y=0; /*清
44、空(x,y)處原有的小人*/ printf( ); /*在(x-2,y)出重新畫箱子*/ printbox(x-2,y); /*在(x-1,y)處重新畫小人*/ printman(x-1,y); /*重設(shè)(x-2),y)位置的狀態(tài)為箱子*/ statusx-2y=b; break; /*如果按向下鍵*/ case d: statusx+1y=0; printf( ); printbox(x+2,y); printman(x+1,y); statusx+2y=b; break; /*如果按向左鍵*/ case l: statusxy-1=0; printf( ); printbox(x,y-2); printman(x,y-1); statusxy-2=b; break; /*如果按向右鍵*/ case r: statusxy+1=0; printf( ); printbox(x,y+2); printman(x,y+1); statusxy+2=b; break; default: break; /*從目的地移動箱子到空地函數(shù)*/void moveboxdestospace(int x,int y,char a) switch(a) /*如果按向上鍵*/ cas
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高科技研發(fā)中心監(jiān)事聘用合同模板3篇
- 2025年度兼職教師教育資源共享與開發(fā)合同3篇
- 二零二五年度臺球室租賃與青少年培訓(xùn)課程合同3篇
- 2025年度文化創(chuàng)意產(chǎn)業(yè)項目投資公司正規(guī)合同3篇
- 二零二五年度自駕游租車服務(wù)及景點門票合同3篇
- 二零二五年度文化旅游企業(yè)股東股權(quán)轉(zhuǎn)讓合同范例3篇
- 2025年度金融科技公司股權(quán)合資合同樣本3篇
- 2025年度產(chǎn)業(yè)升級改造拆遷房產(chǎn)分割與稅收優(yōu)惠政策合同3篇
- 二零二五年度建筑材料供貨與建筑防水保溫合同3篇
- 二零二五年度農(nóng)產(chǎn)品電商平臺入駐服務(wù)合同版2篇
- 華東師范大學(xué)《法學(xué)導(dǎo)論I》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024年度無人機(jī)部件委托生產(chǎn)加工合同
- 中華人民共和國建筑法
- 心里疏導(dǎo)課件教學(xué)課件
- 統(tǒng)編版2024-2025學(xué)年語文五年級上冊日積月累專項訓(xùn)練練習(xí)題
- 基于機(jī)器學(xué)習(xí)的供應(yīng)鏈風(fēng)險預(yù)測
- 2024-2025年職業(yè)技能:全國高速公路收費(fèi)員從業(yè)資格知識考試題庫與答案
- 阜陽師范大學(xué)《法學(xué)概論》2023-2024學(xué)年期末試卷
- 新版中國食物成分表
- 2024河南鄭州市金水區(qū)事業(yè)單位招聘45人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 湘教版八年級音樂下冊教案全冊
評論
0/150
提交評論