




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目錄TOC\o"1-2"\h\u299601緒論 128801.1論文選題依據(jù) 1210101.2貪吃蛇游戲選題背景 1153881.3貪吃蛇設(shè)計(jì)概述 1290972平臺簡介 1103582.1系統(tǒng)介紹 198322.2開發(fā)工具 329352.3GTK環(huán)境的搭建 3117193系統(tǒng)分析 4183813.1可行性分析 4221593.2需求分析 4135024系統(tǒng)概要設(shè)計(jì) 5225284.1程序初始化 5238674.2程序流程 5182275系統(tǒng)詳細(xì)設(shè)計(jì) 621105.1系統(tǒng)界面 6175305.2對象模型設(shè)計(jì) 8238405.3食物及蛇狀態(tài)的初始化及食物的出現(xiàn) 922505.4游戲運(yùn)行中的設(shè)計(jì)思路 9194305.5游戲規(guī)則 9316075.6游戲?qū)崿F(xiàn)及其代碼 9247096調(diào)試及測試結(jié)果分析 10314326.1系統(tǒng)測試 1086206.2測試出現(xiàn)的問題 1156746.3系統(tǒng)需要的改進(jìn)與提高 1124225結(jié)論 1112050致謝 12江蘇海洋大學(xué)Linux課程設(shè)計(jì)(論文)第5頁共22頁1緒論論文選題依據(jù)Linux挾其價(jià)格低廉、品質(zhì)良好與穩(wěn)定的競爭優(yōu)勢,正無形無影地吸引眾多以PC為主工作平臺上的人們。隨著科學(xué)技術(shù)日新月異的發(fā)展,Linux提供了更多圖形接口的桌面操作環(huán)境和應(yīng)用軟件,操作更加簡單方便。Linux是源代碼開放的操作系統(tǒng),是當(dāng)今優(yōu)秀的操作系統(tǒng)之一。標(biāo)準(zhǔn)Linux經(jīng)過小型化裁剪之后的專用Linux操作系統(tǒng)即嵌入式Linux,已成為當(dāng)今的一大熱點(diǎn),它能夠固化于容量只有幾KB或者幾MB的存儲器芯片或者單片機(jī)中,適合于特定嵌入式場合,目前已經(jīng)開發(fā)成功的嵌入式系統(tǒng)中,大約一半的系統(tǒng)使用嵌入式Linux。此次游戲設(shè)計(jì)環(huán)境也采用Linux系統(tǒng)。???Linux內(nèi)核的大部分代碼是由C語言編寫的,?Linux應(yīng)用程序也多由C語言編寫。C語言是結(jié)構(gòu)化、模式化的語言,程序可移植性好,運(yùn)算符豐富、代碼效率高,它兼有匯編語言和高級語言的優(yōu)點(diǎn),既適合于開發(fā)系統(tǒng)軟件,也適合于編寫應(yīng)用程序,被廣泛應(yīng)用于事務(wù)處理、科學(xué)計(jì)算、工業(yè)控制、數(shù)據(jù)庫技術(shù)等領(lǐng)域。此次設(shè)計(jì)語言環(huán)境也選用C語言。GTK是Linux平臺下比較好的一個(gè)C語言圖形開發(fā)工具,所以本次也選擇了GTK圖形開發(fā)工具。貪吃蛇游戲選題背景隨著人們生活品質(zhì)的提高,游戲進(jìn)入人們的視野,電腦游戲也越來越多元化,貪食蛇就是其中一種。貪吃蛇這一游戲簡單易行、操作方便和娛樂性較強(qiáng),在很大程度上滿足人們對游戲的追求和喜愛。這一款游戲緊緊地抓住了人們的心理,雖然簡單,卻起樂無窮,貪食蛇游戲操作簡單方便,老少皆宜,是一款不錯(cuò)的小游戲。該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對于一直處于高壓下的現(xiàn)代人是很好的放松工具。?貪吃蛇設(shè)計(jì)概述該游戲的功能包括:開始游戲、游戲等級和當(dāng)前速度顯示、退出游戲。開始游戲:玩家通過方向鍵去改變蛇的行動(dòng)方向,每吃一個(gè)食物蛇身加長,分?jǐn)?shù)加1。?游戲等級和當(dāng)前速度顯示:玩家可以即時(shí)了解蛇的當(dāng)前狀態(tài)。退出游戲:“q”退出游戲。?2平臺簡介2.1系統(tǒng)介紹2.1.1Linux簡介Linux,全稱GNU/Linux,是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和Unix的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。伴隨著互聯(lián)網(wǎng)的發(fā)展,Linux得到了來自全世界軟件愛好者、組織、公司的支持。它除了在服務(wù)器方面保持著強(qiáng)勁的發(fā)展勢頭以外,在個(gè)人電腦、嵌入式系統(tǒng)上都有著長足的進(jìn)步。使用者不僅可以直觀地獲取該操作系統(tǒng)的實(shí)現(xiàn)機(jī)制,而且可以根據(jù)自身的需要來修改完善Linux,使其最大化地適應(yīng)用戶的需要。Linux不僅系統(tǒng)性能穩(wěn)定,而且是開源軟件。其核心防火墻組件性能高效、配置簡單,保證了系統(tǒng)的安全。在很多企業(yè)網(wǎng)絡(luò)中,為了追求速度和安全,Linux不僅僅是被網(wǎng)絡(luò)運(yùn)維人員當(dāng)作服務(wù)器使用,它還被當(dāng)作服務(wù)器,甚至當(dāng)作網(wǎng)絡(luò)防火墻,這是Linux的一大亮點(diǎn)。
Linux具有開放源碼、沒有版權(quán)、技術(shù)社區(qū)用戶多等特點(diǎn),開放源碼使得用戶可以自由裁剪,靈活性高,功能強(qiáng)大,成本低。尤其系統(tǒng)中內(nèi)嵌網(wǎng)絡(luò)協(xié)議棧,經(jīng)過適當(dāng)?shù)呐渲镁涂蓪?shí)現(xiàn)路由器的功能。這些特點(diǎn)使得Linux成為開發(fā)路由交換設(shè)備的理想開發(fā)平臺。
2.1.2Linux系統(tǒng)的主要特點(diǎn)Linux操作系統(tǒng)作為當(dāng)今主要的操作系統(tǒng)之一具有以下這些特點(diǎn):?開放性?多用戶多任務(wù)?良好的用戶界面設(shè)備獨(dú)立性?提供了豐富的網(wǎng)絡(luò)功能?可靠的安全系統(tǒng)?良好的可移植性?2.1.3Linux的組成LINUX的內(nèi)核:內(nèi)核是系統(tǒng)的核心,是運(yùn)行程序和管理?像磁盤和打印機(jī)等硬件設(shè)備的核心程序。?????LINUX?SHELL:?Shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。?????LINUX文件系統(tǒng):?Linux文件系統(tǒng)是文件存放在磁盤等存儲設(shè)備上的組織方法。Linux能支持多種目前主流的文件系統(tǒng),如EXT2、EXT3、FAT、VFAT、ISO9660、NFS等。LINUX應(yīng)用系統(tǒng):標(biāo)準(zhǔn)的Linux系統(tǒng)都有一整套稱為應(yīng)用程序的程序集,包括文本編輯器、編程語言、X?Window、辦公套件、Internet工具、數(shù)據(jù)庫等。2.2開發(fā)工具Linux的內(nèi)核主要是由C語言編寫的,所以C語言在Linux下的軟件開發(fā)具有獨(dú)到的優(yōu)勢。本次游戲設(shè)計(jì)用到的語言就是C。2.2.1C語言簡介C語言是目前世界上流行、使用最廣泛的高級程序設(shè)計(jì)語言。C語言對操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進(jìn)行操作的場合,用C語言明顯優(yōu)于其它高級語言,許多大型應(yīng)用軟件都是用C語言編寫的。C語言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫它是數(shù)值計(jì)算的高級語言。C語言的特點(diǎn)有:?簡潔緊湊、靈活方便。運(yùn)算符豐富。數(shù)據(jù)結(jié)構(gòu)豐富。??C是結(jié)構(gòu)式語言。???(5)?C語法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大。???(6)?C語言允許直接訪問物理地址,可以直接對硬件進(jìn)行操作。2.2.2GTK簡介GTK(GIMP?Toolkit)是一套跨多種平臺的圖形工具包,按LGPL許可協(xié)議發(fā)布的。雖然最初是為GIMP寫的,但目前已發(fā)展為一個(gè)功能強(qiáng)大、設(shè)計(jì)靈活的一個(gè)通用圖形庫。特別是被GNOME選中使得GTK+廣為流傳,成為Linux下開發(fā)圖形界面的應(yīng)用程序的主流開發(fā)工具之一,當(dāng)然GTK+并不要求必須在Linux上,事實(shí)上,目前GTK+已經(jīng)有了成功的windows版本。?2.2.3Linux編譯工具gcc介紹GCC是一個(gè)用于linux系統(tǒng)下編程的編譯器。GCC=GNU?Compiler?Collection,是由Stallman所開發(fā)的linux下的編譯器,可以編譯的語言包括:C,?C++,?Objective-C,?Fortran,?Java,Ada等。不過,現(xiàn)在GCC也有了許多Win32下的移植版本。如今的GCC借助于他的特性,具有了交叉編譯器的功能,即在一個(gè)平臺下編譯另一個(gè)平臺的代碼。?2.3GTK環(huán)境的搭建我們以Linux系統(tǒng)Ubuntu為例簡要介紹GTK環(huán)境的搭建,Ubuntu桌面環(huán)境是gnome。gnome就是使用GTK+編寫,所以運(yùn)行環(huán)境不需要另外配置了,要做的是安裝開發(fā)所需要的環(huán)境。?剛安裝好的Ubuntu已經(jīng)默認(rèn)安裝了gcc,但是并沒有安裝所需要的頭文件,我們需要手動(dòng)添加,使用命令:sudo?apt-get?install?build-essential?然后再安裝gnome開發(fā)包,使用命令:sudo?apt-get?install?gnome-core-devel?系統(tǒng)會自動(dòng)找到所依賴的庫,并一起下載下來這樣安裝過后使用下面的命令編譯上面的代碼:?????gcc?main.c?-o?main?`pkg-config?--cflags?--libs?gtk+-2.0?注意,這里的`是鍵盤上1左面的反引號,不是單引號。?KDE桌面配置GTK,步驟也類似,但是需要先安裝GTK的運(yùn)行環(huán)境。本次開發(fā)所使用的操作系統(tǒng)平臺是Fedora?12完整版?安裝時(shí)選擇安裝GTK開發(fā)工具與gnome桌面,因此當(dāng)系統(tǒng)完成安裝所有GTK的運(yùn)行和開發(fā)環(huán)境就已搭建好。3系統(tǒng)分析3.1可行性分析3.1.1技術(shù)可行性本系統(tǒng)的設(shè)計(jì)要求是一個(gè)能在Linux操作系統(tǒng)下運(yùn)行且界面美觀運(yùn)行穩(wěn)定,將來可能用于嵌入式移植的系統(tǒng)。所以,選擇C語言與GTK技術(shù)來實(shí)現(xiàn)本系統(tǒng)。C語言是一門成熟的高級語言,可用于開發(fā)各種系統(tǒng),也可用于開發(fā)游戲系統(tǒng)。同時(shí)C語言也擁有相當(dāng)多的技術(shù)人員。GTK是Linux下的一個(gè)圖形化編程工具,其開發(fā)出來的程序能在裝有GTK環(huán)境的Linux系統(tǒng)下順利運(yùn)行??梢哉f在技術(shù)方面開發(fā)此系統(tǒng)不會有什么問題。3.1.2經(jīng)濟(jì)可行性隨著手機(jī)和電腦的普及,這樣的小游戲也將隨著普及因此其需求也將不斷上升,而由于技術(shù)的成熟與為數(shù)眾多的開發(fā)人員使得此系統(tǒng)的開發(fā)并不困難,再者此系統(tǒng)運(yùn)行的平臺Linux操作系統(tǒng)是開源和免費(fèi)的,所以開發(fā)此系統(tǒng)的成本并不會很高。因此此系統(tǒng)具有相當(dāng)?shù)慕?jīng)濟(jì)利益,到時(shí)候我們也可以靜觀其成。3.1.3操作可行性本系統(tǒng)是一個(gè)簡單的單機(jī)游戲系統(tǒng),對于這樣一個(gè)系統(tǒng),其操作只需要使用簡單的幾個(gè)按鍵和鼠標(biāo)點(diǎn)擊按鈕就可以實(shí)現(xiàn),因此本系統(tǒng)的操作簡單易記,可以說一看就會的,系統(tǒng)在操作上是不會存在問題的,本系統(tǒng)需要在Linux操作系統(tǒng)下運(yùn)行,用戶上手也快,有著很好的游戲體驗(yàn)。3.2需求分析3.2.1功能需求本系統(tǒng)是一個(gè)簡單的單機(jī)游戲,界面分為兩個(gè)部分。一個(gè)是游戲區(qū),在游戲區(qū)中,用戶可通過鍵盤上的W、S、A和D來控制蛇的移動(dòng)方向,及時(shí)了解貪吃蛇當(dāng)前的狀態(tài)。用戶可通過q隨時(shí)退出游戲。另一個(gè)是日志區(qū),包含游戲的玩法介紹和說明。3.2.2性能要求游戲操作要求簡單易行,游戲過程中畫面移動(dòng)要流暢,通過鍵盤對蛇移動(dòng)方向控制時(shí)無明顯延遲,由于本系統(tǒng)將來有可能在嵌入式Linux上移植,而嵌入式系統(tǒng)一般存儲較小,處理器的處理速度也不是很快,因此本系統(tǒng)對內(nèi)存和處理器的使用的要求都要盡可能的小。3.2.3運(yùn)行要求本系統(tǒng)由于要使用到GTK圖形化編程工具,而圖形化編程工具GTK開發(fā)出來的程序需要有GTK環(huán)境才能運(yùn)行,由于是用C語言實(shí)現(xiàn),因此系統(tǒng)對硬件的要求并不是很高。所以本系統(tǒng)的運(yùn)行要求是搭建有GTK環(huán)境或是安裝gnome桌面環(huán)境的Linux操作系統(tǒng)。?4系統(tǒng)概要設(shè)計(jì)4.1程序初始化程序的初始化主要由函數(shù)initsnake()在游戲開始時(shí)對蛇的進(jìn)行初始化賦值,每次重新開始游戲時(shí),蛇都會恢復(fù)為原始狀態(tài),游戲模式與地圖不變。4.2程序流程4.2.1系統(tǒng)模塊本系統(tǒng)分為:創(chuàng)建日志窗口WINDOW*logwin模塊;蛇初始化initshake()模塊、創(chuàng)建新游戲窗口WINDOW*newgame()模塊;游戲中,蛇通過跑斷是否撞墻或吃到自己來判斷蛇的死亡。4.2.2系統(tǒng)流程本游戲作為一個(gè)簡單的linux小游戲,當(dāng)運(yùn)行程序是默認(rèn)程序開始啟動(dòng),程序啟動(dòng)后,隨著所吃食物的增多,每當(dāng)吃到一定程度的食物,則系統(tǒng)會提示“LevelUP!”,隨著等級的升高,蛇的移動(dòng)速度會越來越快。游戲過程中,玩家可以按“q”或“Q”來終止游戲,如果蛇死亡則系統(tǒng)提示“Gameover!”,玩家可以選擇重新開始游戲和退出。系統(tǒng)流程圖如下圖4-1所示:圖4-1系統(tǒng)流程圖系統(tǒng)構(gòu)架圖如下圖4-2所示:圖4-2系統(tǒng)構(gòu)架圖5系統(tǒng)詳細(xì)設(shè)計(jì)5.1系統(tǒng)界面用戶界面是現(xiàn)代軟件重要的組成部分,界面的好壞對于游戲軟件來說也相當(dāng)?shù)闹匾?,因?yàn)橐粋€(gè)用戶友好的界面能讓玩家在游戲過程中感覺更舒心,而一個(gè)不友好的界面將使游戲的品質(zhì)大打折扣。本系統(tǒng)界面的設(shè)計(jì)遵循如下的指導(dǎo)規(guī)則:?讓用戶駕馭軟件,而不是軟件駕馭用戶。盡可能減少用戶的記性。?保持界面的一致性。游戲界面如圖5-1所示:圖5-1主界面游戲界面:標(biāo)志著貪吃蛇的活動(dòng)范圍,主要為游戲顯示區(qū);另外還有等級劃分和速度劃分,簡單明了。游戲界面窗口代碼如下:
#define
INITRUNLOG()logwin
=
newlogw()
#define
GAMEWIN_YLEN
15//設(shè)計(jì)游戲窗口的寬度
#define
GAMEWIN_XLEN
60//設(shè)計(jì)游戲窗口的長度#define
RUNLOG(str)
runlog(logwin,
str)//代表蛇的移動(dòng)界面圖5-2游戲界面圖日志界面:日志界面中主要描述貪吃蛇的操作按鍵以及如何退出游戲日志界面代碼如下:#define
LOGWIN_YLEN
7//使日志界面的寬度為7#define
LOGWIN_XLEN
(GAMEWIN_XLEN)//使日志界面的長度與游戲界面一樣
圖5-3日志界面圖5.2對象模型設(shè)計(jì)在本系統(tǒng)中對象模型的設(shè)計(jì)主要是蛇的設(shè)計(jì)、食物的設(shè)計(jì)。蛇的設(shè)計(jì)主要是通過drawsnakew()函數(shù)畫出蛇的身體。而食物也是通過drawfoodw()函數(shù)畫出。蛇身代碼如下:
void
drawsnakew(WINDOW
*win,
struct
TSnake
*psnake)
{
static
int
taily
=
0;
static
int
tailx
=
0;
if
(taily
!=
0
&&
tailx
!=
0)
{
mvwaddch(win,
taily,
tailx,
'
');
}食物代碼如下:
void
drawfoodw(WINDOW
*win,
struct
TFood
*pfood,
struct
TSnake
*psnake)
{
do
{
pfood->y
=
random()
%
(GAMEWIN_YLEN
-
1)
+
1;
pfood->x
=
random()
%
(GAMEWIN_XLEN
-
1)
+
1;
}
while
(False
==
checkfood(pfood,
psnake));
checkfood(pfood,
psnake);
mvwaddch(win,
pfood->y,
pfood->x,
SHAPE_FOOD);
wrefresh(win);
}圖5-4中***就是蛇,@即是食物。圖5-45.3食物及蛇狀態(tài)的初始化及食物的出現(xiàn)蛇狀態(tài)的初始化是由定義蛇結(jié)構(gòu)體時(shí)初始化決定的,每一次開始蛇的長度,出現(xiàn)位置和移動(dòng)方向都是一樣的,它們長度都為4個(gè)結(jié)點(diǎn),方向都向右。無論是在游戲的開始還是進(jìn)行中,食物都是隨機(jī)出現(xiàn)的,通過checkfood()函數(shù)隨機(jī)產(chǎn)生食物出現(xiàn)的坐標(biāo),在產(chǎn)生的隨機(jī)坐標(biāo)上畫出食物。5.4游戲運(yùn)行中的設(shè)計(jì)思路游戲中蛇的運(yùn)動(dòng)是靠通過對畫面的不斷清除與重畫而實(shí)現(xiàn)的,每一次運(yùn)動(dòng)時(shí)先用背景色擦除掉原有蛇的圖像,再將蛇畫在其新出現(xiàn)的位置,由于每一次擦除與重畫間隔的時(shí)間非常短,利用人的視覺暫留性,讓蛇看上去就像在連續(xù)不斷的運(yùn)動(dòng)。而食物未被吃前,傳送點(diǎn)和墻體被擦除后重畫的位置與原來一樣,所以讓人感覺其并沒有變化。?蛇身的移動(dòng)與運(yùn)動(dòng)方向主要是受頭結(jié)點(diǎn)控制,因?yàn)樯呙恳淮芜\(yùn)動(dòng)就是靠后一結(jié)點(diǎn)畫在前一結(jié)點(diǎn)的位置上來實(shí)現(xiàn)的,所以對蛇的控制主要是對頭結(jié)點(diǎn)的控制。用戶通過鍵盤上的w、s、a和d對蛇身進(jìn)行操控。5.5游戲規(guī)則本系統(tǒng)是一個(gè)簡單的單機(jī)游戲,界面分為兩個(gè)部分。用戶可通過鍵盤上的W、S、A和D來控制蛇的移動(dòng)方向,及時(shí)了解貪吃蛇當(dāng)前的狀態(tài)。用戶可通過q隨時(shí)退出游戲。5.6游戲?qū)崿F(xiàn)及其代碼5.6.1蛇的移動(dòng)蛇的移動(dòng)方向主要受頭結(jié)點(diǎn)控制,所以每次畫蛇時(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的值不變。蛇身移動(dòng)代碼如下:?void
movesnake(struct
TSnake
*psnake)
{
int
hy
=
psnake->head->y;
int
hx
=
psnake->head->x;
psnake->head
=
GetSnakeTail(psnake);
switch
(psnake->dir)
{
case
DIR_UP:
psnake->head->y
=
hy
-
1;
psnake->head->x
=
hx;
break;
case
DIR_DOWN:
psnake->head->y
=
hy
+
1;
psnake->head->x
=
hx;
break;
case
DIR_LEFT:
psnake->head->y
=
hy;
psnake->head->x
=
hx
-
1;
break;
case
DIR_RIGHT:
psnake->head->y
=
hy;
psnake->head->x
=
hx
+
1;
break;
5.6.2蛇的死亡當(dāng)蛇頭的值與蛇身或與墻的值相等時(shí),蛇即算死亡,代碼如下:
void
gameover(WINDOW
*win,
char
*str)
{
mvwprintw(win,
(int)(GAMEWIN_YLEN/2),
(GAMEWIN_XLEN/2
-
strlen(str)/2),
str);
mvwprintw(win,
(int)(GAMEWIN_YLEN/2
+
1),
20,
"Press
any
key
to
quit...");
wrefresh(win);
}6調(diào)試及測試結(jié)果分析6.1系統(tǒng)測試1測試用例:?使蛇經(jīng)過各個(gè)邊界的情況。使蛇達(dá)到各個(gè)傳送點(diǎn)。?(3)測試蛇死亡和游戲時(shí)間到的情況。?(4)測試使蛇撞墻。(5)測試軟件的各個(gè)命令。?2預(yù)期出現(xiàn)的情況:?蛇能夠從一方邊界進(jìn)去及時(shí)的從另一邊界出來。蛇到達(dá)傳送點(diǎn)時(shí)能夠正確的從被傳送點(diǎn)出來。?(3)當(dāng)蛇死亡時(shí)和時(shí)間到了的時(shí)候,能夠?qū)崿F(xiàn)游戲停止和正確輸出游戲信息。?(4)當(dāng)蛇撞墻將死亡。?(5)系統(tǒng)能正確響應(yīng)命令時(shí)的操作。3實(shí)際結(jié)果:?游戲測試的結(jié)果基本上符合預(yù)期目標(biāo),但也還有幾個(gè)小問題。6.2測試出現(xiàn)的問題游戲過程中,當(dāng)用戶以非常快的速度同時(shí)按下幾個(gè)控制鍵,蛇有可能會出現(xiàn)死亡現(xiàn)象。分析原因有可能是當(dāng)以很快的速度按下多個(gè)控制鍵時(shí)蛇的方向的值已經(jīng)變化而實(shí)際移動(dòng)方向卻未來得及改變,在這同時(shí)又按下了另一方向鍵,由此蛇就直接按后一方向的值的方向運(yùn)動(dòng),于是就發(fā)生撞到自己死亡的現(xiàn)象。??貪吃蛇到達(dá)邊界時(shí)不能及時(shí)從另一邊出現(xiàn)。?系統(tǒng)雖然存在些問題,但系統(tǒng)的功能與模塊都成功實(shí)現(xiàn)且系統(tǒng)總體運(yùn)行良好且穩(wěn)定,系統(tǒng)的下一階段將主要解決這些問題。6.3系統(tǒng)需要的改進(jìn)與提高由于各種原因,本系統(tǒng)依然存在著許多缺點(diǎn)如有BUG的存在。針對本系統(tǒng)的一些缺點(diǎn),在后期開發(fā)時(shí)主要在以下方面進(jìn)行改進(jìn):?完善系統(tǒng),解決系統(tǒng)所出現(xiàn)的問題。改善與完善算法,使電腦的能變得高些。?增加游戲地圖、游戲模式和游戲難度選擇,使游戲的可玩性大大增加。加上網(wǎng)絡(luò)功能,實(shí)現(xiàn)游戲更好的交互。?豐富界面,使界面更美觀與擁有良好的可操作性。?對游戲進(jìn)行優(yōu)化,使游戲具有更廣闊的前景。結(jié)論Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和Unix的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。Linux不僅系統(tǒng)性能穩(wěn)定,而且是開源軟件。其核心防火墻組件性能高效、配置簡單,保證了系統(tǒng)的安全。在很多企業(yè)網(wǎng)絡(luò)中,為了追求速度和安全,Linux不僅僅是被網(wǎng)絡(luò)運(yùn)維人員當(dāng)作服務(wù)器使用,它還被當(dāng)作服務(wù)器,甚至當(dāng)作網(wǎng)絡(luò)防火墻。Linux具有開放源碼、沒有版權(quán)、技術(shù)社區(qū)用戶多等特點(diǎn),開放源碼使得用戶可以自由裁剪,靈活性高,功能強(qiáng)大,成本低。尤其系統(tǒng)中內(nèi)嵌網(wǎng)絡(luò)協(xié)議棧,經(jīng)過適當(dāng)?shù)呐渲镁涂蓪?shí)現(xiàn)路由器的功能。這些特點(diǎn)使得Linux成為開發(fā)路由交換設(shè)備的理想開發(fā)平臺。
致謝在此感謝我們linux課程的老師,是老師孜孜不倦的教導(dǎo),是老師的教導(dǎo)讓我們能夠成功在linux的環(huán)境之下成功的運(yùn)行出貪吃蛇這樣的小游戲,不僅增加了我們對未來研究更困難的課題的信心,也豐富了我們的課外生活,讓我們的生活變得更加的多姿多彩。同樣還要感謝我們的室友,在我們電腦出現(xiàn)問題的時(shí)候,是室友無私的奉獻(xiàn),幫助我們解決了難題。正是因?yàn)橛心銈兊膸椭?,使我們在相處和學(xué)習(xí)的過程中收獲頗多,互相成長。本論文編寫過程中還得到了很多朋友的支持和幫助,限于篇幅,雖然不能對你們一一表示感謝,但對你們一樣心存感激。附錄:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/time.h>#include<sys/types.h>#include<unistd.h>#include<ncurses.h>#defineTBoolint#defineTrue1#defineFalse0#defineSHAPE_FOOD'@'#defineSHAPE_SNAKE'*'#defineGAMEWIN_YLEN15#defineGAMEWIN_XLEN60#defineLOGWIN_YLEN7#defineLOGWIN_XLEN(GAMEWIN_XLEN)#defineLOGBUF_NUM(LOGWIN_YLEN-2)#defineLOGBUF_LEN(GAMEWIN_XLEN-2)#defineMAXLEVEL12#defineGetSnakeTail(s)((s)->head->front)WINDOW*logwin;#defineINITRUNLOG()logwin=newlogw()#defineRUNLOG(str)runlog(logwin,str)#defineDESTROYRUNLOG()delwin(logwin)intg_level;enumTDirection{DIR_UP,DIR_DOWN,DIR_LEFT,DIR_RIGHT};structTFood{inty;intx;};structTSnakeNode{inty;intx;structTSnakeNode*front;};structTSnake{intlength;structTSnakeNode*head;enumTDirectiondir;};intrefreshgamew(WINDOW*win,structTSnake*psnake);voidmovesnake(structTSnake*psnake);intchecksnake(structTFood*pfood,structTSnake*psnake);voidsnakegrowup(structTFood*pfood,structTSnake*psnake);voidgameover(WINDOW*win,char*str);structTSnakeNode*newsnakenode(structTSnakeNode**ppsnode,inty,intx);WINDOW*newgamew();structTSnake*initsnake();voiddestroysnake(structTSnake*psnake);voiddrawsnakew(WINDOW*win,structTSnake*psnake);voiddrawfoodw(WINDOW*win,structTFood*pfood,structTSnake*psnake);TBoolcheckfood(structTFood*pfood,structTSnake*psnake);WINDOW*newlogw();voidrunlog(WINDOW*win,char*str);voidcleanline(WINDOW*win,inty,intx);intmain(){initscr();raw();noecho();keypad(stdscr,TRUE);curs_set(0);refresh();g_level=1;INITRUNLOG();RUNLOG("Press'q'or'Q'toquit.");RUNLOG("Press'w/s/a/d'or'W/S/A/D'tomovethesnake.");RUNLOG("Info:");WINDOW*gwin=newgamew();structTSnake*psnake=initsnake();drawsnakew(gwin,psnake);while(refreshgamew(gwin,psnake)>=0);getch();destroysnake(psnake);delwin(gwin);DESTROYRUNLOG();endwin();return0;}intrefreshgamew(WINDOW*win,structTSnake*psnake){staticTBoolffood=False;structTFoodpfood;if(!ffood){drawfoodw(win,&pfood,psnake);ffood=True;}intkey=-1;fd_setset;FD_ZERO(&set);FD_SET(0,&set);structtimevaltimeout;timeout.tv_sec=0;timeout.tv_usec=(6-(int)(g_level/3))*100*1000;if(select(1,&set,NULL,NULL,&timeout)<0)return-1;if(FD_ISSET(0,&set)){while((key=getch())==-1);switch(key){case'w':case'W':(psnake->dir==DIR_DOWN)?:(psnake->dir=DIR_UP);break;case's':case'S':(psnake->dir==DIR_UP)?:(psnake->dir=DIR_DOWN);break;case'a':case'A':(psnake->dir==DIR_RIGHT)?:(psnake->dir=DIR_LEFT);break;case'd':case'D':(psnake->dir==DIR_LEFT)?:(psnake->dir=DIR_RIGHT);break;case'q':case'Q':RUNLOG("QuitGame!");gameover(win,"QuitGame!");return-1;default:break;}}movesnake(psnake);drawsnakew(win,psnake);switch(checksnake(&pfood,psnake)){case0:break;case1:ffood=False;if(++g_level>MAXLEVEL){RUNLOG("Win!!!");gameover(win,"Win!!!");return-1;}mvwprintw(win,GAMEWIN_YLEN-1,2,"Level:%d",g_level);mvwprintw(win,GAMEWIN_YLEN-1,30,"Speed:%d",(int)(g_level/3));wrefresh(win);RUNLOG("LevelUP!");snakegrowup(&pfood,psnake);break;default:RUNLOG("Gameover!");gameover(win,"Gameover!");return-1;}return1;}/***stuctTSnake是一個(gè)倒置的首尾相連的鏈表,head->front指向snake的尾部*如:[a]<-[b]<-[c]<-[d]a為head*|^snake移動(dòng)的時(shí)候,只用head指向d,*`'并且修改d的(y,x)為snake頭移動(dòng)到的位置.*/voidmovesnake(structTSnake*psnake){inthy=psnake->head->y;inthx=psnake->head->x;psnake->head=GetSnakeTail(psnake);switch(psnake->dir){caseDIR_UP:psnake->head->y=hy-1;psnake->head->x=hx;break;caseDIR_DOWN:psnake->head->y=hy+1;psnake->head->x=hx;break;caseDIR_LEFT:psnake->head->y=hy;psnake->head->x=hx-1;break;caseDIR_RIGHT:psnake->head->y=hy;psnake->head->x=hx+1;break;default:break;}}intchecksnake(structTFood*pfood,structTSnake*psnake){if(psnake->head->y<=0||psnake->head->y>=GAMEWIN_YLEN||psnake->head->x<=0||psnake->head->x>=GAMEWIN_XLEN){return-1;}structTSnakeNode*pnode=GetSnakeTail(psnake);inti=0;for(;i<psnake->length-1;++i,pnode=pnode->front)if(psnake->head->y==pnode->y&&psnake->head->x==pnode->x)return-1;if(psnake->head->y==pfood->y&&psnake->head->x==pfood->x)return1;return0;}voidsnakegrowup(structTFood*pfood,structTSnake*psnake){structTSnakeNode*pnode=(structTSnakeNode*)malloc(sizeof(structTSnakeNode));switch(psnake->dir){caseDIR_UP:pnode->y=psnake->head->y-1;pnode->x=psnake->head->x;break;caseDIR_DOWN:pnode->y=psnake->head->y+1;pnode->x=psnake->head->x;break;caseDIR_LEFT:pnode->y=psnake->head->y;pnode->x=psnake->head->x-1;break;caseDIR_RIGHT:pnode->y=psnake->head->y;pnode->x=psnake->head->x+1;break;default:break;}pnode->front=GetSnakeTail(psnake);psnake->head->front=pnode;psnake->head=pnode;++psnake->length;}voidgameover(WINDOW*win,char*str){mvwprintw(win,(int)(GAMEWIN_YLEN/2),(GAMEWIN_XLEN/2-strlen(str)/2),str);mvwprintw(win,(int)(GAMEWIN_YLEN/2+1),20,"Pressanykeytoquit...");wrefresh(win);}WINDOW*newgamew(){WINDOW*win=newwin(GAMEWIN_YLEN,GAMEWIN_XLEN,1,3);box(win,0,0);mvwprintw(win,0,2,"GAME");mvwprintw(win,GAMEWIN_YLEN-1,2,"Level:%d",g_level);mvwprintw(win,GAMEWIN_YLEN-1,30,"Speed:%d",(int)(g_level/3));wrefresh(win);returnwin;}structTSnake*initsnake(){structTSnake*psnake=(structTSnake*)malloc(sizeof(structTSnake));psnake->dir=DIR_LEFT;psnake->length=4;newsnakenode(&newsnakenode(&newsnakenode(&newsnakenode(&psnake->head,4,50)->front,4,53)->front,4,52)->front,4,51)->front=psnake->head;returnpsnake;}structTSnakeNode*newsnakenode(structTSnakeNode**ppsnode,inty,intx){*ppsnode=(structTSnakeNode*)malloc(sizeof(structTSnakeNode));(*ppsnode)->y=y;(*ppsnode)->x=x;(*ppsnode)->front=NULL;return*ppsnode;}voiddestroysnake(structTSnake*psnake){structTSnakeNode*psnode=GetSnakeTail(psnake);structTSnakeNode*ptmp=NULL;inti=0;for(;i<psnake->length;++i){ptmp=psnode;psnode=psnode->front;free(ptmp);}free(psnake);psnake=NULL;}voiddrawsnakew(W
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025有效的房屋買賣合同范本
- 2025年度土地流轉(zhuǎn)種植合同模板
- 2025區(qū)域代理經(jīng)銷合同書
- 國際商業(yè)美術(shù)設(shè)計(jì)師跨界學(xué)習(xí)的必要性試題及答案
- 助理廣告師考試多層次探討試題及答案
- 助理廣告師考試溝通效果增強(qiáng)策略試題及答案
- 大一考試試題及答案
- 王位之爭測試題及答案
- 內(nèi)科面試題目及答案
- 保留灌腸測試題及答案
- 2025年中國高消費(fèi)旅客出境游洞察
- 港口建設(shè)現(xiàn)場汛期風(fēng)險(xiǎn)管理及防范措施
- 大學(xué)生的人際交往困境與突破
- KTV店長年度工作總結(jié)
- 2024國家安全教育大學(xué)生讀本題庫
- 黃河文化(齊魯工業(yè)大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋齊魯工業(yè)大學(xué)
- 第十二周《遇見勞動(dòng)之美點(diǎn)亮成長底色》主題班會
- 鋁塑板發(fā)光字招牌施工方案
- 舊房改造施工設(shè)計(jì)方案
- DBJT15-工程泥漿原地處理和資源化利用技術(shù)標(biāo)準(zhǔn)
- 農(nóng)貿(mào)批發(fā)市場管理制度(3篇)
評論
0/150
提交評論