版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢 業(yè) 設(shè) 計</b></p><p> 設(shè)計題目:貪吃蛇游戲</p><p> 系 別:____________________________</p><p> 班 級:____________________________</p><p> 班
2、 級:____________________________</p><p> 指 導(dǎo) 教 師:____________________________</p><p> 2006年6月9 日</p><p><b> 貪吃蛇游戲</b></p><p><b> 摘 要</b>
3、;</p><p> 貪吃蛇游戲是一個深受人們喜愛的游戲,它能夠讓你在忙碌的工作中放松一下自己,游戲貪吃蛇就是在屏幕上畫出蛇,同時隨機地給出食物。游戲者通過鍵盤操作控制貪吃蛇的移動,去吃食物,吃到后食物消失,然后再隨機給出食物同時蛇的身體增長。撞到墻壁或身體交叉蛇頭撞到自己的身體,則游戲結(jié)束。</p><p> 這個程序關(guān)鍵點是表示蛇的圖形以及蛇的移動。用一個小矩形塊表示蛇的一節(jié)身體,
4、身體每長一節(jié),增加一個矩形塊,蛇頭用兩節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當前方向上前移,當游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實現(xiàn)是從蛇頭的新位置開始畫出蛇,這時,由于沒有清屏的原因,原來蛇的位置差一個單位,所以看起來蛇會多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆
5、蓋。食物的出現(xiàn)和消失也是畫矩形塊和覆蓋矩形塊。</p><p> 本程序?qū)崿F(xiàn)的主要技巧在二維數(shù)組的應(yīng)用上。編寫此游戲掌握了用C語言知識的了解,通過這次畢業(yè)設(shè)計,提高了我們的編程的水平。</p><p><b> 關(guān)鍵詞:食物和蛇</b></p><p> Tanchishe game </p><p><b&
6、gt; Abstract</b></p><p> Tanchishe game is a very popular game is that it can allow you to relax at work in a busy themselves in the game Tanchiyi screen is painted snake while random to give food. T
7、anchiyi operational control of the game through keyboard movement, eat food, after eating food disappeared, and then randomly given food and snake physical growth. Hit the walls or physical cross-snake hit their physical
8、, the game ended.</p><p> The key point is that the procedures of the snake and the snake mobile graphics. Using a small rectangle pieces that snake section body, the body of each long section, add a rectan
9、gle pieces, with two sections that snakeheads. Movement must start from the snake, the snake can not be contrary to the direction of movement that is capable not for snakeheads. If we do not by any keys, snakes themselve
10、s in the current direction of everything, when those games by an effective direction keys, snake hea</p><p> The main achievement of this procedure in two-dimensional array of techniques applied. Prepared t
11、his game mastered by C language knowledge understanding, through this graduation design and improve our programming level.</p><p> Key words: Food and snakes</p><p><b> 目 錄</b>
12、</p><p><b> 1 引言1</b></p><p> 1.1游戲的發(fā)展歷史1</p><p> 1.2游戲的特點1</p><p> 2 C語言的簡介2</p><p> 2.1 C語言的發(fā)展及背景2</p><p> 2.2 C語言的功能
13、及特點2</p><p> 2.3 系統(tǒng)的開發(fā)環(huán)境2</p><p> 2.3.1 Turbo C 的產(chǎn)生與發(fā)展2</p><p> 2.3.2 Turbo C 2.0基本配置要求3</p><p> 2.3.3 Turbo C 2.0內(nèi)容簡介3</p><p> 2.3.4 Turbo c2.0的
14、界面4</p><p> 2.3.5 Turbro的特點4</p><p><b> 3游戲分析5</b></p><p> 3.1 游戲的可行性分析5</p><p> 3.1.1技術(shù)上的可行性5</p><p> 3.1.2運行上的可行性5</p><
15、p> 3.2 需求分析5</p><p><b> 4 游戲設(shè)計6</b></p><p> 4.1游戲設(shè)計的思想6</p><p> 4.2游戲功能設(shè)計6</p><p> 4.3游戲設(shè)計方案6</p><p> 4.3.1總體設(shè)計方案6</p>&l
16、t;p> 4.3.2蛇和食物的設(shè)計方案7</p><p> 4.4游戲流程圖8</p><p><b> 5 個人設(shè)計9</b></p><p> 5.1游戲具體過程函數(shù)GamePlay()9</p><p> 5.1游戲具體過程界面10</p><p> 5.3程序分
17、析10</p><p><b> 6 結(jié)論14</b></p><p><b> 7謝辭14</b></p><p><b> 8參考文獻15</b></p><p><b> 9附錄16</b></p><p>
18、<b> 10外文資料27</b></p><p><b> 1 引言</b></p><p> 1.1游戲的發(fā)展歷史</p><p> 電腦游戲的誕生幾乎是伴隨著電腦的產(chǎn)生就開始了。早在60年代人們還在使用最原始的大型計算機的時候,就有一小部分的程序員在開始開發(fā)一些小的游戲,只不過在當時,人們卻把他們看成是在做
19、有關(guān)計算機方面的研究而已。由于當時硬件和軟件條件方面的限制,這些游戲只能為一些比較高層的計算機相關(guān)人員所知曉。</p><p> 到了1981年,也就是IBM公司推出了自己的第一款PC機之后,計算機開始進入了人們的日常生活當中。在最近的一二十年里,計算機硬件和軟件都得到了前所未有的發(fā)展,出現(xiàn)了一些好的游戲開發(fā)平臺,人們可以簡單快捷地進行游戲開發(fā),32位操作系統(tǒng),高速處理器等硬件的出現(xiàn),也使游戲設(shè)計者不用因顧及一
20、些其他的因素而不能盡情地投入到游戲開發(fā)之中。</p><p> 到了信息時代的今天,各國都在大力加強自己的軟件實力。計算機游戲也成為了眾多軟件開發(fā)廠商的戰(zhàn)略計劃之一。</p><p><b> 1.2游戲的特點</b></p><p> 游戲作為當前比較流行的一種娛樂方式,它和其他方式相比,有自身的特點所在。當然,當前來看,其他傳統(tǒng)的娛樂
21、方式,比如說:電影,電視,廣播等都是不錯的選擇,但是這些方式已經(jīng)越來越不能夠滿足人們娛樂的高要求。和游戲相比起來,這些傳統(tǒng)的娛樂方式是單方向的,作為觀眾或者是聽眾的我們只能是簡單的接受。如同我們平常所說的通信方式一樣,它只實現(xiàn)了單工,而不能進行全雙工通信。也就是說,我們只能一味的接收已經(jīng)是別人做好的信息,而不能充分發(fā)揮自己的才智。我們只能選擇用耳朵聽,用眼睛看。但是游戲不同,我們在看,在聽的同時,我們還可以自己動手,在游戲的過程中,玩家
22、可以充分發(fā)揮自身的聰敏才智,毫無顧及的施展自己的才華。我們在派遣自己的部隊去攻打敵人的時候,我們需要考慮諸多方面的因素來想辦法贏得戰(zhàn)斗的勝利,我們可以根據(jù)自己的勢力來選擇是進攻還是防守。</p><p><b> 2 C語言的簡介</b></p><p> 2.1 C語言的發(fā)展及背景</p><p> C 語言是介于匯編語言和高級語言之間
23、的語言,屬于高級語言; 是集匯編語言和高級語言的優(yōu)點于一身的程序設(shè)計語言。它的前身是“ALGOL”。其創(chuàng)始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它只能用于UNIX系統(tǒng)上。然而隨著科學(xué)技術(shù)的進步,計算機工業(yè)的發(fā)展,C語言逐漸脫離UNIX。1987年美國標準化協(xié)會制定了C語言的國際標準,簡稱“ANSI C”,從此以后它便成為一種廣泛使用的程序語言。它兼?zhèn)涓呒壵Z言與
24、低級語言的優(yōu)點,屬于一種中間語言;是一種結(jié)構(gòu)化程序設(shè)計語言,非常適合結(jié)構(gòu)化程序設(shè)計;有較豐富的數(shù)據(jù)類型、運算符以及函數(shù)供以選用;直接與內(nèi)存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。C語言以它的功能豐富、表達能力強、使用靈活、應(yīng)用面廣、目標程序效序高、可移植性好、能對硬件直接進行操作等優(yōu)點愈來愈贏得人們的表睞。</p><p> 2.2 C語言的功能及特點</p><p> 近年
25、來,C語言無論在國內(nèi)還是在國外都得到迅速的推廣應(yīng)用。語言簡潔、緊湊,使用方便、靈活。運算符豐富。靈活使用各種運算符可以實現(xiàn)在其他高級語言中難以實現(xiàn)的運算。數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu)。C的數(shù)據(jù)類型有整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。具有結(jié)構(gòu)化的控制語句(如if…else語句、while語句、do…while語句、switch語句、for語句)。用函數(shù)作為程序的模塊單位,便于實現(xiàn)程序的模塊化。
26、C是理想的結(jié)構(gòu)化語言,符合現(xiàn)代編程風(fēng)格的要求。語法限制不太嚴格,程序設(shè)計自由度大。例如對數(shù)組下標越界不做檢查,由程序編寫者自己保證程序的正確。對變量的類型使用比較靈活,例如整型量與字符型數(shù)據(jù)以及邏輯型數(shù)據(jù)可以通用。C語言允許直接訪問物理地址,能進行位(bit)操作,能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進行操作。因此,C既具有高級語言的功能,又具有低級語言的許多功能,可用來寫系統(tǒng)軟件。C語言的這種雙重性,使它既是成功的系統(tǒng)描述語言,
27、又是通用的程序設(shè)計語言。生成的目標代碼質(zhì)量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標代碼效率低10%一20%。(</p><p> 2.3 系統(tǒng)的開發(fā)環(huán)境</p><p> 2.3.1 Turbo C 的產(chǎn)生與發(fā)展 </p><p> Turbo C 是美國Borland 公司的產(chǎn)品,Borland公司是一家專門從事軟件開發(fā)、研制的大公司。該公司相繼推出了
28、一套 Turbo系列軟件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 這些軟件很受用戶歡迎。該公司在1987年首次推出Turbo C 1.0 產(chǎn)品, 其中使用了全然一新的集成開發(fā)環(huán)境, 即使用了一系列下拉式菜單, 將文本編輯、程序編譯、連接以及程序運行一體化, 大大方便了程序的開發(fā)。1988 年, Borland 公司又推出Turbo C1.5版本, 增加了圖形庫和文本窗
29、口函數(shù)庫等, 而 Turbo C 2.0 則是該公司1989年出版的。Turbo C2.0在原來集成開發(fā)環(huán)境的基礎(chǔ)上 增加了查錯功能, 并可以在Tiny模式下直接生成.COM (數(shù)據(jù)、代碼、堆棧處在同一 64K 內(nèi)存中) 文件。還可對數(shù)學(xué)協(xié)處理器 (支持8087/80287/80387等)進行仿真。 Borland 公司后來又推出了面向?qū)ο蟮某绦蜍浖黅urbo C++, 它繼承發(fā)展 Tu
30、rbo C 2.0 的集成開發(fā)環(huán)境, 并包含了面</p><p> 2.3.2 Turbo C 2.0基本配置要求 </p><p> Turbo C 2.0可運行于IBM-PC系列微機, 包括XT, AT及IBM 兼容機。 此時要求 DOS 2.0或更高版本支持, 并至少需要448K的RAM, 可在任何彩、單色80列監(jiān)視器上 運行。支持數(shù)學(xué)協(xié)處理器芯片, 也可進行浮點仿真, 這將加快
31、程序的執(zhí)行。 </p><p> 2.3.3 Turbo C 2.0內(nèi)容簡介 </p><p> Turbo C 2.0有六張低密軟盤(或兩張高密軟盤)。下面對Turbo C 2.0的主要文 件作一簡單介紹: INSTALL.EXE 安裝程序文件
32、TC.EXE 集成編譯 TCINST.EXE 集成開發(fā)環(huán)境的配置設(shè)置程序 TCHELP.TCH 幫助文件
33、 THELP.COM 讀取TCHELP.TCH的駐留程序 README 關(guān)于Turbo C的信息文件 TCCONFIG.EXE 配置文件轉(zhuǎn)換程序
34、 MAKE.EXE 項目管理工具 TCC.EXE 命令行編譯 TLINK.EXE
35、 Turbo C系列連接器 TLIB.EXE Turbo C系列庫管理工具 C0?.OBJ 不同模式啟動代碼 C?.
36、LIB 不同模式運行庫 GRAPHICS.LIB 圖形庫 EMU.LIB </p><p> 2.3.4 Turbo c2.0的界面</p><p&
37、gt; 2.3.5 Turbro的特點</p><p> C語言系統(tǒng)很多,有些新系統(tǒng)的功能更強大。但TURBO C環(huán)境有許多特點,在基本的C程序設(shè)計課程教學(xué)中被廣泛使用。本系統(tǒng)既簡單又功能完整,開始使用需要理解的概念少,容易入門,特別適合初學(xué)者。TURBO C系統(tǒng)對計算機要求低,在任何微機上都能很好運行,編譯加工速度快,對于做程序練習(xí)和一般的程序開發(fā)都很合適。另外,TURBO C的編程和調(diào)試環(huán)境也很完整,反映
38、了集成化開發(fā)環(huán)境的特點。掌握了這個程序開發(fā)工具的使用方法,不但掌握了一個實用的程序開發(fā)工具,也能為進一步學(xué)習(xí)使用其他編程工具打下很好的基礎(chǔ)。</p><p><b> 3游戲分析</b></p><p> 3.1 游戲的可行性分析</p><p> 可行性分析(Feasibility Analysis)也稱為可行性研究,是在系統(tǒng)調(diào)查的基礎(chǔ)
39、上,針對新系統(tǒng)的開發(fā)是否具備必要性和可能性,對新系統(tǒng)的開發(fā)從技術(shù)、經(jīng)濟、社會的方面進行分析和研究,以避免投資失誤,保證新系統(tǒng)的開發(fā)成功??尚行匝芯康哪康木褪怯米钚〉拇鷥r在盡可能短的時間內(nèi)確定問題是否能夠解決。該系統(tǒng)的可行性分析包括以下幾個方面的內(nèi)容。</p><p> 3.1.1技術(shù)上的可行性</p><p> 技術(shù)上的可行性分析主要分析技術(shù)條件能否順利完成開發(fā)工作,硬、軟件能否滿足開
40、發(fā)者的需要等。我們所設(shè)計的貪吃蛇游戲,是以C語言作為本系統(tǒng)的開發(fā)工具,大量運用C語言中的圖形庫函數(shù)完成建圖的過程以及算法的演示過程。它兼?zhèn)涓呒壵Z言與低級語言的優(yōu)點,屬于一種中間語言。它是面向結(jié)構(gòu)化程序設(shè)計的語言,具有結(jié)構(gòu)化的控制語句,以函數(shù)作為程序模塊以實現(xiàn)程序的模塊化,非常適合結(jié)構(gòu)化程序設(shè)計。它有較豐富的數(shù)據(jù)類型、運算符以及函數(shù)供以選用。它直接與內(nèi)存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。它保證了代碼的模塊化要求,而代碼模塊
41、化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。</p><p> 綜上所述,本系統(tǒng)的設(shè)計與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。</p><p> 3.1.2運行上的可行性</p><p> 本系統(tǒng)為一個小型的貪吃蛇游戲,所耗費的資源非常的小,學(xué)校的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。</p&
42、gt;<p><b> 3.2 需求分析</b></p><p> 本程序為貪吃蛇游戲,想必大家都玩過這個游戲,程序源代碼用TC2.0編譯通過,需要圖形驅(qū)動文件的支持,在TC2.0的集成環(huán)境中有.</p><p> 本程序利用數(shù)據(jù)結(jié)構(gòu)中的鏈表,來將蛇身連接,同時當蛇每吃到一個食物,及身體就會增長一節(jié),程序會時刻將一些信息顯示在屏幕上,包括所得分數(shù),
43、要吃的食物.另外,此游戲可能與CPU的速度有關(guān)系.</p><p> 游戲有良好的人機界面,我們還可以自己動手,在游戲的過程中,玩家可以充分發(fā)揮自身的聰敏才智,毫無顧及的施展自己的才華。 </p><p><b> 4 游戲設(shè)計</b></p><p> 4.1游戲設(shè)計的思想</p><p> 知識要點: (
44、1)數(shù)組元素為結(jié)構(gòu)體的數(shù)組應(yīng)用。</p><p> ?。?)全局變量應(yīng)用。</p><p><b> ?。?)按鍵的處理。</b></p><p> ?。?)數(shù)組元素與蛇、食物的對應(yīng)關(guān)系。</p><p><b> ?。?)圖形方式。</b></p><p> 采用現(xiàn)有的資
45、源,先進的游戲開發(fā)方案,充分利用學(xué)?,F(xiàn)有的資源,減少開發(fā)中的時間和財力、物力,提高游戲開發(fā)的水平和應(yīng)用效果。</p><p> 游戲要滿足用戶的需求,它作為當前比較流行的一種娛樂方式,它和其他方式相比,有自身的特點所在。</p><p> 本程序?qū)崿F(xiàn)的主要技巧在二維數(shù)組的應(yīng)用上。編寫此游戲掌握了用C語言編程的技巧,通過游戲程序增加編程的興趣,提高學(xué)生編程的水平。同時,也為忙碌工作的人們
46、提供了休閑娛樂的空間。</p><p><b> 4.2游戲功能設(shè)計</b></p><p> 游戲界面要清晰美觀,一個矩形區(qū)作為游戲區(qū)域,在矩形區(qū)中有食物和貪吃蛇。貪吃蛇用小方塊表示,開始的時候蛇有2節(jié),每吃到食物一次蛇身加長一節(jié),蛇身最長可以達到200節(jié)。食物也是用一個小方塊表示,并且每次食物的位置是隨機出現(xiàn)的。游戲中使貪吃蛇盡可能的長,但不能使貪吃蛇撞到四周
47、的墻壁,而且蛇的身體不能撞到一起,否則游戲結(jié)束。</p><p><b> 4.3游戲設(shè)計方案</b></p><p> 4.3.1總體設(shè)計方案</p><p> 游戲貪吃蛇就是在屏幕上畫出蛇,同時隨機地給出食物。游戲者通過鍵盤操作控制貪吃蛇的移動,去吃食物,吃到后食物消失,然后再隨機給出食物同時蛇的身體增長。畫蛇的原理就是利用人眼的視覺
48、效應(yīng)先將蛇頭向前移動一格,然后所有蛇身依次向前移動一格,最后用背景色覆蓋。這樣在人眼看來好像蛇在向前移動。食物的給出,首先需要產(chǎn)生一個隨機數(shù),然后通過這個隨機數(shù)計算得到食物的橫縱坐標,在屏上顯示出來。控制蛇的移動方向,然后根據(jù)按鍵改變蛇的移動方向。</p><p> 4.3.2蛇和食物的設(shè)計方案</p><p> 用一個小矩形塊表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用兩節(jié)
49、表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,也就是蛇尾不能改作蛇頭。表示食物和蛇的矩形塊都設(shè)計為10*10個像素單位,食物的基本數(shù)據(jù)域為它所出現(xiàn)的位置,用x和y坐標表示,則矩形塊用函數(shù)rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)畫出。由于每次只出現(xiàn)一個食物,而食物被吃掉后,才出現(xiàn)下一個食物,所以設(shè)定yes表示是否要出現(xiàn)食物的變量。蛇的一節(jié)身體為一個矩形塊,這樣表示每個矩形
50、塊只需起點坐標x和y。身體是不斷增長的,所以用數(shù)組存放每一節(jié)的坐標,最大設(shè)定為N=200,node表示當前節(jié)數(shù)。另外還需要保存蛇移動方向的變量direction和表示生命的變量life,一但life為1,則蛇死,游戲結(jié)束。所以程序功能的實現(xiàn)就是數(shù)組的操作。</p><p> #define N 200</p><p> struct Food</p><p>
51、<b> {</b></p><p> int x; /*食物的橫坐標*/</p><p> int y; /*食物的縱坐標*/</p><p> int yes;/*判斷是否要出現(xiàn)食物的變量*/</p><p> }food;/*食物的結(jié)構(gòu)體*/</p><p> struct
52、snake</p><p><b> {</b></p><p><b> int x [N]</b></p><p><b> int y [N]</b></p><p> int node; /*蛇的節(jié)數(shù)*/</p><p> int di
53、rection; /*蛇移動方向*/</p><p> int life; /*蛇的生命,0活著,1死亡*/</p><p><b> }snake;</b></p><p><b> 4.4游戲流程圖</b></p><p><b> 5 個人設(shè)計</b></p
54、><p> 5.1游戲具體過程函數(shù)GamePlay()</p><p> 這個函數(shù)是游戲的主要部分,難點在表示蛇的新位置并消除前一次的圖形。采用的方法是每次移動的時候從最后一節(jié)開始到倒數(shù)第二節(jié)(因蛇頭為兩節(jié)),將前一節(jié)的坐標賦值給后一節(jié)的坐標,移動后只要把最后一節(jié)用背景色去除即可,因為新位置0到n-1節(jié)還是要出現(xiàn)在畫面上的。然后蛇頭按照方向鍵來更改位置。</p><p&
55、gt; 另外,食物的隨機出現(xiàn)要確保它的位置在10的倍數(shù)位置上,因為蛇的坐標都是以10為模的,這樣的話就可以讓蛇吃到,蛇吃到食物的判斷是蛇頭的坐標和食物的坐標相等。</p><p><b> 其算法過程為:</b></p><p> ?。?)設(shè)置初始值。為防止食物出現(xiàn)在一個位置上,要設(shè)置隨機數(shù)發(fā)生器,真正產(chǎn)生隨機數(shù)。初始時,蛇只有蛇頭,設(shè)定一個開始的方向。</
56、p><p> ?。?)循環(huán)執(zhí)行,直到按Esc鍵退出。</p><p> 1)沒有按鍵的情況下,循環(huán)執(zhí)行。</p><p> 如果沒有食物,隨機出現(xiàn)食物。如果有食物,則顯示食物。蛇移動身體,根據(jù)蛇的方向改變坐標值,并判斷蛇是否撞到自己吃了自己,如果出現(xiàn)這兩種情況之一,則蛇死,調(diào)用游戲結(jié)束函數(shù),結(jié)束本次游戲,重新開始。</p><p> 如果蛇
57、吃到了食物,蛇的身體長一節(jié),數(shù)組元素增加一個,身體節(jié)數(shù)、分數(shù)都進行相應(yīng)的改變。 </p><p><b> 在新位置畫出蛇。</b></p><p> 2)如果有按鍵,則識別鍵值。如果按鍵為Esc鍵則結(jié)束游戲。程序運行結(jié)束;如果所按鍵為方向鍵。則根據(jù)該鍵改變代表蛇方向的變量direction的值,要考慮相反方向鍵無效。</p><p>
58、5.1游戲具體過程界面</p><p><b> 5.3程序分析</b></p><p> /*玩游戲具體過程*/</p><p> void GamePlay(void)</p><p><b> {</b></p><p> randomize();/*隨機數(shù)發(fā)
59、生器*/</p><p> food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/</p><p> snake.life=0;/*活著*/</p><p> snake.direction=1;/*方向往右*/</p><p> snake.x[0]=100;snake.y[0]=100;/*蛇頭*/</p&g
60、t;<p> snake.x[1]=110;snake.y[1]=100;</p><p> snake.node=2;/*節(jié)數(shù)*/</p><p> PrScore();/*輸出得分*/</p><p> while(1)/*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/</p><p><b> {</b>
61、;</p><p> while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/</p><p><b> {</b></p><p> if(food.yes==1)/*需要出現(xiàn)新食物*/</p><p><b> {</b></p><p> fo
62、od.x=rand()%400+60;</p><p> food.y=rand()%350+60;</p><p> while(food.x%10!=0)/*食物隨機出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/</p><p><b> food.x++;</b></p><p> while(foo
63、d.y%10!=0)</p><p><b> food.y++;</b></p><p> food.yes=0;/*畫面上有食物了*/</p><p><b> }</b></p><p> if(food.yes==0)/*畫面上有食物了就要顯示*/</p><p&
64、gt;<b> {</b></p><p> setcolor(GREEN);</p><p> rectangle(food.x,food.y,food.x+10,food.y-10);</p><p><b> }</b></p><p> for(i=snake.node-1;i&g
65、t;0;i--)/*蛇的每個環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/</p><p><b> {</b></p><p> snake.x[i]=snake.x[i-1];</p><p> snake.y[i]=snake.y[i-1];</p><p><b> }</b></p
66、><p> /*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/</p><p> switch(snake.direction)</p><p><b> {</b></p><p> case 1:snake.x[0]+=10;break;</p><p> case
67、 2: snake.x[0]-=10;break;</p><p> case 3: snake.y[0]-=10;break;</p><p> case 4: snake.y[0]+=10;break;</p><p><b> }</b></p><p> for(i=3;i<snake.node;i
68、++)/*從蛇的第四節(jié)開始判斷是否撞到自己了,因為蛇頭為兩節(jié),第三節(jié)不可能拐過來*/</p><p><b> {</b></p><p> if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])</p><p><b> {</b></p>
69、<p> GameOver();/*顯示失敗*/</p><p> snake.life=1;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p&g
70、t; if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||</p><p> snake.y[0]>455)/*蛇是否撞到墻壁*/</p><p><b> {</b></p><p> GameOver();/*本次游戲結(jié)束*/</p><p&g
71、t; snake.life=1; /*蛇死*/</p><p><b> }</b></p><p> if(snake.life==1)/*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始*/</p><p><b> break;</b></p><p> if(snake.x[0]=
72、=food.x&&snake.y[0]==food.y)/*吃到食物以后*/</p><p><b> {</b></p><p> setcolor(0);/*把畫面上的食物東西去掉*/</p><p> rectangle(food.x,food.y,food.x+10,food.y-10);</p>&
73、lt;p> snake.x[snake.node]=-20;snake.y[snake.node]=-20;</p><p> /*新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置*/</p><p> snake.node++;/*蛇的身體長一節(jié)*/</p><p> food.yes=1;/*畫面上需要出現(xiàn)新的食物*/</p>&
74、lt;p> score+=10;</p><p> PrScore();/*輸出新得分*/</p><p><b> }</b></p><p> setcolor(4);/*畫出蛇*/</p><p> for(i=0;i<snake.node;i++)</p><p>
75、 rectangle(snake.x[i],snake.y[i],snake.x[i]+10,</p><p> snake.y[i]-10);</p><p> delay(gamespeed);</p><p> setcolor(0);/*用黑色去除蛇的的最后一節(jié)*/</p><p> rectangle(snake.x[sna
76、ke.node-1],snake.y[snake.node-1],</p><p> snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);</p><p> } /*endwhile(!kbhit)*/</p><p> if(snake.life==1)/*如果蛇死就跳出循環(huán)*/</p>&l
77、t;p><b> break;</b></p><p> key=bioskey(0);/*接收按鍵*/</p><p> if(key==ESC)/*按ESC鍵退出*/</p><p><b> break;</b></p><p><b> else</b>
78、</p><p> if(key==UP&&snake.direction!=4)</p><p> /*判斷是否往相反的方向移動*/</p><p> snake.direction=3;</p><p><b> else</b></p><p> if(key==R
79、IGHT&&snake.direction!=2)</p><p> snake.direction=1;</p><p><b> else</b></p><p> if(key==LEFT&&snake.direction!=1)</p><p> snake.directi
80、on=2;</p><p><b> else</b></p><p> if(key==DOWN&&snake.direction!=3)</p><p> snake.direction=4;</p><p> }/*endwhile(1)*/</p><p><
81、b> }</b></p><p><b> 6 結(jié)論</b></p><p> 這次畢業(yè)設(shè)計讓我們不僅掌握語言規(guī)范,而且能夠解決實際問題,掌握程序設(shè)計的思想、方法和算法。當我們遇到新問題或使用其他語言編寫程序時能很快適應(yīng),因為我們所掌握的是編程能力而不是單純的語言。 </p><p><b> 7謝辭<
82、;/b></p><p> 畢業(yè)設(shè)計是對我大學(xué)生活的總結(jié),因而投入了極大的熱情和很高的積極性,更幸得導(dǎo)師李建茹老師的精心指導(dǎo)。其嚴以律己、寬以待人的崇高風(fēng)范,樸實無華、平易近人的人格魅力,讓我們感到溫暖!使得設(shè)計能順利完成,圓滿結(jié)束了我的大學(xué)生活。</p><p> 衷心感謝我的導(dǎo)師李建茹老師在校來對我的指導(dǎo)和教誨。您開闊的思維、敏銳的洞察力一直給我很大的啟發(fā)。唯一的遺憾是自己不
83、夠主動,錯過了許多與您交流的機會。是您深深感染了我求知的熱情,更讓我知道學(xué)問應(yīng)當具有現(xiàn)實意義,在生活的每一個轉(zhuǎn)折點,你的鼓勵和關(guān)心,一直讓我感動。</p><p> 謝謝同窗們一直以來給我的信任和無微不至的關(guān)心。我會一直銘刻于心。</p><p> 文中的許多資料、觀點得益于項目組整個團隊的努力和交流。因此特別要感謝全體成員,沒有他們,就沒有這篇論文;特別是張麗娜,謝謝你把我?guī)нM這個有
84、趣而又激動人心的項目;謝謝你,給以我無私的幫助。</p><p> 寫作期間還得到了師弟師妹的幫助和支持。在此一并表示謝意。</p><p> 感謝李老師和我們整組的同學(xué)們。在畢業(yè)設(shè)計期間雖然辛苦,但是快樂。</p><p> 作為一段生活的回顧,還要感謝同寢的好朋友,謝謝你們陪我走過這樣的一段青蔥歲月。謝謝你們一路給我的支持和幫助。</p>&
85、lt;p> 最后,要感謝我的爸爸媽媽。我永遠不會忘記你們的良苦用心。而在最落魄的日子里,正是父母的親切鼓勵,讓自己能夠堅強前行。</p><p> “長風(fēng)破浪會有時,直掛云帆濟滄海?!边@是我少年時最喜歡的詩句。就用這話作為一個結(jié)尾,也是一段生活的結(jié)束。希望自己能夠記取少年時的夢想,永不放棄。</p><p> 最后感謝所有支持我鼓勵我的老師和同學(xué),希望你們一路走好!</
86、p><p><b> 8參考文獻</b></p><p> [1] 譚浩強,張基溫,唐永炎編著《C語言程序設(shè)計教程》第二版 北京 高等教育出版社 1998.7</p><p> [2] 郭翠英等編著《C語言程序設(shè)計案例精編》 北京 中國水利水電出版社 2004.3</p><p> [3] 譚浩強等編著《C語言程
87、序設(shè)計題解與上機指導(dǎo)》 北京 清華大學(xué)出版社 2000.11</p><p> [4] 譚浩強編著《C程序設(shè)計》第三版 北京 清華大學(xué)出版社, 2006,3 </p><p> [5] [美] Stephen G.Kochan 著《C語言程序設(shè)計》(英文版·第3版) 北京 人民郵電出版社 2006.5</p><p> [6] 楊旭 張曉
88、蕾 蔣凌云 魏雪英 王浩軒編著《C語言程序設(shè)計案例教程》 北京 人民郵電出版社 2005.1</p><p> [7](美)Brian W.Kernighan,Dennis M.Ritchie著 《C程序設(shè)計語言》(第2版·新版) 北京 機械工業(yè)出版社 2004.1</p><p> [8]呂鳳翥著 《C語言程序設(shè)計》 北京 清華大學(xué)出版社 2006.5<
89、/p><p> [9]嚴蔚敏著 《數(shù)據(jù)結(jié)構(gòu)題集》 (c語言版) 北京 清華大學(xué)出版社 2005.1</p><p> [10]申在明 劉巖編著 《C語言程序設(shè)計600例》 北京 人民郵電出版社 1990</p><p><b> 9附錄</b></p><p><b> C語言圖形函數(shù)</
90、b></p><p> Turbo C提供了非常豐富的圖形函數(shù), 所有圖形函數(shù)的原型均在graphics. h</p><p> 中, 本節(jié)主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖</p><p> 形窗口以及圖形模式下的文本輸出等函數(shù)。另外, 使用圖形函數(shù)時要確保有顯示</p><p> 器圖形驅(qū)動程序*
91、BGI, 同時將集成開發(fā)環(huán)境Options/Linker中的Graphics lib選</p><p> 為on, 只有這樣才能保證正確使用圖形函數(shù)。</p><p> 1. 圖形模式的初始化</p><p> 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器, 在不同</p><p> 模式下也有不同分辨率。因此, 在屏幕
92、作圖之前, 必須根據(jù)顯示器適配器種類將</p><p> 顯示器設(shè)置成為某種圖形模式, 在未設(shè)置圖形模式之前, 微機系統(tǒng)默認屏幕為文</p><p> 本模式(80列, 25行字符模式), 此時所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形</p><p> 模式, 可用下列圖形初始化函數(shù):</p><p> void far initgra
93、ph(int far *gdriver, int far *gmode, char *path);其中g(shù)driver和gmode分別表示圖形驅(qū)動器和模式, path是指圖形驅(qū)動程序所在的目錄路徑。有關(guān)圖形驅(qū)動器、圖形模式的符號常數(shù)及對應(yīng)的分辨率見表2。圖形驅(qū)動程序由Turbo C出版商提供, 文件擴展名為.BGI。根據(jù)不同的圖形適配器有不同的圖形驅(qū)動程序。例如對于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動程序</p><
94、p> EGAVGA.BGI。</p><p> 表2. 圖形驅(qū)動器、模式的符號常數(shù)及數(shù)值</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> 圖形驅(qū)動器(gdriver) 圖形模式(gmode)</p><p> ─────────── ────
95、─────── 色調(diào) 分辨率</p><p> 符號常數(shù) 數(shù)值 符號常數(shù) 數(shù)值</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> CGA 1 CGAC0 0 C0 320*200&
96、lt;/p><p> CGAC1 1 C1 320*200</p><p> CGAC2 2 C2 320*200</p><p> CGAC3 3 C3 320*200</p><p> CGAHI
97、 4 2色 640*200</p><p> ───────────────────────────────────</p><p> MCGA 2 MCGAC0 0 C0 320*200</p><p> MCGAC1 1
98、 C1 320*200</p><p> MCGAC2 2 C2 320*200</p><p> MCGAC3 3 C3 320*200</p><p> MCGAMED 4 2色 640*200</p><p>
99、 MCGAHI 5 2色 640*480</p><p> ───────────────────────────────────</p><p> EGA 3 EGALO 0 16色 640*200</p><p> EGAHI
100、 1 16色 640*350</p><p> ───────────────────────────────────</p><p> EGA64 4 EGA64LO 0 16色 640*200</p><p> EGA64HI 1
101、 4色 640*350</p><p> ───────────────────────────────────</p><p> EGAMON 5 EGAMONHI 0 2色 640*350</p><p> ───────────────────────────────────</
102、p><p> IBM8514 6 IBM8514LO 0 256色 640*480</p><p> IBM8514HI 1 256色 1024*768</p><p> ───────────────────────────────────</p><p&g
103、t; HERC 7 HERCMONOHI 0 2色 720*348</p><p> ───────────────────────────────────</p><p> ATT400 8 ATT400C0 0 C0 320*200</p
104、><p> ATT400C1 1 C1 320*200</p><p> ATT400C2 2 C2 320*200</p><p> ATT400C3 3 C3 320*200</p><p> ATT400MED 4
105、 2色 320*200</p><p> ATT400HI 5 2色 320*200</p><p> ───────────────────────────────────</p><p> VGA 9 VGALO 0 16色
106、640*200</p><p> VGAMED 1 16色 640*350</p><p> VGAHI 2 16色 640*480</p><p> ───────────────────────────────────</p><p> PC3270
107、 10 PC3270HI 0 2色 720*350</p><p> ───────────────────────────────────</p><p> DETECT 0 用于硬件測試</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
108、━━━━━</p><p> 有時編程者并不知道所用的圖形顯示器適配器種類, 或者需要將編寫的程序用于不同圖形驅(qū)動器, Turbo C提供了一個自動檢測顯示器硬件的函數(shù), 其調(diào)用</p><p><b> 格式為:</b></p><p> void far detectgraph(int *gdriver, *gmode);</
109、p><p> 其中g(shù)driver和gmode的意義與上面相同。</p><p> 另外, Turbo C提供了退出圖形狀態(tài)的函數(shù)closegraph(), 其調(diào)用格式為:</p><p> void far closegraph(void);</p><p> 調(diào)用該函數(shù)后可退出圖形狀態(tài)而進入文本方式(Turbo C 默認方式), 并釋放
110、用于保存圖形驅(qū)動程序和字體的系統(tǒng)內(nèi)存。</p><p> 2. 獨立圖形運行程序的建立</p><p> Turbo C對于用initgraph()函數(shù)直接進行的圖形初始化程序, 在編譯和鏈接</p><p> 時并沒有將相應(yīng)的驅(qū)動程序(*.BGI)裝入到執(zhí)行程序, 當程序進行到intitgraph()</p><p> 語句時, 再
111、從該函數(shù)中第三個形式參數(shù)char *path中所規(guī)定的路徑中去找相應(yīng)的</p><p> 驅(qū)動程序。若沒有驅(qū)動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在,</p><p><b> 將會出現(xiàn)錯誤:</b></p><p> BGI Error: Graphics not initialized (use 'i
112、nitgraph')</p><p> 因此, 為了使用方便, 應(yīng)該建立一個不需要驅(qū)動程序就能獨立運行的可執(zhí)行圖形程序,Turbo C中規(guī)定用下述步驟(這里以EGA、VGA顯示器為例):</p><p> 1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA</p><p> 此命令將驅(qū)動程序EGAVGA.BGI轉(zhuǎn)換成EGAVGA.OBJ的目
113、標文件。</p><p> 2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA</p><p> 此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。</p><p> 3. 在程序中initgraph()函數(shù)調(diào)用之前加上一句:</p><p> registe
114、rbgidriver(EGAVGA_driver):</p><p> 該函數(shù)告訴連接程序在連接時把EGAVGA的驅(qū)動程序裝入到用戶的執(zhí)行程序中。</p><p> 經(jīng)過上面處理,編譯鏈接后的執(zhí)行程序可在任何目錄或其它兼容機上運行。</p><p> 3.屏幕顏色的設(shè)置和清屏函數(shù)</p><p> 對于圖形模式的屏幕顏色設(shè)置, 同樣分
115、為背景色的設(shè)置和前景色的設(shè)置。在</p><p> Turbo C中分別用下面兩個函數(shù)。</p><p> 設(shè)置背景色: void far setbkcolor( int color);</p><p> 設(shè)置作圖色: void far setcolor(int color);</p><p> 其中col
116、or 為圖形方式下顏色的規(guī)定數(shù)值, 對EGA, VGA顯示器適配器, 有關(guān)</p><p> 顏色的符號常數(shù)及數(shù)值見下表所示。</p><p> 表3 有關(guān)屏幕顏色的符號常數(shù)表</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> 符號常數(shù) 數(shù)值 含義
117、 符號常數(shù) 數(shù)值 含義</p><p> ───────────────────────────────────</p><p> BLACK 0 黑色 DARKGRAY 8 深灰</p><p> BLUE 1 蘭色
118、 LIGHTBLUE 9 深蘭</p><p> GREEN 2 綠色 LIGHTGREEN 10 淡綠</p><p> CYAN 3 青色 LIGHTCYAN 11 淡青</p><p>
119、 RED 4 紅色 LIGHTRED 12 淡紅</p><p> MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅</p><p> BROWN 6 棕色 YELLOW
120、 14 黃色</p><p> LIGHTGRAY 7 淡灰 WHITE 15 白色</p><p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> 對于CGA適配器, 背景色可以為表3中16種顏色的一種, 但前景色依賴于不同的調(diào)色板。共
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貪吃蛇游戲畢業(yè)設(shè)計
- java貪吃蛇游戲畢業(yè)設(shè)計(源代碼+論文)
- flash貪吃蛇畢業(yè)設(shè)計
- 貪吃蛇小游戲
- 基于java的游戲設(shè)計——貪吃蛇
- 貪吃蛇游戲?qū)嵙?xí)報告
- java貪吃蛇游戲 課程設(shè)計
- 畢業(yè)設(shè)計(論文)基于c語言的貪吃蛇游戲開發(fā)與設(shè)計
- qt課程設(shè)計--貪吃蛇游戲設(shè)計
- c語言貪吃蛇游戲課程設(shè)計
- c語言課程設(shè)計--貪吃蛇游戲
- 貪吃蛇
- 貪吃蛇游戲的實現(xiàn)課程設(shè)計
- 貪吃蛇游戲的設(shè)計與實現(xiàn).doc
- java課程設(shè)計報告貪吃蛇游戲
- java課程設(shè)計---java設(shè)計貪吃蛇游戲
- 貪吃蛇畢業(yè)論文
- -基于java的貪吃蛇游戲開發(fā)
- 貪吃蛇java課程設(shè)計--貪吃蛇程序設(shè)計
- 貪吃蛇
評論
0/150
提交評論