貪吃蛇游戲?qū)嵙?xí)報(bào)告_第1頁(yè)
貪吃蛇游戲?qū)嵙?xí)報(bào)告_第2頁(yè)
貪吃蛇游戲?qū)嵙?xí)報(bào)告_第3頁(yè)
貪吃蛇游戲?qū)嵙?xí)報(bào)告_第4頁(yè)
貪吃蛇游戲?qū)嵙?xí)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 / 22 文檔可自由編輯打印課課程程設(shè)設(shè)計(jì)計(jì)報(bào)報(bào)告告貪吃蛇游戲設(shè)計(jì)貪吃蛇游戲設(shè)計(jì)專業(yè)專業(yè)電子信息工程學(xué)生姓名學(xué)生姓名杜 運(yùn) 福班級(jí)班級(jí)B 電子 062學(xué)號(hào)學(xué)號(hào)24指導(dǎo)教師指導(dǎo)教師曹 妍完成日期完成日期2008 年 8 月 30 日2 / 22 文檔可自由編輯打印貪吃蛇游戲設(shè)計(jì)貪吃蛇游戲設(shè)計(jì)摘要:本設(shè)計(jì)主要圍繞貪吃蛇游戲展開(kāi)。眾所周知,貪吃蛇游戲一直以來(lái)是比較流行的。傳統(tǒng)的貪吃蛇游戲功能比較少,對(duì)蛇的控制僅限于向左轉(zhuǎn)和向右轉(zhuǎn),而現(xiàn)在的貪吃蛇游戲已經(jīng)發(fā)展的相當(dāng)好;具有更多的功能和友好的界面。例如,最近流行的免費(fèi)的3D版的貪吃蛇游戲,界面相當(dāng)?shù)拿烙^,有很強(qiáng)的立體效果,真實(shí)感更強(qiáng),食物也為立體的且

2、顏色絢麗。在3D版貪吃蛇游戲里面,墻壁是真實(shí)的墻壁,障礙物比較多,如樹(shù)、土丘等。此外,其功能更多更強(qiáng),可以選擇難度。不過(guò),總而言之,3D版與傳統(tǒng)的貪吃蛇游戲有共性,即娛樂(lè)性與益智性。這些也是貪吃蛇游戲的優(yōu)點(diǎn)。 本人因水平有限,只能設(shè)計(jì)簡(jiǎn)單的貪吃蛇游戲。不過(guò),在功能上,比傳統(tǒng)貪吃蛇游戲更豐富。蛇可以反向運(yùn)動(dòng),操作起來(lái),顯得更為靈活。界面的顏色選用綠色,不易使眼睛疲勞。關(guān)鍵詞:3D版;傳統(tǒng);靈活;文檔可自由編輯打印目目 錄錄1、概述1.1、用TC設(shè)計(jì)程序的方法1.2、簡(jiǎn)要說(shuō)明2、設(shè)計(jì)要求3、系統(tǒng)分析與模塊設(shè)計(jì)3.1、算法設(shè)計(jì)3.2、數(shù)據(jù)結(jié)構(gòu)3.3、模塊設(shè)計(jì)3.4、模塊枝干圖4、程序流程圖4.1、圖

3、形驅(qū)動(dòng)4.2、開(kāi)始畫(huà)面4.3、顯示食物4.4、蛇向前移動(dòng)4.5、判蛇死4.6、吃到食物后處理4.7、判蛇反向移動(dòng)4.8、游戲結(jié)束4.9、圖形結(jié)束5、程序設(shè)計(jì)及關(guān)鍵源代碼6、運(yùn)行結(jié)果分析7、實(shí)習(xí)心得1 / 22 文檔可自由編輯打印貪吃蛇游戲的設(shè)計(jì)貪吃蛇游戲的設(shè)計(jì)1 .概 述 1.1、用TC設(shè)計(jì)程序的方法首先應(yīng)了解設(shè)計(jì)要求,然后按照功能設(shè)計(jì)模塊,每個(gè)模塊完成特定的功能,要使模塊間的耦合性小,內(nèi)聚性高;設(shè)計(jì)模塊是相當(dāng)重要的一個(gè)環(huán)節(jié)。模塊的數(shù)量不宜太多,也不宜太少,要使每個(gè)模塊都能比較簡(jiǎn)單的轉(zhuǎn)換成流程圖。模塊設(shè)計(jì)完成后,就該給每個(gè)模塊繪制流程圖了。流程圖要簡(jiǎn)單,容易理解,多用中文。不宜寫(xiě)過(guò)長(zhǎng)的代碼,增

