C語言編程實現(xiàn)貪食蛇游戲_第1頁
C語言編程實現(xiàn)貪食蛇游戲_第2頁
C語言編程實現(xiàn)貪食蛇游戲_第3頁
C語言編程實現(xiàn)貪食蛇游戲_第4頁
C語言編程實現(xiàn)貪食蛇游戲_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 淮南師范學院電氣信息工程學院2013屆通信工程專業(yè)課程設計報告 成績課程設計報告題 目: c語言編程實現(xiàn)貪食蛇游戲 學生姓名: 趙偉 學生學號: 0908040246 系 別: 電氣信息工程學院 專 業(yè): 通信工程 屆 別: 2013屆 指導教師: 王麗 電氣信息工程學院制2012年5月c語言編程實現(xiàn)貪食蛇游戲?qū)W生:趙偉指導教師:王麗電氣信息工程學院1 課程設計的任務與要求1.1 課程設計的任務通過對c語言編寫程序?qū)崿F(xiàn)貪食蛇游戲系統(tǒng)。掌握結(jié)構(gòu)化,模塊化程序設計的思想,培養(yǎng)c語言編程編寫實戰(zhàn)能力。1.2 課程設計的要求先在程序中設計好數(shù)組元素與蛇,食物的對應關(guān)系;產(chǎn)生一個固定大小有邊界的游戲區(qū)

2、域,蛇從區(qū)域中隨機一點出發(fā),運動限制在游戲區(qū)域內(nèi);蛇的運動方向為直線運動,只走橫和豎的方向,不走斜線;食物出現(xiàn)按隨即分布原則,蛇吃掉一份后隨即在游戲區(qū)域內(nèi)出現(xiàn)一份新的食物;蛇的運動速度由得分來控制,得分越高,速度越快;得分按蛇每吃掉一個食物得10分計算;蛇的身體長度從3開始,每吃掉一個事物增加一個長度;游戲結(jié)束條件為:在控制過程中蛇頭撞到墻壁或者與蛇身相撞。1.3 課程設計的研究基礎課程設計基礎為c語言程序的設計與編寫。c語言是在國內(nèi)外廣泛使用的一種計算機語言,它具有高級語言的特點,有具有匯編語言的特點。c語言功能豐富、表達力強、使用靈活方便、應用面廣、目標程序高、可移植性好,既具有高級語言的

3、優(yōu)點,有具有低級語言的許多特點,因此特別適合于編寫系統(tǒng)軟件,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統(tǒng)開發(fā),著名的unix操作系統(tǒng)就是用c語言編寫的1。語言是由玫瑰貝爾研究所的d.mritchie于1972年推出,1978年后,c語言已經(jīng)先后被移植到大、中、小及微型機上,它可以作為工作系統(tǒng)設計語言,編寫系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序2。我們利用電腦或者游戲機玩的游戲都可以利用c語言來進行編寫,大部分也都是用c進行編寫的,其中2d的貪食蛇游戲是利用編寫的經(jīng)典案例3。2 貪食蛇系統(tǒng)方案制定2.1 方案的提出方案一:利用c語言編程實現(xiàn)貪食蛇游戲流

4、程圖如下圖1 c語言編寫貪食蛇流程圖方案二:利用java語言編程實現(xiàn)貪食蛇游戲45流程圖如下 . 圖2 利用java編寫貪食蛇流程圖2.2 方案比較通過流程圖可以看出,方案一與方案二的區(qū)別在于游戲可否中途退出和暫停,這一模塊牽扯到很多的內(nèi)容。2.3 方案的論證利用java設計比較復雜,它涉及面廣,牽涉方面多,如果不好好考慮和設計,將難以成功開發(fā)出這個游戲。在這個游戲的設計中,牽涉到圖形界面的顯示與更新,數(shù)據(jù)的收集與更新。而且在這個游戲的開發(fā)中,還要應用到類的繼承機制以及一些設計模式。在設計開發(fā)過程中,需要處理好各個類之間的繼承關(guān)系。還要處理各個類相應的封裝,并且還要協(xié)調(diào)好各個模塊之間的邏輯依賴

