貪吃蛇游戲設(shè)計 論文及源代碼.doc_第1頁
貪吃蛇游戲設(shè)計 論文及源代碼.doc_第2頁
貪吃蛇游戲設(shè)計 論文及源代碼.doc_第3頁
貪吃蛇游戲設(shè)計 論文及源代碼.doc_第4頁
貪吃蛇游戲設(shè)計 論文及源代碼.doc_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課課程程設(shè)設(shè)計計報報告告 貪吃蛇游戲設(shè)計貪吃蛇游戲設(shè)計 專業(yè)專業(yè)電子信息工程 學(xué)生姓名學(xué)生姓名 班級班級b 電子 062 學(xué)號學(xué)號 指導(dǎo)教師指導(dǎo)教師 完成日期完成日期2008 年 8 月 30 日 本科生課程設(shè)計報告(2008) 1 貪吃蛇游戲設(shè)計貪吃蛇游戲設(shè)計 摘要:本設(shè)計主要圍繞貪吃蛇游戲展開。眾所周知,貪吃蛇游戲一直以來是比較流行的。 傳統(tǒng)的貪吃蛇游戲功能比較少,對蛇的控制僅限于向左轉(zhuǎn)和向右轉(zhuǎn),而現(xiàn)在的貪吃蛇游戲 已經(jīng)發(fā)展的相當(dāng)好;具有更多的功能和友好的界面。例如,最近流行的免費的3d版的貪吃 蛇游戲,界面相當(dāng)?shù)拿烙^,有很強的立體效果,真實感更強,食物也為立體的且顏色絢麗。 在3d版貪吃蛇游戲里面,墻壁是真實的墻壁,障礙物比較多,如樹、土丘等。此外,其功 能更多更強,可以選擇難度。不過,總而言之,3d版與傳統(tǒng)的貪吃蛇游戲有共性,即娛樂 性與益智性。這些也是貪吃蛇游戲的優(yōu)點。 本人因水平有限,只能設(shè)計簡單的貪吃蛇游戲。不過,在功能上,比傳統(tǒng)貪吃蛇游 戲更豐富。蛇可以反向運動,操作起來,顯得更為靈活。界面的顏色選用綠色,不易使眼 睛疲勞。 關(guān)鍵詞:3d版;傳統(tǒng);靈活; 貪吃蛇游戲設(shè)計 目目 錄錄 1、概述 1.1、用tc設(shè)計程序的方法 1.2、簡要說明 2、設(shè)計要求 3、系統(tǒng)分析與模塊設(shè)計 3.1、算法設(shè)計 3.2、數(shù)據(jù)結(jié)構(gòu) 3.3、模塊設(shè)計 3.4、模塊枝干圖 4、程序流程圖 4.1、圖形驅(qū)動 4.2、開始畫面 4.3、顯示食物 4.4、蛇向前移動 4.5、判蛇死 4.6、吃到食物后處理 4.7、判蛇反向移動 4.8、游戲結(jié)束 4.9、圖形結(jié)束 5、程序設(shè)計及關(guān)鍵源代碼 6、運行結(jié)果分析 7、實習(xí)心得 貪吃蛇游戲設(shè)計 0 貪吃蛇游戲的設(shè)計貪吃蛇游戲的設(shè)計 1 .概 述 1.1、用tc設(shè)計程序的方法 首先應(yīng)了解設(shè)計要求,然后按照功能設(shè)計模塊,每個模塊完成特定的功能, 要使模塊間的耦合性小,內(nèi)聚性高;設(shè)計模塊是相當(dāng)重要的一個環(huán)節(jié)。模塊的 數(shù)量不宜太多,也不宜太少,要使每個模塊都能比較簡單的轉(zhuǎn)換成流程圖。模 塊設(shè)計完成后,就該給每個模塊繪制流程圖了。流程圖要簡單,容易理解,多 用中文。不宜寫過長的代碼,增加理解難度。流程圖與模塊枝干圖均可用繪圖 軟件繪制,可適當(dāng)加些背景色,用以區(qū)分。此外,流程圖應(yīng)容易轉(zhuǎn)換成代碼。 繪制好了流程圖,就要編寫代碼了。直接在tc環(huán)境里輸入代碼,然后運行測試, 檢查錯誤,最終,將設(shè)計出可行的程序。 1.2、簡要說明 我設(shè)計的貪吃蛇游戲具有很多獨特性。例如,墻壁不用實體,而用中空的 墻,顏色為綠色,顯得更美觀,且不易使眼疲勞。操作上,做了些簡化,游戲 開始時便可以自動運行,且速度較快,屬中等難度。玩游戲的過程相當(dāng)簡單, 只需按鍵盤上的上下左右方向鍵,便可改變蛇的行進方向。食物隨機產(chǎn)生。貪 吃蛇吃到一個食物后便得到10分。得分顯示在左上角。當(dāng)蛇撞到墻壁或自己時, 蛇死,游戲結(jié)束,輸出得分。 2.設(shè)計要求 外觀為矩形,食物隨機產(chǎn)生,添加注釋,統(tǒng)計得分、每吃到一個食物獲 得10分。蛇碰到自己或墻壁,游戲均結(jié)束。游戲結(jié)束時輸出得分。畫出模塊枝 干圖與每個模塊的程序流程圖。修改某些代碼,改變其外觀及功能。 游戲操作應(yīng)盡量簡單。 界面美觀,讓人看了覺得舒服。 3、系統(tǒng)分析與模塊設(shè)計 3.1、算法設(shè)計 玩游戲過程采用遞歸算法,由while(1)控制循環(huán)過程,可使游戲重復(fù)玩, 在蛇死之前不停的玩。判斷蛇死的算法是通過判斷蛇有沒有碰到自己及墻壁。 使蛇向前移動采用遞歸算法,通過遞歸將蛇的每一節(jié)依次向前移動,橫坐標(biāo)與 縱坐標(biāo)依次向前賦值,從而達到使蛇前移的目的。蛇的前進方向通過if結(jié)構(gòu)判 本科生課程設(shè)計報告(2008) 1 斷。 3.2、數(shù)據(jù)結(jié)構(gòu) 蛇與食物信息分別用兩個結(jié)構(gòu)體存儲與表示。將食物的橫坐標(biāo)x、縱坐標(biāo)y和 判斷是否要出現(xiàn)食物的變量yes分別作為食物的結(jié)構(gòu)體的成員。蛇的橫坐標(biāo)數(shù)組 xn,縱坐標(biāo)數(shù)組yn,蛇的節(jié)數(shù)node,蛇的移動方向direction、蛇的生命life 分別作為蛇的結(jié)構(gòu)體的成員。結(jié)構(gòu)體內(nèi)每個成員的存儲類型均為整型。 3.3、模塊設(shè)計 模塊應(yīng)具有高內(nèi)聚性,低耦合性。這樣,程序運行才更穩(wěn)定,效率更高。 據(jù)功能將貪吃蛇游戲劃分成四個大模塊,九個小模塊。每個模塊均具有自己 的功能,而且,比較容易畫出各個模塊的流程圖。 3.4、模塊枝干圖 簡要說明:圖形驅(qū)動即完成初始化圖形系統(tǒng)功能;開始畫面模塊的主要作用是根據(jù)設(shè)置繪制出 玩游戲區(qū)域四周的墻壁;玩游戲的過程是游戲此游戲程序的核心,又可細(xì)分為好多小的功能模 塊;其中,顯示食物模塊僅完成顯示食物功能;蛇前移模塊即通過遞歸算法實現(xiàn)蛇的向某方向 移動;判蛇死模塊的功能是通過判斷蛇是否碰到自己或墻壁來判斷蛇有沒有死亡。吃到食物后 小模塊只有蛇吃到食物后才起作用。即當(dāng)蛇吃到食物后,蛇自身延長一節(jié)并繪出蛇,同時加 10 分。通過鍵盤操控來玩游戲主要由判反向移動模塊完成,即當(dāng)蛇不是反向移動時,按照鍵 盤上方向鍵指示移動。游戲結(jié)束模塊功能簡單,僅完成輸出得分與提示語功能。最后圖形結(jié)束 模塊完成關(guān)閉圖形功能。 貪吃蛇游戲設(shè)計 2 4、程序流程圖 4.1、圖形驅(qū)動 4.2、開始畫面 本科生課程設(shè)計報告(2008) 3 4.3、 顯示食物 貪吃蛇游戲設(shè)計 4 4.4、 蛇向前移動 本科生課程設(shè)計報告(2008) 5 4.5、 判蛇死 貪吃蛇游戲設(shè)計 6 4.6、 吃到食物后處理 本科生課程設(shè)計報告(2008) 7 4.7、 判蛇反向移動 貪吃蛇游戲設(shè)計 8 4.8、 游戲結(jié)束 本科生課程設(shè)計報告(2008) 9 4.9、 圖形結(jié)束 5、程序設(shè)計及關(guān)鍵源代碼 定義上下左右控制方向: #define left 0x4b00 #define right 0x4d00 貪吃蛇游戲設(shè)計 10 #define down 0x5000 #define up 0x4800 #define esc 0x011b 設(shè)定游戲速度: int gamespeed=60000; 用結(jié)構(gòu)體定義食物與蛇: struct food int x;/*食物的橫坐標(biāo)*/ int y;/*食物的縱坐標(biāo)*/ int yes;/*判斷是否要出現(xiàn)食物的變量*/ food;/*食物的結(jié)構(gòu)體*/ struct snake int xn; int yn; int node;/*蛇的節(jié)數(shù)*/ int direction;/*蛇移動方向*/ int life;/* 蛇的生命,0 活著,1 死亡*/ snake; 主函數(shù): void main(void) init();/*圖形驅(qū)動*/ drawk();/*開始畫面*/ gameplay();/*玩游戲具體過程*/ close();/*圖形結(jié)束*/ 圖形驅(qū)動: 本科生課程設(shè)計報告(2008) 11 void init(void) int gd=detect,gm; initgraph( cleardevice(); 開始畫面,左上角坐標(biāo)為(50,40) ,右下角坐標(biāo)為(620,460)的圍墻: void drawk(void) setcolor(10);/*綠色*/ setlinestyle(solid_line,0,thick_width);/*設(shè)置線型*/ for(i=50;i0;i-)/*蛇的每個環(huán)節(jié)前移動,關(guān)鍵算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4 表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4: snake.y0+=10;break; for(i=3;i595|snake.y0455) gameover(); snake.life=1; /*蛇死*/ if(snake.life=1)/*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始 */ break; if(snake.x0=food.x/*把畫面上的食物東西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置*/ snake.node+;/*蛇的身體長一節(jié)*/ food.yes=1;/*畫面上需要出現(xiàn)新的食物*/ score+=10; prscore();/*輸出新得分*/ setcolor(4);/*畫出蛇*/ for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除最后一節(jié)*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1, 貪吃蛇游戲設(shè)計 14 snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/ if(snake.life=1)/*如果蛇死就跳出循環(huán)*/ break; key=bioskey(0);/*接收按鍵*/ if(key=esc)/*按 esc 鍵退出*/ break; else if(key=up else if(key=right else if(key=left else if(key=down /*endwhile(1)*/ 游戲結(jié)束: void gameover(void) cleardevice(); prscore(); setcolor(green); settextstyle(0,0,3); outtextxy(200,200,“ game over!try!“); getch(); 輸出成績: void prscore(void) 本科生課程設(shè)計報告(2008) 15 char str10; setfillstyle(solid_fill,yellow); bar(50,15,220,35); setcolor(5); settextstyle(0,0,2); sprintf(str,“score:%d“,score); outtextxy(55,20,str); 6、運行結(jié)果分析 通過運行,我對自己的設(shè)計比較滿意。運行結(jié)果正如我所料,此貪吃蛇游 戲具有易操作性及充滿活力的外觀。 截圖及描述: 圖 6-1 開始畫面 此圖為開始畫面圖,蛇有三節(jié),墻壁顏色為綠色,顯得較有活力。 貪吃蛇游戲設(shè)計 16 圖 6-2 蛇吃到兩個食物后 蛇吃到食物后,得分為 20 分,蛇延長兩節(jié)。 圖 6-3 游戲結(jié)束畫面 本科生課程設(shè)計報告(2008) 17 7、實習(xí)心得 在大一學(xué)習(xí)期間,我就知道在大二暑假期間,有程序設(shè)計實習(xí)。從那時起, 我就期盼著這一天早點到來。只因我對編程有濃厚的興趣。我是我們班第一個通 過江蘇省計算機 vb 二級考試的。我的 vc+成績也還可以。 轉(zhuǎn)眼間,程序設(shè)計實習(xí)就如期而至了。實習(xí)的第一天是充滿好奇與興趣,當(dāng) 實習(xí)回來時,就感覺得這次實習(xí)并非想象中的那樣。我本以為,程序設(shè)計實習(xí)應(yīng) 該是開放性的,讓我們參照某些課題,自主、自由地設(shè)計程序。我想,那樣更能 促進我們學(xué)習(xí)和提高我們的動手能力。 這次實習(xí)中,我們都被給了程序的源碼,而且有詳細(xì)的功能說明。表面上看, 我們幾乎不需什么努力就能完成,而實際上,并非如此。因為那些程序大多是基 于 16 位 dos 執(zhí)行的,并且,里面包含許多 dos 下圖形處理的函數(shù),我從未涉及 過,所以,很難看懂代碼,即使有那樣詳細(xì)的注釋。 通過堅持上機實習(xí),我對代碼的認(rèn)識越來越多。我還上網(wǎng)找了些資料,如 tc 函數(shù)詳解等等。我更多的了解了各種 tc 函數(shù)的功能。我通過一步步的學(xué)習(xí),終于 弄懂了整個程序,并且對程序做了些修改。如外觀、大小、輸出成績等。通過修 改程序代碼增加游戲的功能,我也從中獲得了自信。 通過使用 win-tc1.9 設(shè)計程序,我更多的了解了 tc 函數(shù)的功能與用法,也了 解了在 tc 環(huán)境下調(diào)用 dos 繪圖及處理的常用方法。 在上機實習(xí)的過程中,還繪制了模塊枝干圖與程序流程圖,我感覺到,畫模 塊枝干圖并不是件容易的事。只有在弄懂程序后才能將整個程序劃分成數(shù)量適宜 的模塊。劃分模塊確實挺重要的,原來我將玩游戲過程劃為一個模塊,后來發(fā)現(xiàn) 太復(fù)雜,很難

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論