4、加理解難度。流程圖與模塊枝干圖均可用繪圖軟件繪制,可適當(dāng)加些背景色,用以區(qū)分。此外,流程圖應(yīng)容易轉(zhuǎn)換成代碼。繪制好了流程圖,就要編寫(xiě)代碼了。直接在TC環(huán)境里輸入代碼,然后運(yùn)行測(cè)試,檢查錯(cuò)誤,最終,將設(shè)計(jì)出可行的程序。1.2、簡(jiǎn)要說(shuō)明 我設(shè)計(jì)的貪吃蛇游戲具有很多獨(dú)特性。例如,墻壁不用實(shí)體,而用中空的墻,顏色為綠色,顯得更美觀,且不易使眼疲勞。操作上,做了些簡(jiǎn)化,游戲開(kāi)始時(shí)便可以自動(dòng)運(yùn)行,且速度較快,屬中等難度。玩游戲的過(guò)程相當(dāng)簡(jiǎn)單,只需按鍵盤(pán)上的上下左右方向鍵,便可改變蛇的行進(jìn)方向。食物隨機(jī)產(chǎn)生。貪吃蛇吃到一個(gè)食物后便得到10分。得分顯示在左上角。當(dāng)蛇撞到墻壁或自己時(shí),蛇死,游戲結(jié)束,輸出得分。

5、2.設(shè)計(jì)要求 外觀為矩形,食物隨機(jī)產(chǎn)生,添加注釋,統(tǒng)計(jì)得分、每吃到一個(gè)食物獲得10分。蛇碰到自己或墻壁,游戲均結(jié)束。游戲結(jié)束時(shí)輸出得分。畫(huà)出模塊枝干圖與每個(gè)模塊的程序流程圖。修改某些代碼,改變其外觀及功能。游戲操作應(yīng)盡量簡(jiǎn)單。界面美觀,讓人看了覺(jué)得舒服。3、系統(tǒng)分析與模塊設(shè)計(jì)3.1、算法設(shè)計(jì) 玩游戲過(guò)程采用遞歸算法,由WHILE(1)控制循環(huán)過(guò)程,可使游戲重復(fù)玩,在蛇死之前不停的玩。判斷蛇死的算法是通過(guò)判斷蛇有沒(méi)有碰到自己及墻壁。使蛇向前移動(dòng)采用遞歸算法,通過(guò)遞歸將蛇的每一節(jié)依次向前移動(dòng),橫坐標(biāo)與縱坐標(biāo)依次向前賦值,從而達(dá)到使蛇前移的目的。蛇的前進(jìn)方向通過(guò)IF結(jié)構(gòu)判斷。2 / 22 文檔可自由

6、編輯打印3.2、數(shù)據(jù)結(jié)構(gòu) 蛇與食物信息分別用兩個(gè)結(jié)構(gòu)體存儲(chǔ)與表示。將食物的橫坐標(biāo)X、縱坐標(biāo)Y和判斷是否要出現(xiàn)食物的變量YES分別作為食物的結(jié)構(gòu)體的成員。蛇的橫坐標(biāo)數(shù)組XN,縱坐標(biāo)數(shù)組YN,蛇的節(jié)數(shù)NODE,蛇的移動(dòng)方向DIRECTION、蛇的生命LIFE分別作為蛇的結(jié)構(gòu)體的成員。結(jié)構(gòu)體內(nèi)每個(gè)成員的存儲(chǔ)類型均為整型。3.3、模塊設(shè)計(jì)模塊應(yīng)具有高內(nèi)聚性,低耦合性。這樣,程序運(yùn)行才更穩(wěn)定,效率更高。據(jù)功能將貪吃蛇游戲劃分成四個(gè)大模塊,九個(gè)小模塊。每個(gè)模塊均具有自己的功能,而且,比較容易畫(huà)出各個(gè)模塊的流程圖。3.4、模塊枝干圖簡(jiǎn)要說(shuō)明:圖形驅(qū)動(dòng)即完成初始化圖形系統(tǒng)功能;開(kāi)始畫(huà)面模塊的主要作用是根據(jù)設(shè)置