5、關(guān)系和數(shù)據(jù)通信關(guān)系6。而利用c語言則比較方便,并且我們對c語言的熟悉度比較高,所以,我們選擇了利用c來開發(fā)這個游戲。2.4 方案的選擇通過比較,得出利用java實習目標較復雜。且相比較而言。我們更熟悉c編程,從而選擇方案一,利用c語言來實現(xiàn)設計的目標。3 系統(tǒng)方案設計3.1各單元模塊的劃分與功能介紹本程序采用結(jié)構(gòu)化程序設計的方法,按照自頂向下,逐步細化的方法對要解決的問題進行逐層分解。首先畫出頂層模塊,即主控模塊,之完成對下層模塊的調(diào)用功能,即調(diào)用其他的功能模塊;接著,按需求分析中的功能需求設計第一層模塊,有圖形驅(qū)動,畫主界面,游戲過程,結(jié)束處理,退出等第6個主要功能;接著,畫出第二層模塊78

6、??傮w模塊結(jié)構(gòu)如圖圖3 總體模塊結(jié)構(gòu)圖 3.2總體數(shù)據(jù)結(jié)構(gòu)設計 設計思路:測序的關(guān)鍵在于表示蛇的圖形及蛇的移動。用一個小局限性方塊表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭業(yè)用同樣的一節(jié)小矩形方塊表示移動時必須從蛇可以上向前爬行,檔案下有效方向鍵后,應先確定蛇頭的位置,而后蛇的身體雖蛇頭移動,圖形的實現(xiàn)是從身體新位置開始畫出蛇。這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一節(jié)蛇身,即看起來蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失意識畫矩形塊和覆蓋矩形塊。為了便于理解,定義兩個結(jié)構(gòu)體:食物與蛇。下面介紹貪吃蛇游戲程序的主要數(shù)據(jù)結(jié)構(gòu)。3.3 主要函數(shù)的介紹

7、主控模塊main函數(shù)主函數(shù)是程序的主控模塊。首先初始化圖形系統(tǒng),然后使用draw函數(shù)播放動畫,接著調(diào)用init函數(shù)9初始化圖形系統(tǒng),之后調(diào)用drawk函數(shù)9畫出游戲開始畫面,在調(diào)用gameplay函數(shù)9,即開始了游戲的具體過程,游戲結(jié)束后調(diào)用endplay函數(shù)9進行游戲結(jié)束處理;最后關(guān)閉圖形系統(tǒng),結(jié)束程序。主控模塊的流程圖如下圖所示。其中帶有兩個豎線的矩形框表示對自定義函數(shù)的調(diào)用。 圖4 main函數(shù)模塊 繪制游戲開始界面drawk函數(shù)主界面就是一個封閉的圍墻,用兩個循環(huán)語句分別在水平方向和垂直方向輸出連續(xù)的矩形小方塊,圍成封閉圖形表示圍墻,在界面的左上部輸出游戲程序的版本信息,在右上部輸出游

8、戲成績(score)的表頭。3.4 系統(tǒng)整體程序設計貪食蛇游戲具體實現(xiàn)過程gameplay函數(shù),該函數(shù)是游戲的核心部分。游戲具體過程gameplay函數(shù)的大致算法流程圖如下圖所示。 圖5 gameplay函數(shù)流程圖 初始化 為防止食物總是出現(xiàn)在一個位置上,要設置隨機數(shù)發(fā)生器的種子數(shù),產(chǎn)生真正的隨機數(shù)。由于還沒有畫出食物,并設置需要食物,并設置蛇活著。初始時,蛇只有蛇頭和1節(jié)蛇尾,設置這2節(jié)坐標。設定蛇開始的爬行方向左右。 隨機確定食物位置 由于蛇吃到食物的判斷是蛇頭的坐標和食物的坐標相等,所以要確保食物出現(xiàn)的位置在10的倍數(shù)位置上。先用兩個帶隨機函數(shù)的表達式產(chǎn)生一個位于圍墻內(nèi)的x、y坐標,然后

9、用兩個while循環(huán)10將兩個坐標值調(diào)整到10的倍數(shù)上,這樣就可以讓蛇吃到。 循環(huán)確定蛇身的新坐標 這里的難點是表示蛇的新位置并消除前一次的圖形。采用的方法是每次移動的時候從最后一節(jié)開始到第二節(jié),將前一節(jié)的坐標值賦給后一節(jié)的坐標,移動后只要把最后一節(jié)用背景色擦出即可,因為新位置0到n-1節(jié)還是要出現(xiàn)在畫面上的。這里用一個for循環(huán)來確定蛇身的新坐標。 吃到食物后的處理 蛇吃到食物后,首先將食物擦除,即用背景色畫出該食物,然后給蛇的節(jié)數(shù)加1,設置需要食物標志,是游戲成績加10分,如果成績達到100分的倍數(shù),則給關(guān)數(shù)加1,并加快游戲速度。 有按鍵判斷蛇的方向 這是一個內(nèi)嵌的嵌套的條件選擇結(jié)構(gòu),根據(jù)

