




已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)貪吃蛇游戲設(shè)計(jì) 院 系: 班 級(jí): 姓 名:合 作 者:指導(dǎo)教師:時(shí)間 _年_月_日 目錄11概述21.1.1研究的背景與意義21.1.2 設(shè)計(jì)的任務(wù)和需要的知識(shí)點(diǎn)21. 生成設(shè)計(jì)主要完成的任務(wù)22. 需要掌握和應(yīng)用的知識(shí)點(diǎn)21.1.3 具體完成的設(shè)計(jì)內(nèi)容31.2需求分析41.2.1 功能需求41.2.2 操作方法41.進(jìn)入游戲42.游戲界面43.游戲操作44.游戲結(jié)束51.3 總體設(shè)計(jì)61.3.1 模塊劃分61.3.2 總體數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)71. 食物與蛇的數(shù)據(jù)結(jié)構(gòu)72. 排行榜中優(yōu)勝者的數(shù)據(jù)結(jié)構(gòu)84. 符號(hào)常量的宏定義81.4 詳細(xì)設(shè)計(jì)91.4.1主控模塊main函數(shù)91.4.2繪制游戲開(kāi)始界面DrawK函數(shù)101.4.3游戲具體過(guò)程GamePlay函數(shù)12Scoreper4.score141.4.5顯示排行榜信息模塊pain_board函數(shù)151.5程序的調(diào)試與測(cè)試161.5.1動(dòng)畫(huà)與音樂(lè)的同步播放161.5.2蛇的運(yùn)行161.5.3 終止程序171.6 結(jié)論181.7 結(jié)束語(yǔ)191.8程序2011概述 本課程設(shè)計(jì)一軟件方法為指導(dǎo) ,采用了結(jié)構(gòu)化、模塊化、的程序設(shè)計(jì)方法,以C語(yǔ)言技術(shù)為基礎(chǔ),使用Turbo C+ 3.0為主要的開(kāi)發(fā)工具,對(duì)貪吃蛇的游戲進(jìn)行了需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、最終完成系統(tǒng)的實(shí)現(xiàn)與測(cè)試。1.1.1研究的背景與意義通過(guò)開(kāi)發(fā)貪吃蛇的游戲系統(tǒng),可使讀者初步了解使用軟件工程方法、技術(shù)和工具開(kāi)發(fā)的過(guò)程,進(jìn)一步掌握結(jié)構(gòu)化、模塊化的程序設(shè)計(jì)方法和步驟,進(jìn)一步掌握數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、模塊劃分的方法,掌握局部變量、全部變量、機(jī)構(gòu)體、共用體、數(shù)組、指針、文件等的數(shù)據(jù)的結(jié)構(gòu)使用方法,掌握?qǐng)D形、聲音、隨機(jī)數(shù)等多種庫(kù)函數(shù)的使用方法,學(xué)習(xí)動(dòng)畫(huà)、音樂(lè)、窗口、菜單、鍵盤(pán)等多項(xiàng)編程技術(shù),進(jìn)一步學(xué)會(huì)軟件測(cè)試、調(diào)試、組裝等軟件測(cè)試方法,為以后的學(xué)習(xí)和將來(lái)的實(shí)際軟件開(kāi)發(fā)打下堅(jiān)實(shí)的基礎(chǔ)。1.1.2 設(shè)計(jì)的任務(wù)和需要的知識(shí)點(diǎn)1. 生成設(shè)計(jì)主要完成的任務(wù)1) 通過(guò)編寫(xiě)“貪吃蛇游戲”程序,掌握結(jié)構(gòu)化、模塊化程序設(shè)計(jì)的細(xì)想,培養(yǎng)解決實(shí)際問(wèn)題的能力。2) 設(shè)計(jì)好數(shù)組元素與蛇、食物的對(duì)應(yīng)的關(guān)系。3) 隨即產(chǎn)生食物。4) 有分?jǐn)?shù)統(tǒng)計(jì)、排行榜、分?jǐn)?shù)存儲(chǔ)等的功能。5) 有同步播放的音樂(lè)、聲音效果。2. 需要掌握和應(yīng)用的知識(shí)點(diǎn)1) 數(shù)組的應(yīng)用2) 全局變量的使用3) 按鍵處理4) 機(jī)構(gòu)體的應(yīng)用5) 圖形、聲音和動(dòng)畫(huà)的有關(guān)知識(shí)6) 隨機(jī)函數(shù)的使用7) 文件的基本操作8) 結(jié)構(gòu)化、模塊化的設(shè)計(jì)方法1.1.3 具體完成的設(shè)計(jì)內(nèi)容 主要完成的任務(wù):包含命令、全局變量的定義和宏定義、函數(shù)聲明等,主要模塊,動(dòng)畫(huà)、音樂(lè)播放模塊,畫(huà)出游戲開(kāi)始界面模塊,具體游戲過(guò)程模塊,游戲結(jié)束處理模塊。1.2需求分析 這類(lèi)型的小游戲的市場(chǎng)價(jià)市相當(dāng)大的,它的玩法簡(jiǎn)單,又有趣味性,市人們休閑的好游戲。這樣的游戲操作簡(jiǎn)單,迎合了人們的需求。1.2.1 功能需求程序運(yùn)行后顯示動(dòng)畫(huà)、音樂(lè),按鍵推出歡迎的界面,進(jìn)入游戲的界面后,左邊有一個(gè)矩形區(qū),為游戲區(qū)域,在矩形區(qū)中有食物和貪吃蛇,上方有統(tǒng)計(jì)分?jǐn)?shù)和關(guān)數(shù)的顯示區(qū)。 蛇在封閉的墻里用用矩形表示,圍墻里隨機(jī)的出現(xiàn)一個(gè)食物,通過(guò)按鍵盤(pán)的四個(gè)光標(biāo)鍵控制蛇向上、下、左、右四個(gè)方向移動(dòng),蛇頭撞到食物,食物就被吃掉,蛇本身長(zhǎng)一節(jié),接著又出現(xiàn)了食物,等待蛇來(lái)吃。食物用另一種顏色的矩形表示,并且每次食物的位置是隨機(jī)出現(xiàn)的。游戲中要使蛇的長(zhǎng)度盡可能的長(zhǎng),但是不能使蛇撞到四周的墻壁,且蛇的身體不能撞到一起,否則游戲結(jié)束。 游戲中每吃掉一個(gè)食物就會(huì)有積分,隨著分?jǐn)?shù)的增加可以進(jìn)入下一關(guān),及速度會(huì)加快。 游戲結(jié)束的時(shí)候,還能進(jìn)行排名,輸入自己的名字即可。1.2.2 操作方法1. 進(jìn)入游戲進(jìn)入游戲后,首先出現(xiàn)的是游戲的片頭,在這里 ,可以看到一個(gè)同步播放的動(dòng)畫(huà)音樂(lè)和在屏幕不斷的變換字體等等,此時(shí),可以按回車(chē)鍵跳出游戲的畫(huà)面。2. 游戲界面游戲界面的左上角為游戲的標(biāo)題和游戲的創(chuàng)作人,右上變是目前的游戲成績(jī)和關(guān)數(shù),界面中部是圍墻,圍墻中有一個(gè)正在爬行的蛇,還在某處有一個(gè)食物?,F(xiàn)在就可以開(kāi)始游戲操作了。3. 游戲操作在游戲中,游戲者可以用上、下、左、右控制蛇的行動(dòng),按鍵可以結(jié)束游戲。4. 游戲結(jié)束若打出高分可以進(jìn)入排行榜,此時(shí)就會(huì)提示輸入名字,并將畫(huà)出的排行榜界面,顯示出前5名的游戲者的姓名和分?jǐn)?shù)。1.3 總體設(shè)計(jì) 卻東貪吃蛇游戲體系機(jī)構(gòu),給出總體的模塊結(jié)構(gòu)圖,確定程序的主要函數(shù)及之間的調(diào)用關(guān)系,同時(shí)設(shè)計(jì)蛇與游戲者等等的具體的數(shù)據(jù)結(jié)構(gòu)。1.3.1 模塊劃分 總體的結(jié)構(gòu)模塊結(jié)構(gòu)圖如下所示。主控模板 退出結(jié)束處理游戲過(guò)程畫(huà)主界面圖形驅(qū)動(dòng)動(dòng)畫(huà)音樂(lè)排行榜寫(xiě)入文件成績(jī)排行讀取記錄主控模板 主控模塊是由main函數(shù)實(shí)現(xiàn),主要用來(lái)依次調(diào)用各個(gè)下層的模塊,從而控制完成整個(gè)程序的功能。動(dòng)畫(huà)音樂(lè)模塊 讀模塊用來(lái)同步播放下雪的動(dòng)畫(huà)和簡(jiǎn)單的音樂(lè),并在屏幕的中間輸出顏色不斷變化的歡迎詞。畫(huà)主界面模塊 畫(huà)出一個(gè)封閉的墻,當(dāng)蛇貼這墻走的時(shí)候會(huì)擦掉部分的圍墻,使線(xiàn)變細(xì),圖形變得不好看,如果不是這種情況發(fā)生,可將線(xiàn)型寬度設(shè)置為1像素。游戲過(guò)程模塊 該模塊是整個(gè)程序的核心,它完成整個(gè)游戲過(guò)程,用函數(shù)來(lái)實(shí)現(xiàn),每次蛇移動(dòng)的時(shí)候,從最后一節(jié)開(kāi)始到第二節(jié),將前一節(jié)的坐標(biāo)賦給后一節(jié)的坐標(biāo),移動(dòng)后把最后的一節(jié)用背景色覆蓋,然后蛇頭按方向鍵更改位置,要確保食物出現(xiàn)在10的倍數(shù)位置上,判斷蛇是否遲到食物的是蛇頭坐標(biāo)和食物坐標(biāo)是否相同。游戲結(jié)束處理模塊 游戲結(jié)束的時(shí)候,讀取出記錄、成績(jī)排行、寫(xiě)入文件等模塊實(shí)現(xiàn)有關(guān)的處理功能。讀取記錄模塊 該模塊是由函數(shù)實(shí)現(xiàn)的,用來(lái)讀取排行榜的記錄,如果是首次讀取文件,將用另一個(gè)函數(shù),初始化記錄文件,設(shè)置多名選手,初始姓名為”null”。初始分?jǐn)?shù)為0.成績(jī)排序模塊 將最后的選手的成績(jī)加入成績(jī)排行榜中進(jìn)行排序。寫(xiě)入文字模塊 該模塊是由函數(shù)來(lái)實(shí)現(xiàn)的,即將新的排行榜信息輸入文件中。排行榜模塊 該模塊是由函數(shù)實(shí)現(xiàn)的,主要功能是建立排行榜界面,輸出多名最高分的玩家的姓名個(gè)成績(jī)。退出 顯示出排行榜后,返回函數(shù),按任意鍵關(guān)閉圖形系統(tǒng),并退出程序。1.3.2 總體數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1. 食物與蛇的數(shù)據(jù)結(jié)構(gòu) 表示食物與蛇的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)為10*10個(gè)像素單位,用X和Y坐標(biāo)表示,則矩形塊用函數(shù)畫(huà)出來(lái),由于每次出現(xiàn)一個(gè)食物,所以設(shè)定yes表示是否需要出現(xiàn)食物,yes=1表示沒(méi)有食物或者食物應(yīng)經(jīng)被吃掉,需要畫(huà)出食物。放置食物后,設(shè)置yes=0。蛇的一節(jié)身體為一個(gè)矩形塊,用坐標(biāo)來(lái)表示,由于在游戲的過(guò)程中蛇的身體不斷的增長(zhǎng),需要用數(shù)組來(lái)存放每節(jié)的坐標(biāo),利用1、2、3、4分別表示蛇的右、左、上、下的方向,life表示蛇的生命,life=0,表示蛇活著,life=1,表示蛇已經(jīng)死了,結(jié)束游戲。#define N 200struct 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;2. 排行榜中優(yōu)勝者的數(shù)據(jù)結(jié)構(gòu) 排行榜主要記錄優(yōu)勝者的姓名和成績(jī),為了存放排行榜的信息,可以定義下面的結(jié)構(gòu)體類(lèi)型,其中字符數(shù)組name成員存放優(yōu)勝者的姓名,整型變量score存放優(yōu)勝者的成績(jī)。 struct person char name20; int score; ; 其他全局變量的定義 struct person per5;int score=0;int gamespeed=400; /*控制蛇的移動(dòng)速度的變量,初始值為400ms*/4. 符號(hào)常量的宏定義#define LEFT 0x4b00 /*左移方向鍵*/#define RIGHT 0x4d00 /*右移方向鍵*/#define DOWN 0x5000 /*下移方向鍵*/#define UP 0x4800 /*上移方向鍵*/#define ESC 0x011b /*Esc方向鍵*/#include FILENAME “C:person.dat” /*保存排行榜的文件全名*/1.4 詳細(xì)設(shè)計(jì) 畫(huà)出N-S圖和流程圖來(lái)表示出每一個(gè)部分的模塊功能。1.4.1主控模塊main函數(shù) 主函數(shù)是函數(shù)的數(shù)控模塊。首先初始化圖形系統(tǒng),然后然后調(diào)用DrawSnow函數(shù)播放動(dòng)畫(huà)和音樂(lè),接著調(diào)用Init函數(shù)初始化圖形系統(tǒng),之后調(diào)用DrawK函數(shù)畫(huà)出游戲開(kāi)始畫(huà)面,再調(diào)用GamePlay函數(shù),即開(kāi)始了游戲的具體過(guò)程,游戲結(jié)束后調(diào)用EndPlay函數(shù)進(jìn)行游戲結(jié)束處理:從文件中讀取記錄信息、排序、顯示排行榜信息,最后關(guān)閉圖形系統(tǒng),結(jié)束程序。主控模塊的算法流程圖如圖所示。其中帶有兩個(gè)豎線(xiàn)的矩形框表示對(duì)自定義函數(shù)的調(diào)用。結(jié) 束游戲結(jié)束處理關(guān)閉圖形系統(tǒng)游戲具體過(guò)程畫(huà)游戲開(kāi)始界面初始化圖形系統(tǒng)播放動(dòng)畫(huà)音樂(lè)初始化圖形系統(tǒng)開(kāi) 始1.4.2繪制游戲開(kāi)始界面DrawK函數(shù) 主界面就是一個(gè)封閉的圍墻,用兩個(gè)循環(huán)語(yǔ)句分別在水平方向和垂直方向輸出連續(xù)的寬度和高度均為10個(gè)像素單位的矩形小方塊,圍城封閉圖形表示為圍墻,為了醒目,設(shè)置為淡青色,用函數(shù)setlinestyle設(shè)置線(xiàn)型寬度為3個(gè)像素。設(shè)置3個(gè)像素的圍墻,蛇在貼墻走的時(shí)候,會(huì)擦掉部分圍墻線(xiàn),使線(xiàn)變細(xì),圖形變得不好看,為了避免這種情況出現(xiàn),可將線(xiàn)型寬度設(shè)置為1個(gè)像素。最后,在界面的左上部輸出游戲程序的版本信息,在右上部輸出游戲成績(jī)(score)和關(guān)(level)的表頭。如下圖所示:開(kāi) 始設(shè) 置 前 景 色設(shè)置線(xiàn)形為實(shí)線(xiàn),3像素寬i=50i=600畫(huà)上邊圍墻的一個(gè)矩形框畫(huà)下邊為圍墻的一個(gè)矩形框i=i+10i=40iper4.score 畫(huà)出填充矩形界面輸出提示信息輸出空格建立輸入框 輸出不夠上排行榜的信息輸入游戲者的姓名成績(jī)賦值記錄按成績(jī)排序記錄寫(xiě)入排行榜文件顯示排行榜返回 該模塊首先調(diào)用讀排行榜記錄文件函數(shù)讀取排行榜文件記錄,如果文件不存在,在函數(shù)中調(diào)用另一個(gè)函數(shù)來(lái)建立文件,然后再讀出記錄。 其次,判斷游戲者的成績(jī)是否可以上排行榜。如果可上榜,則畫(huà)出淺藍(lán)色矩形界面,在界面中輸入游戲者姓名,對(duì)成績(jī)進(jìn)行賦值,然后調(diào)用CompareScore函數(shù)對(duì)記錄排序,并調(diào)用WriteFiles函數(shù)將記錄寫(xiě)入排行榜文件;如果不能上榜,則直接在游戲界面輸出不能上榜信息。 最后,調(diào)用pain_borad函數(shù)顯示排行榜信息。1.4.5顯示排行榜信息模塊pain_board函數(shù) 函數(shù)void pain_board完成排行榜的繪制流程,流程圖如圖所示。運(yùn)行結(jié)果如圖所示。開(kāi) 始讀排行榜記錄文件畫(huà)出矩形的標(biāo)題界面輸出標(biāo)題畫(huà)出排行榜界面輸出表頭的信息i=0輸出有關(guān)的信息返 回等 待 按 鍵i= i+ 11.5程序的調(diào)試與測(cè)試 調(diào)試與測(cè)試軟件的目標(biāo)就是發(fā)現(xiàn)并改正潛伏的錯(cuò)誤。一個(gè)程序,必須經(jīng)過(guò)認(rèn)真的調(diào)試和測(cè)試,才能盡量減少錯(cuò)誤、保證程序滿(mǎn)足功能、性能需求,達(dá)到最初的設(shè)計(jì)、使用要求,從而保證程序的開(kāi)發(fā)質(zhì)量。 詳細(xì)設(shè)計(jì)完成后,用C語(yǔ)言根據(jù)各個(gè)模塊的算法來(lái)設(shè)計(jì)程序,每個(gè)模塊都設(shè)計(jì)成一個(gè)自定義函數(shù)。幾個(gè)模塊放在一個(gè)構(gòu)成一個(gè)源程序文件,或者一個(gè)模塊構(gòu)成一個(gè)源程序文件。源程序設(shè)計(jì)好后,輸入到計(jì)算機(jī),并儲(chǔ)存到磁盤(pán)上;然后對(duì)每個(gè)源程序文件都進(jìn)行獨(dú)立編譯和調(diào)試;并針對(duì)不同的模塊設(shè)計(jì)測(cè)試用例進(jìn)行單元測(cè)試;最后,將幾個(gè)分別開(kāi)發(fā)的模塊組裝到一起,形成一個(gè)完整的程序,進(jìn)行集成測(cè)試,從而發(fā)現(xiàn)并改正程序中存在的一些潛藏的錯(cuò)誤,并使程序的容錯(cuò)能力大大增強(qiáng)。調(diào)試與測(cè)試過(guò)程及結(jié)果如下所述。1.5.1動(dòng)畫(huà)與音樂(lè)的同步播放 預(yù)期結(jié)果:(1)片頭在顯示動(dòng)畫(huà)的同時(shí)播放音樂(lè);(2)按任意鍵后進(jìn)入游戲主界面;(3)進(jìn)入游戲主界面后動(dòng)畫(huà)音樂(lè)同時(shí)停止。 實(shí)際運(yùn)行結(jié)果:滿(mǎn)足(1)和(2),進(jìn)入游戲后仍然播放片頭音樂(lè)。 錯(cuò)誤分析:程序中使用循環(huán)播放動(dòng)畫(huà),并在其循環(huán)體中插入發(fā)聲函數(shù)以達(dá)到音樂(lè)和動(dòng)畫(huà)的同步。由于在結(jié)束動(dòng)畫(huà)時(shí)沒(méi)有關(guān)閉揚(yáng)聲器,所以進(jìn)入游戲界面后仍然發(fā)聲。 修改:在動(dòng)畫(huà)播放完后加一條“nosound();”語(yǔ)句將揚(yáng)聲器關(guān)閉,問(wèn)題得到解決。修改后程序運(yùn)行的實(shí)際結(jié)果與預(yù)期效果一致。動(dòng)畫(huà)音樂(lè)的界面如圖所示。1.5.2蛇的運(yùn)行(1)蛇撞到墻預(yù)期效果:蛇運(yùn)行時(shí)如果撞到墻壁,則游戲結(jié)束。實(shí)際運(yùn)行效果:超出左右墻壁后程序結(jié)束,但超出上面墻壁后仍然運(yùn)行如圖所示。錯(cuò)誤分析:錯(cuò)誤程序段在蛇運(yùn)行的條件判斷語(yǔ)句中,它的判斷條件是:if(snake.x0595),即少了上、下倆個(gè)方向的判斷。修改如下:if(snake.x0595|snake.y0455)修改后的運(yùn)行效果和預(yù)期的效果一致。(2)蛇頭撞到蛇身預(yù)期結(jié)果:當(dāng)蛇的頭部和蛇身相撞的時(shí)候,游戲應(yīng)當(dāng)結(jié)束。實(shí)際運(yùn)行的效果:蛇頭撞到蛇身時(shí),程序停止了。如圖所示。修改后的代碼為:for(i=3;isnake.node;i+) if(snake.xi=snake.x0&sanke.i=snake.y0) snake.life=1;break; 1.5.3 終止程序經(jīng)過(guò)對(duì)各個(gè)模塊的調(diào)試和單元測(cè)試并修改了錯(cuò)誤以后,將各個(gè)模塊組裝成一個(gè)軟級(jí)系統(tǒng),并進(jìn)行集成測(cè)試。在集成的過(guò)程中發(fā)現(xiàn)了一些錯(cuò)誤,比如全局變量重復(fù)定義、函數(shù)重復(fù)聲明等,分別進(jìn)行了改正。最后連續(xù)運(yùn)行了5次,以便測(cè)試該游戲程序的功能、性能是否達(dá)到了預(yù)期的目標(biāo),并根據(jù)所使用的具體機(jī)器歲蛇的爬行速度進(jìn)行適當(dāng)?shù)恼{(diào)整。測(cè)試內(nèi)容包括蛇的運(yùn)行、分?jǐn)?shù)、關(guān)數(shù)、排行榜及排序、文件存儲(chǔ)、音樂(lè)動(dòng)畫(huà)等的功能,情況均正常。最后要求輸入游戲者的姓名來(lái)進(jìn)行排名。1.6 結(jié)論在我們的共同努力下,我們終于完成了貪吃蛇的游戲程序,該游戲程序?qū)崿F(xiàn)用了方向鍵控制蛇在圍墻內(nèi)的爬行、隨機(jī)產(chǎn)生食物、控制蛇吃掉食物并加分、控制游戲中闖關(guān)的數(shù)目和蛇的運(yùn)行速度、實(shí)時(shí)顯示分?jǐn)?shù)和關(guān)數(shù)、結(jié)束時(shí)處理和顯示排行榜等功能。該游戲程序具有的界面友好、操作方便、控制準(zhǔn)確和容錯(cuò)能力強(qiáng)等特點(diǎn)。但是這個(gè)貪吃蛇的游戲還有一些缺陷:1)進(jìn)入游戲后,到蛇的死亡,只能玩一次就退出游戲,應(yīng)該加入實(shí)現(xiàn)多次游戲的控制弄能。2)蛇的樣子不美觀(guān),應(yīng)將蛇頭、蛇尾和蛇身進(jìn)一步美化,使其更像真實(shí)的蛇。3)當(dāng)分?jǐn)?shù)達(dá)到一定的分?jǐn)?shù)的時(shí)候,蛇的速度變得非常的快,一下子就撞到圍墻上了,應(yīng)適當(dāng)控制蛇的速度和關(guān)數(shù),以便使游戲更具有吸引力。1.7 結(jié)束語(yǔ) 通過(guò)貪吃蛇的游戲編程的練習(xí)思考數(shù)據(jù)結(jié)構(gòu)的使用,比如定義食物的坐標(biāo)來(lái)控制它的出現(xiàn)的位置,用函數(shù)來(lái)畫(huà)出矩形,用life來(lái)表示蛇的生命,用方向鍵來(lái)表示蛇的移動(dòng)的房間等等,還有用數(shù)組來(lái)存放蛇身各節(jié)的坐標(biāo),這些都讓我們熟悉了對(duì)數(shù)組的操作,此外還熟悉了各種函數(shù)的調(diào)用。 在編程的時(shí)候我們遇到了很多的困難,這就需要我們多與別人交流。在編程的過(guò)程中,我們也發(fā)現(xiàn)了有良好的編程風(fēng)格是十分重要的,至少在時(shí)間效率上就體現(xiàn)了這一點(diǎn),養(yǎng)成良好的習(xí)慣,代碼的縮進(jìn)編排,變量的命名規(guī)則要始終保持一致。這些都是提高我們編程能力的要點(diǎn)。 還有在編程中最能體現(xiàn)簡(jiǎn)單的原則,簡(jiǎn)單的方法更容易使人被理解,更容易實(shí)現(xiàn),也更容易維護(hù)。遇到問(wèn)題是要優(yōu)先考慮解決的最簡(jiǎn)單的方案,只有簡(jiǎn)單的方案不能滿(mǎn)足要求的時(shí)候我們?cè)诳紤]用復(fù)雜的方案。 在進(jìn)行課程設(shè)計(jì)的過(guò)程中我們學(xué)到了許多別的東西。首先,我們學(xué)會(huì)了合作,要以別人的眼光看看問(wèn)題,也許這樣得到的會(huì)比各自得到的都要多;其次,我們學(xué)會(huì)了分工,分工是為了更好的合作,分工才能提高合作的效率;最后,我們學(xué)會(huì)了奮斗,我們相信,通過(guò)四年的學(xué)習(xí),我們一定能寫(xiě)出更精彩的程序,將來(lái)會(huì)描繪出更精彩的人生。 在這里,我們要感謝我們課程設(shè)計(jì)的指導(dǎo)教師張鳳君老師,給了我們悉心的指導(dǎo),是老師經(jīng)過(guò)一學(xué)期為我們上課,讓我們了解了編程和怎么樣編程,在老師的教導(dǎo)下,我們通過(guò)自己和同學(xué)的合作,我們真正的掌握了怎么樣編程以及處理一些在編程的過(guò)程中出現(xiàn)的一些問(wèn)題,我們真正的學(xué)會(huì)了這門(mén)課,在老師和同學(xué)的共同幫助下,我們完成了這項(xiàng)任務(wù)。1.8程序#include#include#include#include#include#include#include#include#define N 200#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define FILENAME c:person.datstruct person char name20; int score; ;struct person per5;struct Snow int x; int y; int speed; snow100;int snownum=0; int size;int change=10;int score=0;void *save;int i,key;int gamespeed=400;struct Food int x; int y; int yes;food;struct Snake int xN; int yN; int node; int direction; int life;snake;void DrawSnow();void ReadFiles();void WriteFiles(struct person *);void InitScoreFiles();void CompareScore(struct person);void EndPlay();void GameOver();void Pr() int s15=0,100,150,200,150,200,250,150,250,300,250,150,100,250,350; setcolor(change/10); setbkcolor(BLACK); settextstyle(0,0,4); outtextxy(20,200,GAME WORLD!); sound(schange/10);void DrawSnow() int i1,i2; int sx100; setlinestyle(SOLID_LINE,0,THICK_WIDTH); line (2,7,5,7); line (5,7,6,10); line (6,10,7,7); line (7,7,10,7); line (10,7,8,5); line (8,5,9,3); line (9,3,6,4.5); line (6,4.5,3,3); line (3,3,4,5); line (4,5,2,7); save=malloc(200); getimage(0,0,10,10,save); cleardevice(); randomize(); for(i1=0;i1100;i1+) sxi1=(i1+4)*10; setlinestyle(SOLID_LINE,0,THICK_WIDTH); line (10,1,10,10); for(i2=0;i2100;i2+) sxi2=(i2+4)*20; while(!kbhit() Pr(); if(snownum!=100) snowsnownum.speed=2+random(10); i1=random(50); snowsnownum.x=sxi1; snowsnownum.y=10-random(10); i2=random(20); snowsnownum.x=sxi2; snowsnownum.y=100-random(10); for(i=0;isnownum;i+) putimage(snowi.x,snowi.y,save,COPY_PUT); delay(50); cleardevice(); Pr(); if(snownum!=100) snownum+; setfillstyle(SOLID_FILL,4); for(i=0;i500)snowi.y=10-random(200); change+; if(change=140) change=10; nosound(); cleardevice();void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,D:tc3BGI); cleardevice();void DrawK(void) int i; setcolor(11); setbkcolor(2); setlinestyle(SOLID_LINE,0,THICK_WIDTH); for(i=50;i=600;i+=10)/*畫(huà)圍墻*/ rectangle(i,40,i+10,49); /*上邊*/ rectangle(i,451,i+10,460);/*下邊*/ for(i=40;i0;i-) snake.xi=snake.xi-1; snake.yi=snake.yi-1; 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;isnake.node;i+) if(snake.xi=snake.x0&snake.yi=snake.y0) snake.life=1; break; if(snake.x0595|snake.y0455) snake.life=1; if(snake.life=1) break; if(snake.x0=food.x&snake.y0=food.y) setcolor(0); rectangle(food.x,food.y,food.x+10,food.y-10); snake.node+; food.yes=1; score+=10; if(score%50=0) level+=1; gamespeed-=50; setcolor(57);for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10);delay(gamespeed);setcolor(0);rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); if(snake.life=1) break; key=bioskey(0); if(key=ESC) break; else if(key=UP&snake.direction!=4) 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; void ReadFiles() FILE *fpread; if(fpread=fopen(FILENAME,ab+)=NULL) printf(cant open the file person.dat!); exit(0); if(fgetc(fpread)=EOF) InitScoreFiles(); rewind(fpread); fread(per,sizeof(struct person),5,fpread); fclose(fpread);void WriteFiles(struct person *tmp) FILE *fpwrite; if(fpwrite=fopen(FILENAME,wb+)=NULL) printf(cant open the file person.dat!);exit(0); fwrite(tmp,sizeof(struct person),5,fpwrite); fclose(fpwrite);void InitScoreFiles() int i;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律風(fēng)控試題及答案
- 數(shù)學(xué)考卷測(cè)試題及答案
- 電工試題庫(kù)及答案
- 電機(jī)試驗(yàn)試題及答案
- 瀝青混合料 培訓(xùn)課件
- 樂(lè)高搬家車(chē)課件
- 產(chǎn)品技術(shù)培訓(xùn)
- 2025年中國(guó)女性塑性衣行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 早教市場(chǎng)培訓(xùn)
- 《數(shù)智時(shí)代下的供應(yīng)鏈管理:理論與實(shí)踐》課件 第六章 供應(yīng)鏈采購(gòu)管理
- GB/T 28728-2012溶液聚合苯乙烯-丁二烯橡膠(SSBR)微觀(guān)結(jié)構(gòu)的測(cè)定
- 小學(xué)《科學(xué)》期末測(cè)評(píng)方案
- GB 18613-2006中小型三相異步電動(dòng)機(jī)能效限定值及能效等級(jí)
- 2023年湘西市(中小學(xué)、幼兒園)教師招聘筆試題庫(kù)及答案解析
- 公司企業(yè)實(shí)習(xí)鑒定表格
- 鎖骨下動(dòng)脈竊血綜合征 (2)PPT
- 大學(xué)畢業(yè)生離校退宿申請(qǐng)表模板
- 大班社會(huì)《愛(ài)發(fā)脾氣的菲菲》課件
- 【海外華文文學(xué)】期末考試復(fù)習(xí)提綱
- 化工進(jìn)展稿件編輯、排版體例格式
- 美麗鄉(xiāng)村片區(qū)內(nèi)監(jiān)理規(guī)劃范本
評(píng)論
0/150
提交評(píng)論