7、繪制出玩游戲區(qū)域四周的墻壁;玩游戲的過(guò)程是游戲此游戲程序的核心,又可細(xì)分為好多小的功能模塊;其中,顯示食物模塊僅完成顯示食物功能;蛇前移模塊即通過(guò)遞歸算法實(shí)現(xiàn)蛇的向某方向移動(dòng);判蛇死模塊的功能是通過(guò)判斷蛇是否碰到自己或墻壁來(lái)判斷蛇有沒(méi)有死亡。吃到食物后小模塊只有蛇吃到食物后才起作用。即當(dāng)蛇吃到食物后,蛇自身延長(zhǎng)一節(jié)并繪出蛇,同時(shí)加10 分。通過(guò)鍵盤(pán)操控來(lái)玩游戲主要由判反向移動(dòng)模塊完成,即當(dāng)蛇不是反向移動(dòng)時(shí),按照鍵盤(pán)上方向鍵指示移動(dòng)。游戲結(jié)束模塊功能簡(jiǎn)單,僅完成輸出得分與提示語(yǔ)功能。最后圖形結(jié)束模塊完成關(guān)閉圖形功能。4、程序流程圖4.1、圖形驅(qū)動(dòng)3 / 22 文檔可自由編輯打印 4.2、開(kāi)始畫(huà)面

8、4 / 22 文檔可自由編輯打印 4.3、 顯示食物5 / 22 文檔可自由編輯打印 4.4、 蛇向前移動(dòng) 6 / 22 文檔可自由編輯打印 4.5、 判蛇死7 / 22 文檔可自由編輯打印 4.6、 吃到食物后處理8 / 22 文檔可自由編輯打印 4.7、 判蛇反向移動(dòng) 9 / 22 文檔可自由編輯打印 4.8、 游戲結(jié)束10 / 22 文檔可自由編輯打印 4.9、 圖形結(jié)束 5、程序設(shè)計(jì)及關(guān)鍵源代碼 定義上下左右控制方向:#define LEFT 0 x4b00#define RIGHT 0 x4d0011 / 22 文檔可自由編輯打印#define DOWN 0 x5000#define

9、 UP 0 x4800#define ESC 0 x011b設(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;/*蛇移動(dòng)方向*/ int life;/* 蛇的生命,0 活著,1 死亡*/snake;主函數(shù):void main(void) Init();/*圖形驅(qū)動(dòng)*/ DrawK(