10、按動上下左右鍵來設定蛇的移動方向。判斷還需考慮相反的方向鍵無效,比如蛇正在向上爬行,按下一鍵方向是無效的。4系統(tǒng)仿真與調(diào)試4.1 仿真軟件介紹win-tc軟件是一款用于編寫c語言程序的軟件,是tc2 windows平臺開發(fā)的一個工具,是turbo c 2.0(簡稱tc2.0)的一種擴展形式,是在tc2.0的基礎上,增強了系統(tǒng)的兼容性和共享性,允許進行復制粘貼的多項可以用鼠標來操作的功能,比tc2.0使用起來方便。該軟件使用tc2為內(nèi)核,提供windows平臺的開發(fā)界面,因此也就支持windows平臺下的功能,例如剪切、復制、粘貼和查找替換等。而且在功能上也有它的獨特特色例如語法加亮、c內(nèi)嵌匯編

11、、自定義擴展庫的支持等。它的主要特點如下:1)在windows下編輯tc代碼,可以充分利用windows的支持剪貼版和中文的特點; 2)include和lib路徑自動定位,告別tc設置路徑的歷史; 3)編譯錯誤捕捉功能,編譯時不會出現(xiàn)煩人的dos窗口; 4)支持c內(nèi)嵌匯編從而實現(xiàn)c/asm混合編程; 5)支持c擴展庫(自定義lib庫); 6)允許自定義設置輸入風格,能夠?qū)崿F(xiàn)vc類似的輸入風格;7)錯誤警告定位功能、出現(xiàn)編譯錯誤時雙擊輸出框里的出錯行信息可以自動尋找到錯誤的行,就像dos的tc那樣;4.2系統(tǒng)仿真實現(xiàn)在window環(huán)境下裝好win-tc之后,打開win-tc并新建文件夾,把貪食蛇

12、游戲的源程序輸入進去,然后運行,并發(fā)現(xiàn)錯誤,修改之后,把文件保存在軟件的源文件里面,也就是project文件夾里。之后就可以成功運行貪食蛇游戲了。4.3系統(tǒng)測試預期結(jié)果:蛇運行時如果撞到墻壁,則游戲結(jié)束。實際運效果:與預期結(jié)果一致,如下圖 圖6 貪吃蛇撞到墻壁 圖7 游戲結(jié)束預期的結(jié)果:當蛇得頭部與蛇身相撞時,游戲應當結(jié)束。實際運效果:與預期結(jié)果一致,如下圖圖8 貪吃蛇頭部與身體相撞圖9 游戲結(jié)束4.4 數(shù)據(jù)分析經(jīng)過對各個模塊的調(diào)試和單元測試并修改了錯誤后,將各個模塊組裝成一個系統(tǒng),并進行集成測試。在集成的過程中發(fā)現(xiàn)了一些錯誤,比如全局變量重復定義、函數(shù)重復聲明等,分別進行了改正。最后連續(xù)運行

13、了5次,以便測試該游戲程序的功能、性能是否達到了預期的目標,并根據(jù)所使用的具體機器對蛇的爬行速度進行適當?shù)恼{(diào)整。測試內(nèi)容包括蛇的運行、分數(shù)、關(guān)數(shù)、動畫等功能,情況均正常。5 總結(jié)5.1設計小結(jié)通過2周的課程設計,在導師的指導和開發(fā)小組共同的努力下,終于完成了貪吃蛇游戲程序的設計與編寫。該游戲程序?qū)崿F(xiàn)了用方向鍵控制蛇在圍墻內(nèi)爬行、隨機產(chǎn)生食物、控制蛇吃掉食物并加分、控制游戲中闖關(guān)的數(shù)目和蛇的運行速度、實時顯示得分和關(guān)數(shù)、結(jié)束時處理和顯示排行榜等功能。該游戲程序具有界面友好、操作方便、控制準確和容錯能力強等特點。然而這個貪吃蛇游戲還存在一些缺陷,應該在如下幾個方面加以改進。1) 進入游戲后,到蛇死

