版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、linux平臺(tái)下基于c的貪食蛇游戲設(shè)計(jì)與實(shí)現(xiàn) 姓 名 系 別、 專(zhuān) 業(yè) 導(dǎo) 師 姓 名、職 稱(chēng) 完 成 時(shí) 間 目 錄摘 要iabstractii 緒 論11.1 論文選題依據(jù)11.2 貪食蛇游戲選題背景11.3 貪食蛇設(shè)計(jì)概述1 平臺(tái)簡(jiǎn)介22.1 系統(tǒng)介紹22.1.2 linux系統(tǒng)的主要特點(diǎn)22.1.3 linux的組成22.2 開(kāi)發(fā)工具32.2.1 c語(yǔ)言簡(jiǎn)介32.2.2gtk簡(jiǎn)介32.2.3 linux編譯工具gcc簡(jiǎn)介42.3 gtk環(huán)境的搭建43 系統(tǒng)分析53.1 可行性分析53.1.1 技術(shù)可行性53.1.2 經(jīng)濟(jì)可行性53.1.3 操作可行性53.2 需求分析53.2.1 功能
2、要求53.2.2 性能要求63.2.3 運(yùn)行要求64 系統(tǒng)概要設(shè)計(jì)64.1 程序初始化64.2程序流程64.2.1系統(tǒng)模塊64.2.2 系統(tǒng)流程65 系統(tǒng)詳細(xì)設(shè)計(jì)85.1 系統(tǒng)界面85.2 對(duì)象模型設(shè)計(jì)115.3 食物及蛇狀態(tài)的初始化及食物的出現(xiàn)125.4 游戲運(yùn)行中的設(shè)計(jì)思路125.5 游戲規(guī)則135.6 游戲?qū)崿F(xiàn)以及其代碼135.6.1 蛇移動(dòng)的實(shí)現(xiàn)135.6.2 蛇死亡的判斷145.6.3 蛇到達(dá)邊框時(shí)從另一端出現(xiàn)和傳送的實(shí)現(xiàn)146 貪食蛇ai的算法設(shè)計(jì)156.1 蛇自己尋找食物的算法設(shè)計(jì)156.1.1 貪心算法156.1.2 利用貪心算法實(shí)現(xiàn)最短路徑的選擇166.2 蛇避開(kāi)吃到自己身體
3、的算法設(shè)計(jì)176.3 地圖2需要新增的一些判斷187 調(diào)試以及測(cè)試結(jié)果分析197.1 系統(tǒng)測(cè)試207.2 在軟件的測(cè)試過(guò)程中發(fā)現(xiàn)的幾個(gè)小問(wèn)題207.3 系統(tǒng)需要的改進(jìn)與提高21結(jié)束語(yǔ)22參考文獻(xiàn)23致 謝24附 錄25摘 要 貪食蛇游戲操作簡(jiǎn)單方便,老少皆宜,是一款不錯(cuò)的小游戲。而linux挾其價(jià)格低廉、品質(zhì)良好與穩(wěn)定的優(yōu)勢(shì),正吸引著眾多以pc為主工作、學(xué)習(xí)和娛樂(lè)的人們。 基于linux平臺(tái)下的貪食蛇游戲采用的linux底下c語(yǔ)言和gtk圖形化編程工具編寫(xiě),操作簡(jiǎn)單。玩家首先進(jìn)入游戲,在游戲中可以對(duì)游戲進(jìn)行暫停、退出等操作,還加入了雙人對(duì)戰(zhàn)模式,豐富了游戲,增大游戲的娛樂(lè)性。 本文分幾部分闡述
4、了基于linux下的貪食蛇游戲的開(kāi)發(fā)過(guò)程,分章節(jié)較詳細(xì)的介紹了游戲的結(jié)構(gòu)和設(shè)計(jì)實(shí)現(xiàn)過(guò)程,并詳細(xì)畫(huà)出了系統(tǒng)流程圖,還詳細(xì)介紹了各個(gè)功能完成相關(guān)技術(shù),寫(xiě)出了調(diào)試以及測(cè)試結(jié)果分析。 關(guān)鍵詞: gtk;linux操作系統(tǒng);貪食蛇游戲 abstractsnake game is easy and convenient to operate.it is a good game for all ages. relying on its low price, good quality and stable competitive advantage,the linux is invisibly attract
5、ing large numbers of people who base pc as main work、learning and entertainment platform. the linux platform-based snake game is easy to operate by adopting the c language and gtk graphical programming tools.after entering the game, the players can do some operations,like “pause”, “exit” ect.the add
6、ed two-war mode enriches the game, and makes the game more entertaining. this paper describes the development process of the linux-based snake game in several parts. a comparatively detailed introduction is given to the structure of the game and the process of the designs implementation in sub-secti
7、ons. a system flow chart is drawn in details.the technology related to the completion of various functions is also given in details. debugging and an analysis of the test results is written out. key words: gtk;linux operating system;snake game 緒 論1.1 論文選題依據(jù)linux挾其價(jià)格低廉、品質(zhì)良好與穩(wěn)定的競(jìng)爭(zhēng)優(yōu)勢(shì),正無(wú)形無(wú)影地吸引眾多以pc為主工作平
8、臺(tái)上的人們。隨著科學(xué)技術(shù)日新月異的發(fā)展,linux提供了更多圖形接口的桌面操作環(huán)境和應(yīng)用軟件,操作更加簡(jiǎn)單方便。linux是源代碼開(kāi)放的操作系統(tǒng),是當(dāng)今優(yōu)秀的操作系統(tǒng)之一。標(biāo)準(zhǔn)linux經(jīng)過(guò)小型化裁剪之后的專(zhuān)用linux操作系統(tǒng)即嵌入式linux,已成為當(dāng)今的一大熱點(diǎn),它能夠固化于容量只有幾kb或者幾mb的存儲(chǔ)器芯片或者單片機(jī)中,適合于特定嵌入式場(chǎng)合,目前已經(jīng)開(kāi)發(fā)成功的嵌入式系統(tǒng)中,大約一半的系統(tǒng)使用嵌入式linux。嵌入式linux得到眾廠商的青睞,在工程實(shí)踐中應(yīng)用也十分廣泛,我校的嵌入式系統(tǒng)課程同樣也采用嵌入式linux進(jìn)行教學(xué)工作,因此,此次游戲設(shè)計(jì)環(huán)境也采用linux系統(tǒng)。 linux
9、內(nèi)核的大部分代碼是由c語(yǔ)言編寫(xiě)的, linux應(yīng)用程序也多由c語(yǔ)言編寫(xiě)【1】。c語(yǔ)言是結(jié)構(gòu)化、模式化的語(yǔ)言,程序可移植性好,運(yùn)算符豐富、代碼效率高,它兼有匯編語(yǔ)言和高級(jí)語(yǔ)言的優(yōu)點(diǎn),既適合于開(kāi)發(fā)系統(tǒng)軟件,也適合于編寫(xiě)應(yīng)用程序,被廣泛應(yīng)用于事務(wù)處理、科學(xué)計(jì)算、工業(yè)控制、數(shù)據(jù)庫(kù)技術(shù)等領(lǐng)域。此次設(shè)計(jì)語(yǔ)言環(huán)境也選用c語(yǔ)言。gtk是linux平臺(tái)下比較好的一個(gè)c語(yǔ)言圖形開(kāi)發(fā)工具,所以本次也選擇了gtk圖形開(kāi)發(fā)工具。1.2 貪食蛇游戲選題背景隨著經(jīng)濟(jì)的快速發(fā)展,人們生活的步調(diào)日益加快,計(jì)算機(jī)的地位在人們的生活中已日益突出,基于各種操作系統(tǒng)的娛樂(lè)游戲也越來(lái)越多、越來(lái)越大眾化,成為人們生活中必不可少的一部分。而
10、隨著人們生活品質(zhì)的提高,電腦游戲也越來(lái)越多元化,貪食蛇就是其中一種。貪吃蛇這一游戲簡(jiǎn)單易行,操作方便,娛樂(lè)性較強(qiáng),吸引了不少人。這一款游戲緊緊地抓住了人們的心理,雖然簡(jiǎn)單,卻起樂(lè)無(wú)窮,貪食蛇游戲操作簡(jiǎn)單方便,老少皆宜,是一款不錯(cuò)的小游戲,而實(shí)現(xiàn)二人對(duì)戰(zhàn)使游戲更具新意也更有趣。 該游戲給人們帶來(lái)了追逐的快感,以及成功后的滿足感,對(duì)于一直處于高壓下的現(xiàn)代人是很好的放松工具。1.3 貪食蛇設(shè)計(jì)概述該游戲主要功能包括:選擇玩家人數(shù)與游戲模式、選擇游戲地圖、開(kāi)始游戲、暫停游戲、退出游戲等。 選擇玩家人數(shù):玩家可以選擇單人模式、雙人對(duì)戰(zhàn)模式和人機(jī)對(duì)戰(zhàn)模式進(jìn)入游戲。 選擇游戲地圖:玩家可以選擇玩哪個(gè)地圖,暫
11、時(shí)有2個(gè)地圖供選擇,每一個(gè)地圖將會(huì)有不同的墻壁和不同的傳送點(diǎn)。 開(kāi)始游戲:玩家1通過(guò)方向鍵,玩家2通過(guò)w s d a鍵,使蛇改變向去吃食,每吃一個(gè)食物蛇身加長(zhǎng),分?jǐn)?shù)加1。每局300秒。 暫停游戲:點(diǎn)擊暫停按鈕暫停游戲,點(diǎn)擊繼續(xù)按鈕繼續(xù)游戲。退出游戲:點(diǎn)擊退出按鈕退出游戲。 平臺(tái)簡(jiǎn)介2.1 系統(tǒng)介紹2.1.1 linux簡(jiǎn)介 linux是一套免費(fèi)使用和自由傳播的類(lèi)unix操作系統(tǒng),它主要用于基于x86系列cpu的計(jì)算機(jī)上。這個(gè)系統(tǒng)是由世界各地的成千上萬(wàn)的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的unix兼容產(chǎn)品【2】。2.1.2 linux系統(tǒng)的主要特點(diǎn)
12、linux操作系統(tǒng)作為當(dāng)今主要的操作系統(tǒng)之一具有以下這些特點(diǎn):(1)開(kāi)放性(2)多用戶(3)多任務(wù)(4)良好的用戶界面(5)設(shè)備獨(dú)立性(6)提供了豐富的網(wǎng)絡(luò)功能(7)可靠的安全系統(tǒng)(8)良好的可移植性2.1.3 linux的組成 linux的內(nèi)核:內(nèi)核是系統(tǒng)的核心,是運(yùn)行程序和管理 像磁盤(pán)和打印機(jī)等硬件設(shè)備的核心程序。 linux shell: shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。 linux文件系統(tǒng): linux文件系統(tǒng)是文件存放在磁盤(pán)等存儲(chǔ)設(shè)備上的組織方法。linux能支持多種目前主流的文件系統(tǒng),如ext2、ext3、fat、vfat、iso9660、nfs
13、、smb等。 linux應(yīng)用系統(tǒng):標(biāo)準(zhǔn)的linux系統(tǒng)都有一整套稱(chēng)為應(yīng)用程序的程序集,包括文本編輯器、編程語(yǔ)言、x window、辦公套件、internet工具、數(shù)據(jù)庫(kù)等【3】。 2.2 開(kāi)發(fā)工具 在確定了操作系統(tǒng)后,就該選擇開(kāi)發(fā)工具了??紤]到是在linux平臺(tái)下開(kāi)發(fā)而linux的內(nèi)核主要是由c語(yǔ)言編寫(xiě)的,所以c語(yǔ)言在linux下的軟件開(kāi)發(fā)具有獨(dú)到的優(yōu)勢(shì)【4】。由于考慮到游戲開(kāi)發(fā)需要一個(gè)良好的界面,終端程序顯然無(wú)法達(dá)到要求。于是gtk圖形化編程工具就成了必然的選擇。下面將簡(jiǎn)要介紹本次貪食蛇游戲開(kāi)發(fā)所要用到的主要工具。2.2.1 c語(yǔ)言簡(jiǎn)介 c語(yǔ)言是目前世界上流行、使用最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。
14、c語(yǔ)言對(duì)操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用c語(yǔ)言明顯優(yōu)于其它高級(jí)語(yǔ)言,許多大型應(yīng)用軟件都是用c語(yǔ)言編寫(xiě)的。c語(yǔ)言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫(xiě)系統(tǒng)軟件,三維,二維圖形和動(dòng)畫(huà)它是數(shù)值計(jì)算的高級(jí)語(yǔ)言【4】。 c語(yǔ)言的特點(diǎn)有:(1)簡(jiǎn)潔緊湊、靈活方便。 (2) 運(yùn)算符豐富。 (3) 數(shù)據(jù)結(jié)構(gòu)豐富。 (4) c是結(jié)構(gòu)式語(yǔ)言。 (5) c語(yǔ)法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大。 (6) c語(yǔ)言允許直接訪問(wèn)物理地址,可以直接對(duì)硬件進(jìn)行操作。 (7) c語(yǔ)言程序生成代碼質(zhì)量高,程序執(zhí)行效率高。 (8) c語(yǔ)言適用范圍大,可移植性好【5】。 2.2.2gtk簡(jiǎn)
15、介 gtk(gimp toolkit)是一套跨多種平臺(tái)的圖形工具包,按lgpl許可協(xié)議發(fā)布的。雖然最初是為gimp寫(xiě)的,但目前已發(fā)展為一個(gè)功能強(qiáng)大、設(shè)計(jì)靈活的一個(gè)通用圖形庫(kù)。特別是被gnome選中使得gtk+廣為流傳,成為linux下開(kāi)發(fā)圖形界面的應(yīng)用程序的主流開(kāi)發(fā)工具之一,當(dāng)然gtk+并不要求必須在linux上,事實(shí)上,目前gtk+已經(jīng)有了成功的windows版本。 gtk雖然是用c語(yǔ)言寫(xiě)的,但是您可以使用你熟悉的語(yǔ)言來(lái)使用gtk,因?yàn)間tk+已經(jīng)被綁定到幾乎所有流行的語(yǔ)言上,如:c+,php, guile, perl, python, tom, ada95, objective c, fr
16、ee pascal, and eiffel【6】。 gtk的一個(gè)簡(jiǎn)單例子如下:該例子產(chǎn)生一個(gè)窗口。它不能自己退出,只能通過(guò)shell來(lái)殺死進(jìn)程(調(diào)用kill命令)。/*例子 base.c */#include int main( int argc,char *argv ) gtkwidget *window;gtk_init (&argc, &argv); /* 初始化顯示環(huán)境 */ window = gtk_window_new (gtk_window_toplevel); /* 創(chuàng)建一個(gè)新的窗口*/gtk_widget_show (window); /*顯示窗口*/ gtk_main ()
17、; /*進(jìn)入睡眠狀態(tài),等待事件激活*/return(0); 從上面的程序可以看出,gtk是一個(gè)事件驅(qū)動(dòng)工具包,當(dāng)它運(yùn)行到gtk_main()函數(shù)時(shí)會(huì)自動(dòng)睡眠,直到有事件發(fā)生,控制權(quán)轉(zhuǎn)讓給相應(yīng)的函數(shù)調(diào)用,在該函數(shù)中可以用標(biāo)準(zhǔn)c寫(xiě)出相應(yīng)的事物邏輯。這與windows 上的程序處理是一樣的。2.2.3 linux編譯工具gcc簡(jiǎn)介gcc是一個(gè)用于linux系統(tǒng)下編程的編譯器。gcc=gnu compiler collection,是由stallman所開(kāi)發(fā)的linux下的編譯器,可以編譯的語(yǔ)言包括:c, c+, objective-c, fortran, java,ada等。不過(guò),現(xiàn)在gcc也有了許
18、多win32下的移植版本。如今的gcc借助于他的特性,具有了交叉編譯器的功能,即在一個(gè)平臺(tái)下編譯另一個(gè)平臺(tái)的代碼。2.3 gtk環(huán)境的搭建 我們以linux系統(tǒng)ubuntu為例簡(jiǎn)要介紹gtk環(huán)境的搭建,ubuntu桌面環(huán)境是gnome。gnome就是使用gtk+編寫(xiě),所以運(yùn)行環(huán)境不需要另外配置了,要做的是安裝開(kāi)發(fā)所需要的環(huán)境。 剛安裝好的ubuntu已經(jīng)默認(rèn)安裝了gcc,但是并沒(méi)有安裝所需要的頭文件,我們需要手動(dòng)添加,使用命令: sudo apt-get install build-essential然后再安裝gnome開(kāi)發(fā)包,使用命令: sudo apt-get install gnome-
19、core-devel系統(tǒng)會(huì)自動(dòng)找到所依賴(lài)的庫(kù),并一起下載下來(lái)。這樣安裝過(guò)后使用下面的命令編譯上面的代碼: gcc main.c -o main pkg-config -cflags -libs gtk+-2.0注意,這里的是鍵盤(pán)上1左面的反引號(hào),不是單引號(hào)。 kde桌面配置gtk,步驟也類(lèi)似,但是需要先安裝gtk的運(yùn)行環(huán)境。 本次開(kāi)發(fā)所使用的操作系統(tǒng)平臺(tái)是fedora 12完整版 安裝時(shí)選擇安裝gtk開(kāi)發(fā)工具與gnome桌面,因此當(dāng)系統(tǒng)完成安裝所有g(shù)tk的運(yùn)行和開(kāi)發(fā)環(huán)境就已搭建好。3 系統(tǒng)分析3.1 可行性分析3.1.1 技術(shù)可行性本系統(tǒng)的設(shè)計(jì)要求是一個(gè)能在linux操作系統(tǒng)下運(yùn)行且界面美觀運(yùn)
20、行穩(wěn)定且將來(lái)可能用于嵌入式移植的系統(tǒng)。綜合考慮選擇c語(yǔ)言與gtk技術(shù)來(lái)實(shí)現(xiàn)本系統(tǒng)。c語(yǔ)言是一門(mén)成熟的高級(jí)語(yǔ)言,可用于開(kāi)發(fā)各種系統(tǒng),也可用于開(kāi)發(fā)游戲系統(tǒng)【7】。同時(shí)c語(yǔ)言也擁有相當(dāng)多的技術(shù)人員。gtk是linux下的一個(gè)圖形化編程工具,其開(kāi)發(fā)出來(lái)的程序能在裝有g(shù)tk環(huán)境的linux系統(tǒng)下順利運(yùn)行??梢哉f(shuō)在技術(shù)方面開(kāi)發(fā)此系統(tǒng)不會(huì)有什么問(wèn)題。3.1.2 經(jīng)濟(jì)可行性 隨著手機(jī)和電腦的普及,這樣的小游戲也將隨著普及因此其需求也將不斷上升,而由于技術(shù)的成熟與為數(shù)眾多的開(kāi)發(fā)人員使得此系統(tǒng)的開(kāi)發(fā)并不困難,再者此系統(tǒng)運(yùn)行的平臺(tái)linux操作系統(tǒng)是開(kāi)源和免費(fèi)的,所以開(kāi)發(fā)此系統(tǒng)的成本并不會(huì)很高。因此此系統(tǒng)具有相當(dāng)?shù)?/p>
21、經(jīng)濟(jì)利益,到時(shí)候我們也可以靜觀其成.3.1.3 操作可行性本系統(tǒng)是一個(gè)簡(jiǎn)單的單機(jī)游戲系統(tǒng),對(duì)于這樣一個(gè)系統(tǒng),其操作只需要使用簡(jiǎn)單的幾個(gè)按鍵和鼠標(biāo)點(diǎn)擊按鈕就可以實(shí)現(xiàn),因此本系統(tǒng)的操作簡(jiǎn)單易記,可以說(shuō)一看就會(huì)的,系統(tǒng)在操作上是不會(huì)存在問(wèn)題的,本系統(tǒng)需要在linux操作系統(tǒng)下運(yùn)行,而用戶也可以在其受益不淺.3.2 需求分析3.2.1 功能要求本系統(tǒng)是一個(gè)簡(jiǎn)單的單機(jī)游戲,其功能要求實(shí)現(xiàn)單人游戲模式、雙人對(duì)戰(zhàn)模式和人機(jī)對(duì)戰(zhàn)模式以提高游戲的可玩性,系統(tǒng)默認(rèn)模式為單人模式,通過(guò)點(diǎn)擊按鈕選擇不同游戲模式進(jìn)行游戲。系統(tǒng)還要求實(shí)現(xiàn)至少2個(gè)不同地圖的選擇,以提高游戲的趣味與豐富性。單人模式時(shí)只有玩家1通過(guò)上下左右鍵
22、來(lái)控制蛇的方向,在規(guī)定時(shí)間內(nèi)盡量多吃食物,雙人模式時(shí)增加的玩家2可以通過(guò)w,s,a,d來(lái)控制蛇的移動(dòng)方向,通過(guò)雙人競(jìng)技比較誰(shuí)吃的食物最多,人機(jī)對(duì)戰(zhàn)是在只有一個(gè)人的情況下可以與電腦進(jìn)行對(duì)戰(zhàn)。游戲中要實(shí)現(xiàn)暫停與退出和關(guān)于幫助文檔。3.2.2 性能要求 游戲操作要求簡(jiǎn)單易行,游戲過(guò)程中畫(huà)面移動(dòng)要流暢,通過(guò)鍵盤(pán)對(duì)蛇移動(dòng)方向控制時(shí)無(wú)明顯延遲,由于本系統(tǒng)將來(lái)有可能在嵌入式linux上移植,而嵌入式系統(tǒng)一般存儲(chǔ)較小,處理器的處理速度也不是很快,因此本系統(tǒng)對(duì)內(nèi)存和處理器的使用的要求都要盡可能的小。3.2.3 運(yùn)行要求本系統(tǒng)由于要使用到gtk圖形化編程工具,而圖形化編程工具gtk開(kāi)發(fā)出來(lái)的程序需要有g(shù)tk環(huán)境才
23、能運(yùn)行,由于是用c語(yǔ)言實(shí)現(xiàn),因此系統(tǒng)對(duì)硬件的要求并不是很高。所以本系統(tǒng)的運(yùn)行要求是搭建有g(shù)tk環(huán)境或是安裝gnome桌面環(huán)境的linux操作系統(tǒng)。4 系統(tǒng)概要設(shè)計(jì)4.1 程序初始化 程序初始化主要由初始化函數(shù)init_game()在游戲開(kāi)始時(shí)對(duì)各變量進(jìn)行初始化賦值。每次重新游戲時(shí),得分將清零,游戲時(shí)間重設(shè)為300秒,蛇的長(zhǎng)度與位置恢復(fù)為初始狀態(tài),但游戲模式與游戲的地圖將不變,需要玩家自己選擇才會(huì)發(fā)生改變游戲的初始化流程如圖4.1所示。4.2程序流程4.2.1系統(tǒng)模塊本系統(tǒng)分為:圖形初始化gtk_init()與游戲初始化game_init()模塊、圖形界面設(shè)計(jì)create_window()與地圖
24、設(shè)計(jì)draw_map()模塊、模式選擇cb_choose()模塊、游戲play_game()模塊、成績(jī)輸出模塊、電腦ai模塊、游戲退出模塊、游戲中蛇通過(guò)判斷是否撞墻或吃到自己來(lái)判斷蛇的死亡。程序模塊如圖4.2所示。4.2.2 系統(tǒng)流程本系統(tǒng)流程:當(dāng)用戶打開(kāi)系統(tǒng),系統(tǒng)首先對(duì)各參數(shù)進(jìn)行初始化設(shè)定,當(dāng)玩家點(diǎn)擊“開(kāi)始”時(shí)開(kāi)始游戲,用戶通過(guò)方向鍵進(jìn)行游戲,游戲過(guò)程中如果蛇死亡或游戲時(shí)間完則停止游戲并顯示分?jǐn)?shù)與結(jié)束信息,當(dāng)玩家選擇從新開(kāi)始時(shí)游戲進(jìn)行初始化設(shè)定,當(dāng)玩家選擇退出時(shí)退出游戲。游戲流程如圖4.3所示。圖 4.1 程序初始化流程圖 圖 4.2 游戲模塊圖圖 4.3 游戲流程圖5 系統(tǒng)詳細(xì)設(shè)計(jì)5.1
25、系統(tǒng)界面 用戶界面是現(xiàn)代軟件重要的組成部分,界面的好壞對(duì)于游戲軟件來(lái)說(shuō)也相當(dāng)?shù)闹匾?,因?yàn)橐粋€(gè)用戶友好的界面能讓玩家在游戲過(guò)程中感覺(jué)更舒心,而一個(gè)不友好的界面將使游戲的品質(zhì)大打折扣。本系統(tǒng)界面的設(shè)計(jì)遵循如下的指導(dǎo)規(guī)則:1 讓用戶駕馭軟件,而不是軟件駕馭用戶。2 盡可能減少用戶的記性。3 保持界面的一致性【8】。本游戲的界面設(shè)計(jì)如圖5.1所示。圖5.1 游戲界面的設(shè)計(jì)此系統(tǒng)界面設(shè)計(jì)簡(jiǎn)約而不簡(jiǎn)單,用戶使用此系統(tǒng)時(shí)能夠很容易記住方便玩家使用,因此不會(huì)讓人感覺(jué)復(fù)雜而乏味。界面主要分為以下幾大部分。(1)主界面:所有信息都顯示在主窗口上,其中主要有游戲顯示區(qū)、游戲信息顯示區(qū)和游戲按鈕區(qū)。主窗口創(chuàng)建代碼如下
26、:/創(chuàng)建窗口window=gtk_window_new(gtk_window_toplevel);/設(shè)置主窗口標(biāo)題gtk_window_set_title(gtk_window(window),貪食蛇);/主窗口顯示位置gtk_window_set_position(gtk_window(window),gtk_win_pos_center);/接受關(guān)閉事件并且關(guān)閉窗口g_signal_connect(g_object(window),destroy,g_callback(gtk_main_quit),null);/設(shè)置主窗口大小gtk_widget_set_size_request(wind
27、ow,800,500);/邊框大小gtk_container_set_border_width(gtk_container(window),10);(2)游戲顯示區(qū):此區(qū)域是游戲過(guò)程的顯示區(qū)域,也是界面的主要設(shè)計(jì)部分。通過(guò)draw=gtk_drawing_area_new();創(chuàng)建游戲區(qū)域窗口。(3)游戲開(kāi)始界面如圖5.2所示。在打開(kāi)系統(tǒng)時(shí),游戲區(qū)顯示一張歡迎界面的圖片。用pixbuf = gdk_pixbuf_new_from_file (./test.jpg,null);將文件名為test.jpg的圖片添加進(jìn)游戲區(qū)并設(shè)為背景。(4)信息顯示區(qū):主要顯示游戲過(guò)程中的各種信息,如時(shí)間和得分等。
28、gtk_label_new()函數(shù)用于顯示游戲分?jǐn)?shù)等信息。信息顯示區(qū)如圖5.3所示。(5)按鈕區(qū):主要顯示游戲中需要點(diǎn)擊選擇的按鈕。通過(guò)gtk_button_new_with_label()函數(shù)創(chuàng)建按鈕。按鈕布局如圖5.4所示。(6)通過(guò)gtk_fixed_new()創(chuàng)建一個(gè)名叫fixed的固定容器,然后將游戲顯示區(qū)draw、信息顯示和按鈕添加進(jìn)fixed,最后把fixed容器添加進(jìn)window主窗口,最后通過(guò)gtk_widget_show_all(window)函數(shù)將其顯示出來(lái)。圖5.2 游戲開(kāi)始界面設(shè)計(jì) 圖5.3游戲信息顯示區(qū) 圖5.4 系統(tǒng)按鈕布局5.2 對(duì)象模型設(shè)計(jì) 在本系統(tǒng)中對(duì)象模型
29、的設(shè)計(jì)主要是蛇的設(shè)計(jì),食物的設(shè)計(jì),和地圖的設(shè)計(jì)。蛇的設(shè)計(jì)主要是通過(guò)2個(gè)畫(huà)圓函數(shù)gdk_draw_arc()畫(huà)出蛇的每一個(gè)結(jié)點(diǎn)同時(shí)設(shè)定顏色。而食物也是通過(guò)畫(huà)圓函數(shù)畫(huà)出。地圖中的傳送點(diǎn)和墻體是通過(guò)畫(huà)方格函數(shù)gdk_draw_rectangle()畫(huà)出。圖5.5中就是蛇, 即是食物,褐色長(zhǎng)方形即使墻的設(shè)計(jì),是傳送點(diǎn)。圖5.5地圖二的設(shè)計(jì)圖5.6地圖一的設(shè)計(jì)5.3 食物及蛇狀態(tài)的初始化及食物的出現(xiàn) 蛇狀態(tài)的初始化是由定義蛇結(jié)構(gòu)體時(shí)初始化決定的,每一次開(kāi)始蛇的長(zhǎng)度,出現(xiàn)位置和移動(dòng)方向都是一樣的,它們長(zhǎng)度都為6個(gè)結(jié)點(diǎn),方向都向右,蛇1初始位置是(3,3),蛇2初始位置是(3,30)。無(wú)論是在游戲的開(kāi)始還是
30、進(jìn)行中,食物都是隨機(jī)出現(xiàn)的,通過(guò)rand()隨機(jī)數(shù)產(chǎn)生函數(shù)隨機(jī)產(chǎn)生食物出現(xiàn)的坐標(biāo),在產(chǎn)生的隨機(jī)坐標(biāo)上畫(huà)出食物。5.4 游戲運(yùn)行中的設(shè)計(jì)思路游戲中蛇的運(yùn)動(dòng)是靠通過(guò)對(duì)畫(huà)面的不斷清除與重畫(huà)而實(shí)現(xiàn)的,每一次運(yùn)動(dòng)時(shí)先用背景色擦除掉原有蛇的圖像,再將蛇畫(huà)在其新出現(xiàn)的位置,由于每一次擦除與重畫(huà)間隔的時(shí)間非常短,利用人的視覺(jué)暫留性,讓蛇看上去就像在連續(xù)不斷的運(yùn)動(dòng)。而食物未被吃前,傳送點(diǎn)和墻體被擦除后重畫(huà)的位置與原來(lái)一樣,所以讓人感覺(jué)其并沒(méi)有變化。蛇身的移動(dòng)與運(yùn)動(dòng)方向主要是受頭結(jié)點(diǎn)控制,因?yàn)樯呙恳淮芜\(yùn)動(dòng)就是靠后一結(jié)點(diǎn)畫(huà)在前一結(jié)點(diǎn)的位置上來(lái)實(shí)現(xiàn)的,所以對(duì)蛇的控制主要是對(duì)頭結(jié)點(diǎn)的控制。蛇1通過(guò)上下左右鍵,蛇2通過(guò)w
31、、s、a、d鍵來(lái)控制蛇的移動(dòng)方向游戲中蛇運(yùn)動(dòng)速度的快慢主要是通過(guò)設(shè)置畫(huà)面重畫(huà)頻率來(lái)實(shí)現(xiàn)的,而具體實(shí)現(xiàn)是通過(guò)對(duì)函數(shù)的調(diào)用頻率,gtk中用函數(shù)g_timeout_add ()來(lái)實(shí)現(xiàn)對(duì)函數(shù)的定時(shí)調(diào)用。游戲暫停則是通過(guò)g_source_remove()函數(shù)中止對(duì)蛇運(yùn)行函數(shù)的定時(shí)調(diào)用。通過(guò)g_timeout_add()來(lái)實(shí)現(xiàn)游戲的繼續(xù)。設(shè)計(jì)了傳送點(diǎn)和墻體來(lái)增加游戲的復(fù)雜性與可玩性5.5 游戲規(guī)則1 單人模式單人模式的規(guī)則比較簡(jiǎn)單,只要在規(guī)定的時(shí)間內(nèi)不死亡和盡量得分最多即可。蛇撞墻或自己身體時(shí)即死亡,當(dāng)蛇進(jìn)入傳送點(diǎn)時(shí)將從另一特定位置出來(lái)。2雙人競(jìng)技模式蛇進(jìn)入傳送點(diǎn)時(shí)將從另一特定位置出來(lái),規(guī)定時(shí)間內(nèi)蛇沒(méi)死亡
32、得分最多者贏,得分相等為平局,游戲中撞墻或自己身體死亡者輸。兩條蛇可以互相穿透。3人機(jī)對(duì)戰(zhàn)模式當(dāng)用戶選擇此模式時(shí)將于電腦控制的蛇進(jìn)行競(jìng)技,此模式規(guī)則與雙人對(duì)戰(zhàn)模式一樣。5.6 游戲?qū)崿F(xiàn)以及其代碼5.6.1 蛇移動(dòng)的實(shí)現(xiàn) 蛇的移動(dòng)方向主要受頭結(jié)點(diǎn)控制,所以每次畫(huà)蛇時(shí)只要把前一結(jié)點(diǎn)的值賦給后一節(jié)點(diǎn)即可。 當(dāng)蛇頭的移動(dòng)方向向右時(shí),y值不變x的值不斷增加。 當(dāng)蛇頭的移動(dòng)方向向左時(shí),y值不變x的值不斷減少。 當(dāng)蛇頭的移動(dòng)方向向下時(shí),y值增加x的值不變。 當(dāng)蛇頭的移動(dòng)方向向上時(shí),y值減小x的值不變。畫(huà)蛇和蛇移動(dòng)代碼如下:/蛇身體節(jié)點(diǎn)位置的賦值gint i;for (i=snake.node;i0;i-)
33、snake.xi= snake.xi-1; snake.yi= snake.yi-1; /蛇移動(dòng)的實(shí)現(xiàn)switch( snake.dir) case 1: snake.x0+=1;break; case 2: snake.x0-=1;break; case 3: snake.y0-=1;break; case 4: snake.y0+=1;break;/*1向右,2向左,3向上,4向下*/5.6.2 蛇死亡的判斷當(dāng)蛇頭的值與蛇身或與墻的值相等時(shí),蛇即算死亡,代碼如下:void judge_die(struct snake *psnake)gint j;for(j=3;jnode;j+)if(
34、psnake-xj= psnake-x0& psnake-yj= psnake-y0) psnake-life=1;5.6.3 蛇到達(dá)邊框時(shí)從另一端出現(xiàn)和傳送的實(shí)現(xiàn) 當(dāng)蛇頭的x或y值達(dá)到邊框的最大或最小位置時(shí)相應(yīng)的給x或y賦以邊框的最小或最大值以實(shí)現(xiàn)當(dāng)蛇到達(dá)邊框時(shí)能從另一端出來(lái),同理當(dāng)蛇頭的x,y值等于傳送點(diǎn)位置的值時(shí)將蛇頭x,y的值賦以被傳送到位置的值,這樣將實(shí)現(xiàn)蛇的傳送功能。 部分代碼實(shí)現(xiàn)如下:if(snake2.x0=0|snake2.x0=59|snake2.x0=30)snake2.life=1;else if(snake2.dir=3&snake2.y0=47) snake2.y0
35、=-1;/到達(dá)傳送點(diǎn)的處理if(snake2.x0=1&snake2.y0=3)snake2.x0=58; snake2.y0=43;if(snake2.x0=58&snake2.y0=3)snake2.x0=1; snake2.y0=43;6 貪食蛇ai的算法設(shè)計(jì)本游戲設(shè)計(jì)了人機(jī)對(duì)戰(zhàn)模式,因此電腦貪食蛇的實(shí)現(xiàn)就必須用到人工智能也就是ai,下面將詳細(xì)介紹實(shí)現(xiàn)ai的算法設(shè)計(jì)。6.1 蛇自己尋找食物的算法設(shè)計(jì)此部分的算法設(shè)計(jì)是蛇ai設(shè)計(jì)的最主要也是最基本的部分。在系統(tǒng)中電腦蛇主要通過(guò)搜尋最短路徑來(lái)尋找食物,而最短路徑的搜索可以通過(guò)很多算法來(lái)實(shí)現(xiàn),本系統(tǒng)主要是通過(guò)尋找局部最優(yōu)解的方法來(lái)搜索蛇到食物的
36、最短路徑,而其中有一個(gè)貪心算法符合此部分的設(shè)計(jì)。6.1.1 貪心算法所謂貪心算法是指,在對(duì)問(wèn)題求解時(shí),總是做出在當(dāng)前看來(lái)是最好的選擇。也就是說(shuō),不從整體最優(yōu)上加以考慮,他所做出的僅是在某種意義上的局部最優(yōu)解。貪心算法不是對(duì)所有問(wèn)題都能得到整體最優(yōu)解,但對(duì)范圍相當(dāng)廣泛的許多問(wèn)題他能產(chǎn)生整體最優(yōu)解或者是整體最優(yōu)解的近似解。貪心算法的基本思路如下:(1)建立數(shù)學(xué)模型來(lái)描述問(wèn)題。(2)把求解的問(wèn)題分成若干個(gè)子問(wèn)題。(3)對(duì)每一子問(wèn)題求解,得到子問(wèn)題的局部最優(yōu)解。(4)把子問(wèn)題的解局部最優(yōu)解合成原來(lái)解問(wèn)題的一個(gè)解。實(shí)現(xiàn)該算法的過(guò)程:從問(wèn)題的某一初始解出發(fā);while 能朝給定總目標(biāo)前進(jìn)一步 do求出可行
37、解的一個(gè)解元素;由所有解元素組合成問(wèn)題的一個(gè)可行解。6.1.2 利用貪心算法實(shí)現(xiàn)最短路徑的選擇本系統(tǒng)中蛇主要是通過(guò)頭結(jié)點(diǎn)的移動(dòng)來(lái)控制蛇的移動(dòng),因此電腦蛇的移動(dòng)也主要是通過(guò)頭結(jié)點(diǎn)的的方向的選擇來(lái)控制蛇的移動(dòng)。根據(jù)貪心算法得出最短路徑的步驟:(1)選擇一組解即在蛇頭結(jié)點(diǎn)有可能移動(dòng)的四個(gè)方向,每個(gè)方向選出一個(gè)點(diǎn)用于挑選最優(yōu)解。(2)挑選出來(lái)的四個(gè)點(diǎn)依次計(jì)算出其與食物的距離,然后進(jìn)行比較。(3)選出離食物最近的一個(gè)點(diǎn)。(4)把蛇頭結(jié)點(diǎn)移動(dòng)的方向設(shè)為移動(dòng)到挑選出來(lái)離食物距離最近點(diǎn)的方向。(5)移動(dòng)到下一點(diǎn)后又從第1步執(zhí)行,直到最后得到最優(yōu)解為止。求可行解(第2步)示意圖如下:圖6.1 求可行解示意圖計(jì)算
38、距離通過(guò)比較選出最短距離然后選擇蛇移動(dòng)方向的實(shí)現(xiàn)代碼如下,其中要考慮到選出來(lái)的四個(gè)點(diǎn)中有一個(gè)是被蛇身體所占據(jù),蛇是不能往哪個(gè)方向移動(dòng)的,因此要把這一情況排除。算法實(shí)現(xiàn)代碼如下:void get_dir()gint a,b,a1,a2,b3,b4;gint d1,d2,d3,d4;a=snake2.x0-food.x;b=snake2.y0-food.y;a1=(snake2.x0+1)-food.x;a2=(snake2.x0-1)-food.x;b3=(snake2.y0-1)-food.y;b4=(snake2.y0+1)-food.y;/計(jì)算與食物的距離d1=a1*a1+b*b;d2=a
39、2*a2+b*b;d3=b3*b3+a*a;d4=b4*b4+a*a;/選擇最短距離的點(diǎn)后得到方向if(d1d2&d1d3&d1d4&snake2.dir!=2)snake2.dir=1;else if(d2d1&d2d3&d2d4&snake2.dir!=1)snake2.dir=2;else if(d3d1&d3d2&d3d4&snake2.dir!=4)snake2.dir=3;else if(d4d1&d4d2&d4d3&snake2.dir!=3)snake2.dir=4;6.2 蛇避開(kāi)吃到自己身體的算法設(shè)計(jì)為了提高電腦的ai,不至于蛇輕易就因?yàn)槌缘阶约憾劳?,同時(shí)也是增加游戲的可玩
40、性。所以我們應(yīng)該讓蛇有一定的避開(kāi)自己身體的能力。同樣,因?yàn)樯叩囊苿?dòng)是受頭節(jié)點(diǎn)的控制,因此我們也只用判斷頭結(jié)點(diǎn)即可。蛇頭節(jié)點(diǎn)每一次運(yùn)動(dòng)時(shí)將做一個(gè)判斷,判斷它的前方是否有蛇身體的存在如果沒(méi)有按原有策略運(yùn)動(dòng),如果有則改變蛇移動(dòng)的方向。但并不是隨意改變方向即可,此系統(tǒng)是通過(guò)順時(shí)針?lè)较蜃龀雠袛嗯c改變的。如當(dāng)蛇頭下一步的運(yùn)動(dòng)是向右移動(dòng)的時(shí)候,電腦將優(yōu)先考慮其前方是否有蛇身體的存在,如果有則改變其方向向下同時(shí)判斷下方是否有蛇身體的存在,如果還是有則改變其方向向左同時(shí)判斷左方是否有蛇身體的存在,如果有則再改變其方向向上。實(shí)現(xiàn)代碼如下:if(snake2.dir=1) int j;for(j=3;j30&sna
41、ke2.x030&snake2.dir!=4)snake2.dir=3;if(snake2.y0=3&snake2.dir!=1)snake2.dir=2;else if(food.x30&snake2.dir!=4)snake2.dir=3;if(snake2.y0=3&snake2.dir!=2)snake2.dir=1;此地圖還需要考慮墻的存在,當(dāng)蛇頭到達(dá)墻時(shí)必須改變方向避開(kāi)它,否則將撞墻死亡。實(shí)現(xiàn)代碼如下:if(snake2.x030&(snake2.x0=1|snake2.x0=29)&snake2.dir!=4)snake2.dir=3;if(food.x30&(snake2.x0
42、=58|snake2.x0=31)&snake2.dir!=4)snake2.dir=3;if(food.x30&snake2.y0=3)snake2.dir=1;當(dāng)蛇從一個(gè)區(qū)域到達(dá)另一區(qū)域的時(shí)候,有兩個(gè)出口可供選擇,這個(gè)時(shí)候蛇將選擇離食物最近的那個(gè)出口出現(xiàn)。兩個(gè)出口是上下分布的,因此只用判斷食物所在坐標(biāo)的y值即可。因?yàn)橛螒騾^(qū)域y的大小是從0到50,所以當(dāng)y值小于等于25時(shí)從上面出口出現(xiàn),當(dāng)y值大于25時(shí)從下面出口出現(xiàn)。部分實(shí)現(xiàn)代碼如下:if(snake2.x0=1&snake2.y0=3)if(food.y25)snake2.x0=58;snake2.y0=43;if(food.y=25)s
43、nake2.x0=58;snake2.y0=3;7 調(diào)試以及測(cè)試結(jié)果分析 在系統(tǒng)在完善過(guò)程中做了大量的測(cè)試,這也是一個(gè)軟件完善過(guò)程中所必須的。7.1 系統(tǒng)測(cè)試1測(cè)試用例:(1)使蛇經(jīng)過(guò)各個(gè)邊界的情況。(2)使蛇達(dá)到各個(gè)傳送點(diǎn)。 (3)測(cè)試蛇死亡和游戲時(shí)間到的情況。(4)測(cè)試使蛇撞墻。(5)測(cè)試電腦蛇的運(yùn)行。(6)測(cè)試軟件的各個(gè)按鈕。2預(yù)期出現(xiàn)的情況:(1)蛇能夠從一方邊界進(jìn)去及時(shí)的從另一邊界出來(lái)。(2)蛇到達(dá)傳送點(diǎn)時(shí)能夠正確的從被傳送點(diǎn)出來(lái)。(3)當(dāng)蛇死亡時(shí)和時(shí)間到了的時(shí)候,能夠?qū)崿F(xiàn)游戲停止和正確輸出游戲信息。(4)當(dāng)蛇撞墻將死亡。(5)電腦蛇能夠正確的尋找食物與具有一定的ai。(6)系統(tǒng)能正
44、確夠響應(yīng)點(diǎn)擊按鈕時(shí)的操作。3實(shí)際結(jié)果:游戲測(cè)試的結(jié)果基本上符合預(yù)期目標(biāo),但也還有幾個(gè)小問(wèn)題。7.2 在軟件的測(cè)試過(guò)程中發(fā)現(xiàn)的幾個(gè)小問(wèn)題游戲過(guò)程中,當(dāng)用戶以非??斓乃俣韧瑫r(shí)按下幾個(gè)控制鍵,蛇有可能會(huì)出現(xiàn)死亡現(xiàn)象。分析原因有可能是當(dāng)以很快的速度按下多個(gè)控制鍵時(shí)蛇的方向的值已經(jīng)變化而實(shí)際移動(dòng)方向卻未來(lái)得及改變,在這同時(shí)又按下了另一方向鍵,由此蛇就直接按后一方向的值的方向運(yùn)動(dòng),于是就發(fā)生撞到自己死亡的現(xiàn)象。在蛇撞墻死亡時(shí),頭結(jié)點(diǎn)將會(huì)進(jìn)入墻體中。估計(jì)是在判斷蛇死亡后又畫(huà)了一幀畫(huà)面。電腦蛇有時(shí)候會(huì)出現(xiàn)吃到自己的情況,情況稍微復(fù)雜的時(shí)候無(wú)法做出很好的判斷,可能原因是電腦的ai還不夠高。電腦蛇到達(dá)邊界時(shí)不能及
45、時(shí)從另一邊出現(xiàn),尚未發(fā)現(xiàn)原因。系統(tǒng)雖然存在些問(wèn)題,但系統(tǒng)的功能與模塊都成功實(shí)現(xiàn)且系統(tǒng)總體運(yùn)行良好且穩(wěn)定,系統(tǒng)的下一階段將主要解決這些問(wèn)題。7.3 系統(tǒng)需要的改進(jìn)與提高由于各種原因,本系統(tǒng)依然存在著許多缺點(diǎn)如有bug的存在,電腦的ai不高的問(wèn)題等。針對(duì)本系統(tǒng)的一些缺點(diǎn),在二期開(kāi)發(fā)時(shí)主要在以下方面進(jìn)行改進(jìn):1 完善系統(tǒng),解決系統(tǒng)所出現(xiàn)的問(wèn)題。2 改善與完善算法,使電腦的能變得高些。3 增加游戲地圖、游戲模式和游戲難度選擇,使游戲的可玩性大大增加。4 加上網(wǎng)絡(luò)功能,實(shí)現(xiàn)雙人通過(guò)局域網(wǎng)進(jìn)行對(duì)戰(zhàn)。5 豐富界面,使界面更美觀與擁有良好的可操作性。6 對(duì)游戲進(jìn)行優(yōu)化,如果可能,最好能實(shí)現(xiàn)linux嵌入式的移
46、植。使游戲具有更廣闊的前景。結(jié)束語(yǔ)由于專(zhuān)業(yè)知識(shí)的不足,系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)的缺乏與時(shí)間的倉(cāng)促,因此免不了系統(tǒng)相對(duì)簡(jiǎn)單和出現(xiàn)許多的缺點(diǎn)。對(duì)gtk開(kāi)發(fā)環(huán)境的不熟悉,導(dǎo)致系統(tǒng)界面無(wú)法得到很好的設(shè)計(jì),許多功能還無(wú)法實(shí)現(xiàn)。因?yàn)闀r(shí)間的限制,游戲的豐富性還不足,目前也只設(shè)計(jì)了兩個(gè)地圖,還有由于是第一次設(shè)計(jì)電腦的ai,所以還存在許多的不足電腦ai也不高。雖然本系統(tǒng)設(shè)計(jì)還存在著許多的不足,但其便捷的操作性與高度的可塑性和強(qiáng)烈趣味性,注定其任然是一款成功的設(shè)計(jì)。在此次系統(tǒng)開(kāi)發(fā)中讓我受益良多,不光讓我學(xué)到了許多的知識(shí),也讓我了解到自己的不足,同時(shí)也引發(fā)了我對(duì)系統(tǒng)開(kāi)發(fā)特別是linux下游戲開(kāi)發(fā)的興趣,相信我在這次開(kāi)發(fā)之后依舊
47、會(huì)堅(jiān)定的走下去。參考文獻(xiàn)1 吳岳編著,linux c程序設(shè)計(jì)大全m.清華大學(xué)出版社,2009.2 孟慶昌編著,操作系統(tǒng)教程 - linux實(shí)例分析m.西安電子科技大學(xué)出版社,2004.3 主編:孫種秀,操作系統(tǒng)教程(第四版)m.高等教育出版社,2008.4 譚浩強(qiáng),c程序設(shè)計(jì)(第三版)m.清華大學(xué)出版社,2005.5 嚴(yán)蔚敏 吳偉明編著,數(shù)據(jù)結(jié)構(gòu)(c語(yǔ)言版)m.清華大學(xué)出版社,2007.6 peter mattis, spencer kimball, josh macdonald,gtk turtoilm..7 浦濱編著,c游戲編程從入門(mén)到精通(第二版)m.科
48、學(xué)出版社,2006.8 (美)施奈德曼,用戶界面設(shè)計(jì)m.電子工業(yè)出版社,2006.附 錄部分源代碼:/頭文件、變量定義與結(jié)構(gòu)體定義#include#define gtk_up 65362#define gtk_down 65364#define gtk_left 65361#define gtk_right 65363#define n 200static gtkwidget *window = null;static gtkwidget *draw= null,*draw2=null;static gdkpixmap *pixmap = null,*pixbuf=null;gtkwidget
49、 *label;gtkwidget *score_label;gtkwidget *score_label2;gtkwidget *inf_label;gtkwidget *win_label;gtkwidget *ti_label;gdkcolor color;gdkgc *gc_blue;gdkgc *gc_red;gdkgc *gc_br;gdkgc *gc_tt;gdkgc *gc_a;gdkgc *gc_b;gboolean playing = false;gboolean pauseing = false;gboolean ai=false;gint score=0,score2=
50、0;/*得分*/gint speed=130;guint timer=0;guint timer1=0;gint times=300;gint play_n=1;gint t=0;gint mp=1;struct foodint x;int y;int yes; /*判斷是否出現(xiàn)食物的變量 */ food=6,16,0;struct snakeint xn;int yn;int node;int dir;/*蛇移動(dòng)方向:1右,2左,3上,4下*/int life/*蛇的生命:0活著,1死亡*/snake=4,4,7,1,0,snake2=4,30,7,1,0;/系統(tǒng)主程序gint main(i
51、nt argc, char *argv)gtk_init(&argc,&argv);create_window();gtk_main();return 0;/窗口的設(shè)計(jì)void create_window()gtkwidget *exit,*start,*choose,*choose1,*choose2,*pause,*about;gtkwidget *fixed;gtkwidget *g_map1,*g_map2;window=gtk_window_new(gtk_window_toplevel);gtk_window_set_title(gtk_window(window),貪食蛇);gtk_window_set_position(gtk_window(window),gtk_win_pos_center);g_signal_connect(g_object(window),destroy,g_callback(gtk_main_quit),null);gtk_widget_set_size_request(window,800,500);gtk_container_set_border_width(gtk_container(window),10);g_signal_connect (gtk_obje
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東江門(mén)幼兒師范高等專(zhuān)科學(xué)?!痘A(chǔ)英語(yǔ)二》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東財(cái)貿(mào)職業(yè)學(xué)院《陳設(shè)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二氧化碳制備課件
- 《如何贏得合作》課件
- 贛州職業(yè)技術(shù)學(xué)院《工程計(jì)量與計(jì)價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024“五史”全文課件
- 小學(xué)生手工剪紙課件
- 贛南衛(wèi)生健康職業(yè)學(xué)院《漢語(yǔ)言文學(xué)專(zhuān)業(yè)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南科技學(xué)院《燃燒學(xué)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 《保護(hù)煤柱的設(shè)計(jì)》課件
- 奧齒泰-工具盒使用精講講解學(xué)習(xí)課件
- 最新MARSI-醫(yī)用黏膠相關(guān)皮膚損傷課件
- 工程開(kāi)工報(bào)審表范本
- 航空小鎮(zhèn)主題樂(lè)園項(xiàng)目規(guī)劃設(shè)計(jì)方案
- 保潔冬季防滑防凍工作措施
- 少兒美術(shù)課件-《我的情緒小怪獸》
- 永續(xù)債計(jì)入權(quán)益的必備條件分析
- 預(yù)應(yīng)力鋼絞線張拉伸長(zhǎng)量計(jì)算程序單端(自動(dòng)版)
- 基坑監(jiān)測(cè)課件ppt版(共155頁(yè))
- 開(kāi)發(fā)區(qū)開(kāi)發(fā)管理模式及發(fā)展要素PPT課件
- 急診科科主任述職報(bào)告范文
評(píng)論
0/150
提交評(píng)論