10、);/*開(kāi)始畫(huà)面*/ GamePlay();/*玩游戲具體過(guò)程*/ Close();/*圖形結(jié)束*/圖形驅(qū)動(dòng):12 / 22 文檔可自由編輯打印void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice();開(kāi)始畫(huà)面,左上角坐標(biāo)為(50,40) ,右下角坐標(biāo)為(620,460)的圍墻:void DrawK(void) setcolor(10);/*綠色*/ setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ for(i=50;i=610;i+=10)/*

11、畫(huà)圍墻*/ rectangle(i,40,i+10,49); /*上邊*/ rectangle(i,451,i+10,460);/*下邊*/ for(i=40;i0;i-)/*蛇的每個(gè)環(huán)節(jié)前移動(dòng),關(guān)鍵算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4 表示右,左,上,下四個(gè)方向,通過(guò)這個(gè)判斷來(lái)移動(dòng)蛇頭*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4:

12、snake.y0+=10;break; for(i=3;isnake.node;i+)14 / 22 文檔可自由編輯打印 if(snake.xi=snake.x0&snake.yi=snake.y0) GameOver();/*顯示失敗*/ snake.life=1; break; if(snake.x0595|snake.y0455) GameOver(); snake.life=1; /*蛇死*/ if(snake.life=1)/*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開(kāi)始*/ break; if(snake.x0=food.x&snake.y0=food.y)/*

13、吃到食物以后*/ setcolor(0);/*把畫(huà)面上的食物東西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一節(jié)先放在看不見(jiàn)的位置,下次循環(huán)就取前一節(jié)的位置*/ snake.node+;/*蛇的身體長(zhǎng)一節(jié)*/ food.yes=1;/*畫(huà)面上需要出現(xiàn)新的食物*/ score+=10; PrScore();/*輸出新得分*/ setcolor(4);/*畫(huà)出蛇*/ for(i=0;isnake.node;i+) rectangle(snake

14、.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除最后一節(jié)*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1,15 / 22 文檔可自由編輯打印 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

15、 鍵退出*/ break; else if(key=UP&snake.direction!=4)/*判斷是否往相反的方向移動(dòng)*/ snake.direction=3; else if(key=RIGHT&snake.direction!=2) snake.direction=1; else if(key=LEFT&snake.direction!=1) snake.direction=2; else if(key=DOWN&snake.direction!=3) snake.direction=4; /*endwhile(1)*/游戲結(jié)束:void GameOv

16、er(void) cleardevice(); PrScore(); setcolor(GREEN); settextstyle(0,0,3); outtextxy(200,200, Game over!Try!); getch();輸出成績(jī):void PrScore(void) 16 / 22 文檔可自由編輯打印 char str10; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(5); settextstyle(0,0,2); sprintf(str,score:%d,score); outtextxy(55,2

17、0,str);6、運(yùn)行結(jié)果分析 通過(guò)運(yùn)行,我對(duì)自己的設(shè)計(jì)比較滿意。運(yùn)行結(jié)果正如我所料,此貪吃蛇游戲具有易操作性及充滿活力的外觀。截圖及描述:圖 6-1 開(kāi)始畫(huà)面 此圖為開(kāi)始畫(huà)面圖,蛇有三節(jié),墻壁顏色為綠色,顯得較有活力。 17 / 22 文檔可自由編輯打印 圖 6-2 蛇吃到兩個(gè)食物后蛇吃到食物后,得分為 20 分,蛇延長(zhǎng)兩節(jié)。圖 6-3 游戲結(jié)束畫(huà)面18 / 22 文檔可自由編輯打印7、實(shí)習(xí)心得 在大一學(xué)習(xí)期間,我就知道在大二暑假期間,有程序設(shè)計(jì)實(shí)習(xí)。從那時(shí)起,我就期盼著這一天早點(diǎn)到來(lái)。只因我對(duì)編程有濃厚的興趣。我是我們班第一個(gè)通過(guò)江蘇省計(jì)算機(jī) VB 二級(jí)考試的。我的 VC+成績(jī)也還可以。轉(zhuǎn)

18、眼間,程序設(shè)計(jì)實(shí)習(xí)就如期而至了。實(shí)習(xí)的第一天是充滿好奇與興趣,當(dāng)實(shí)習(xí)回來(lái)時(shí),就感覺(jué)得這次實(shí)習(xí)并非想象中的那樣。我本以為,程序設(shè)計(jì)實(shí)習(xí)應(yīng)該是開(kāi)放性的,讓我們參照某些課題,自主、自由地設(shè)計(jì)程序。我想,那樣更能促進(jìn)我們學(xué)習(xí)和提高我們的動(dòng)手能力。這次實(shí)習(xí)中,我們都被給了程序的源碼,而且有詳細(xì)的功能說(shuō)明。表面上看,我們幾乎不需什么努力就能完成,而實(shí)際上,并非如此。因?yàn)槟切┏绦虼蠖嗍腔?16 位 DOS 執(zhí)行的,并且,里面包含許多 DOS 下圖形處理的函數(shù),我從未涉及過(guò),所以,很難看懂代碼,即使有那樣詳細(xì)的注釋。通過(guò)堅(jiān)持上機(jī)實(shí)習(xí),我對(duì)代碼的認(rèn)識(shí)越來(lái)越多。我還上網(wǎng)找了些資料,如 TC函數(shù)詳解等等。我更多的了解了各種 TC 函數(shù)的功能。我通過(guò)一步步的學(xué)習(xí),終于弄懂了整個(gè)程序,并且對(duì)程序做了些修改。如外觀、大小、輸出成績(jī)等。通過(guò)修改程序代碼增加游戲的功能,我也從中獲得了自信。通過(guò)使用 Win-TC1.9 設(shè)計(jì)程序,我更多的了解了 TC 函數(shù)的功能與用法,也了解了在 TC 環(huán)境下調(diào)用 DOS 繪圖及處理的常用方法。在上機(jī)實(shí)習(xí)的過(guò)程中,還繪制了模塊枝干圖與程序流程圖,我感覺(jué)到,畫(huà)模塊枝干圖并不是件容易的事。只有在弄懂程序后才能將整個(gè)程序劃分成數(shù)量適宜的模塊。劃分模塊確實(shí)挺重要的,原

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論