14、亡,只能玩一次就會退出程序。應加入多次游戲的控制能力。2) 蛇的美觀不足,需將蛇頭、蛇尾及蛇身做進一步美化,使其更像真實的蛇。3) 當分數(shù)超過350分后,蛇的速度變得非??欤幌伦泳妥驳絿鷫ι狭?,應適當控制蛇的速度和關(guān)數(shù),以便使游戲更具有吸引力。5.2 收獲體會貪吃蛇的設計與編寫對我們有很多幫助,學習編寫貪吃蛇的游戲?qū)φ莆誧語言的知識有很大的幫助。通過編程實踐,還能拓展思路,讓我們?nèi)ふ倚枰{(diào)用那些函數(shù),怎樣提高程序的質(zhì)量等。要寫出好的程序,需要我們有扎實的基礎,這樣遇到一些基本算法的時候就會游刃有余了。在編程時我們要有豐富的想象力,不要拘泥與固定的思維方式,遇到問題的時侯要多想幾種解決問題的

15、方案。豐富的想象力是建立在豐富的知識基礎上,所以我們要通過多個途徑來幫助自己建立較豐富的知識結(jié)構(gòu)。貪吃蛇游戲的編程練習思考數(shù)據(jù)結(jié)構(gòu):定義食物的坐標來控制它出現(xiàn)的位置,用一系列的函數(shù)時進行表示,比如用函數(shù)rectangle來畫出矩形,用life變量的值表示蛇的生命,用direction變量的值表示蛇移動的方向等,還有用數(shù)組來存放蛇身各節(jié)的坐標,這些都讓我們熟悉了對數(shù)組的操作,此外還熟悉了各種函數(shù)的應用。在編程是我們碰倒了很多的困難,這就需要我們多與別人交流。在編程的過程中,我們也發(fā)現(xiàn)有良好的編程風格是十分重要的,至少在時間效率上就體現(xiàn)了這一點。養(yǎng)成良好的習慣,代碼的縮進編排,變量的命名規(guī)則要始終

16、保持一致,這些都是提高我們編程能力的要點。在進行課程設計的過程中我們也學到了許多別的東西。首先,我們學會了合作,要以別人的眼光看看問題,也許這樣得到的會比各自得到的都要多;其次,我們學會了分工,分工是為了更好地合作,分工才能提高合作的效率;最后,我們學會了奮斗,我們相信,通過四年的學習,我們一定能寫出更精彩的程序,將來會描繪出更精彩的人生。在這里,我們要感謝課程設計指導老師王麗老師給予我們悉心的指導。老師多次詢問編寫進程,并為我們指點迷津,幫助我們開拓研究思路,精心點撥、熱心鼓勵。老師一絲不茍的工作作風,嚴謹求實的態(tài)度,踏踏實實的精神,不僅受我以文,而且教我做人,給以終生受益無窮之道。還有我們

17、設計小組之間的團結(jié)與努力,正是由于我們團結(jié)協(xié)作,才順利的完成了課程設計任務。5.3 展望通過這次的課程設計,使得我們對c語言有了一個更深層面的了解與認識。從一開始的對待新事物的恐懼與無從下手到最后逐漸產(chǎn)生了興趣。我覺得這次課程設計不單是考驗了我們對c語言的掌握,更是對我們的團隊協(xié)作能力的一個挑戰(zhàn)。我們希望以后還可以更加進步。6 參考文獻1 譚浩強.程序設計(第三版)m.北京:清華大學出版社,2005.2 王成瑞,魏先民.語言程序設計實訓m.中國水利水電出版社,2005.3 譚浩強.程序設計題解與上級指導(第三版)m.北京:清華大學出版社,2005.4 王路群.java高級程序設計m.北京:中國

18、水利水電出版社,2006.5 陳軼,姚曉昆編著.java程序設計實驗指導m.北京:清華大學出版社,2006.6 施宏斌譯.javascript入門經(jīng)典(第3版)m.北京:清華大學出版社,2009.7 譚浩強著.c程序設計(第二版)m.北京:清華大學出版社,1999.8 譚浩強,張基溫,唐永炎編著.c語言程序設計教程m.北京:高等教育出版社,1992.9 戴健鵬譯.c語言大全(第二版)m.北京:電子工業(yè)出版社,1994.10 c編寫組編.常用c語言用法速查手冊m.北京:龍門書局,1995.7 附錄 系統(tǒng)主要功能展示圖元器件清單win-tc軟件,pc機貪吃蛇程序源碼:#include #inclu

19、de #include #include #include /*蛇的最大節(jié)數(shù)*/#define max 200#define left 10#define top 2#define right 50#define bottom 23#define time 0x1c /*時鐘中斷點*/#define vk_up 0x4800#define vk_down 0x5000#define vk_left 0x4b00 #define vk_right 0x4d00#define esc 0x11b#define randx() (rand()%(right-left-1)+left+1#define

20、 randy() (rand()%(bottom-top-1)+top+1int iscore=0; /*分數(shù)*/int itimecount=0;/*記錄時鐘中斷*/*定義蛇節(jié)的結(jié)構(gòu)*/ struct snakenodeint x;int y;/*定義蛇的結(jié)構(gòu)*/typedef structstruct snakenode smax;int ilength; /*蛇的長度*/int idirection;/*蛇移動的方向*/snake;/*定義食物的結(jié)構(gòu)*/typedef structint x;int y;food;/*定義蛇變量*/snake snake;/*定義食物變量*/food f

21、ood;/*保存舊的時鐘中斷*/void interrupt (*oldtime)();/*新時鐘函數(shù)*/void interrupt newtime()itimecount+;oldtime();/*設置時鐘中斷*/void settime(void interrupt (*pinterrupt)()oldtime=getvect(time);disable();setvect(time,pinterrupt);enable();/*恢復以前的時鐘中斷*/void killtime()disable();setvect(time,oldtime);enable();void drawfram

22、e()/*畫邊框*/int x,y;textcolor(yellow);for(x=left;xright+1;x+)gotoxy(x,top);cprintf(%c,219);gotoxy(x,bottom);cprintf(%c,219);for(y=top;ybottom+1;y+)gotoxy(left,y);cprintf(%c,219);gotoxy(right,y);cprintf(%c,219);textcolor(white);/*顯示分數(shù)與速度*/void drawinfo() textcolor(red);gotoxy(right+5,top+5);cprintf(sco

23、re:%-5d,iscore);gotoxy(right+5,top+7);cprintf(speed:%-2d,iscore/100+1);textcolor(white);/*產(chǎn)生貪吃蛇*/void createsnake()int i;int x,y;x=randx();y=randy();for(i=0;i0;i-)gotoxy(snake.si.x,snake.si.y);printf(%c,2);gotoxy(snake.s0.x,snake.s0.y);printf(%c, );/*檢查產(chǎn)生食物是否在貪吃蛇身上*/int isinsnake()int i;int flag=0;/

24、*食物不在貪吃蛇身上*/int length=snake.ilength;for(i=0;ilength;i+)if(snake.si.x=food.x) & (snake.si.y=food.y)flag=1;/*食物在貪吃蛇身上*/break;return flag;/*產(chǎn)生食物*/void createfood()int x,y;int flag=1;while(1=flag)x=randx();y=randy();food.x=x;food.y=y;if(0=isinsnake()/*食物不在貪吃蛇身上*/flag=0;/*退出循環(huán)*/*顯示食物*/void showfood()got

25、oxy(food.x,food.y);printf(%c,4);/*游戲初始化*/void initgame()/*初始化隨機數(shù)組*/srand(int)time(0);/*初始化游戲時鐘*/settime(newtime);/*繪制游戲邊框*/drawframe();/*顯示游戲分數(shù)與游戲速度*/drawinfo();/*初始化蛇的位置與長度*/createsnake();/*顯示貪吃蛇*/showsnake();/*初始化食物的位置*/createfood();/*顯示食物*/showfood();/*按方向移動蛇*/void movesnake()int dir;int length;int i;dir=snake.idirection;length=snake.ilength;switch(dir)case 0:/*左移*/for(i=0;ilength-1;i+)snake.si=snake.si+1;snake.slength-1.x-=1;break;case 1:/*上移*/for(i=0;ilength-1;i+)snake.si=snake.si+1;snake.slength-1.y-=1; break;case 2:/*右移*/for(i=0;ilength-1;i+)sna

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論