Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn).doc_第1頁
Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn).doc_第2頁
Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn).doc_第3頁
Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn).doc_第4頁
Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn).doc_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

嵌入式大作業(yè)Ubuntu平臺貪吃蛇游戲的設(shè)計與實(shí)現(xiàn)作 者 姓 名: 學(xué)科、專業(yè) : 學(xué) 號 : 指 導(dǎo) 教 師: 完 成 日 期: 大連大學(xué)Dalian University教師批閱頁選 題 分內(nèi) 容 分格 式 分態(tài) 度 分總 計: 分簡略給出評語或指出文中問題: 評 閱 人: 完成日期: 大連大學(xué)論文設(shè)計摘 要隨著計算機(jī)的普及,電腦游戲也慢慢融入人們的生活中,成為人們放松心情的一種方式。貪食蛇作為一款經(jīng)典且易于操作的游戲,一直受到人們的青睞,在繁忙的工作之余,玩貪食蛇游戲?qū)嵲谑羌仁″X又有趣味的休閑方式。本設(shè)計遵循C+程序設(shè)計的基礎(chǔ)原理,制作出一個精美的貪吃蛇小游戲。本設(shè)計采用Qt Creater作為主要的開發(fā)工具,很好的實(shí)現(xiàn)了貪吃蛇游戲的基本功能。關(guān)鍵詞:C+; 貪吃蛇;Qt Creator摘 要3前 言1第一章 Qt庫的優(yōu)點(diǎn)21.1可移植性21.2易用性21.3運(yùn)行速度2第二章 課程設(shè)計目的和要求42.1主要研究內(nèi)容42.2目標(biāo)(要求)42.3 課程設(shè)計任務(wù)內(nèi)容4第三章 詳細(xì)設(shè)計53.1設(shè)計思想53.1.1界面設(shè)計53.1.2數(shù)據(jù)結(jié)構(gòu)63.2函數(shù)設(shè)計83.2.1文件及函數(shù)組成83.3.流程圖93.3.1系統(tǒng)流程圖93.3.2函數(shù)流程圖11第四章 程序測試20第五章 設(shè)計心得與體會25參考文獻(xiàn)26附錄27前 言 Qt Creator是跨平臺的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購后推出的一款新的輕量級集成開發(fā)環(huán)境(IDE)。此 IDE 能夠跨平臺運(yùn)行,支持的系統(tǒng)包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。 Qt Creator 的設(shè)計目標(biāo)是使開發(fā)人員能夠利用 Qt 這個應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)。 在功能方面,Qt Creator 包括項(xiàng)目生成向?qū)?、高級?C+ 代碼編輯器、瀏覽文件及類的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、圖形化的 GDB 調(diào)試前端,集成 qmake 構(gòu)建工具等。 Qt Creator 主要是為了幫助新 Qt 用戶更快速入門并運(yùn)行項(xiàng)目,還可提高有經(jīng)驗(yàn)的 Qt 開發(fā)人員的工作效率。 使用強(qiáng)大的 C+ 代碼編輯器可快速編寫代碼 語法標(biāo)識和代碼完成功能輸入時進(jìn)行靜態(tài)代碼檢驗(yàn)以及提示樣式上下文相關(guān)的幫助代碼折疊括號匹配和括號選擇模式高級編輯功能 使用瀏覽工具管理源代碼 集成了領(lǐng)先的版本控制軟件,包括 Git、Perforce 和 Subversion開放式文件,無須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號在頭文件和源文件,或在聲明和定義之間切換為Qt跨平臺開發(fā)人員的需求而量身定制 集成了特定于Qt的功能,如信號與槽(Signals & Slots)圖示調(diào)試器,對Qt 類結(jié)構(gòu)可一目了然集成了Qt Designer可視化布局和格式構(gòu)建器只需單擊一下就可生成和運(yùn)行Qt項(xiàng)目。 雖然貪吃蛇游戲在我們的日常生活中是很常見的,但是作為普通的一款小游戲,他卻有著極強(qiáng)的生命力,它的簡單易行使之廣泛的存在于電腦,手機(jī)等電子產(chǎn)品載體上,加上變化無窮、引人入勝,使它成為了一款受人喜歡的小游戲。第一章 Qt庫的優(yōu)點(diǎn)GUI工具包(或GUI庫)是構(gòu)造圖形用戶界面(程序)所使用的一套按鈕、滾動條、菜單和其他對象的集合。在UNIX系統(tǒng)里,有很多可工使用的GUI庫,其中之一就是Qt庫,它是一個幾乎C+編程語言的工具包。由于Qt是基于C+而不是C,故他的有點(diǎn)是速度快、易于使用,并具有很好的可移植性。所以,當(dāng)需要開發(fā)Unix或MS windows環(huán)境下的GUI程序時,Qt是最佳選擇。1.1可移植性 Qt不只是適用于Unix,它同樣適用于MS Windows。Windows平臺下用標(biāo)準(zhǔn)庫Microsoft Foudation Classes(MFC,Microsoft 基類),它不適用于其他平臺。GTK或Xforms,又不能支持Windows平臺。既適合windows平臺又適合Linux平臺的GUI工具包,那就是Qt。1.2易用性 Qt是一個C+工具包,它由幾百個C+類構(gòu)成,在程序中可以使用這些類。Qt是基于C+構(gòu)造,所以具有OOP(object_oriented programming)的優(yōu)點(diǎn)。1.3運(yùn)行速度 Qt非常容易使用,而且速度也很快。這兩方面通常是不可能同時達(dá)到。GUI工具包,通常速度都不快,而Qt的這一有點(diǎn)歸功于Qt開發(fā)者的功勞,他們大大優(yōu)化了Qt的這一產(chǎn)品。Qt是一個GUI仿真工具包,這意味著它不使用任何本地工具包作調(diào)用。28大連大學(xué)論文設(shè)計第二章 課程設(shè)計目的和要求2.1主要研究內(nèi)容論述基于Qt下的貪吃蛇游戲設(shè)計。通過對Qt下的貪吃蛇游戲分析,結(jié)合游戲中的邏輯和操作需求,說明Qt下的貪吃蛇游戲設(shè)計的開發(fā)過程及各種技術(shù)細(xì)節(jié);結(jié)合所要開發(fā)的系統(tǒng)的特點(diǎn),采用Qt Creator開發(fā)工具。2.2目標(biāo)(要求)對基于Qt下的貪吃蛇游戲設(shè)計邏輯級操作分析。設(shè)計一個簡單,漂亮的貪吃蛇游戲用以玩耍2.3 課程設(shè)計任務(wù)內(nèi)容程序要求游戲時,分為兩種模式,允許穿墻模式和禁止穿墻模式,可以隨意選擇切換。禁止穿墻模式:一條蛇在的圍墻內(nèi), 圍墻內(nèi)會隨機(jī)出現(xiàn)一個食物通過鍵盤上的4個方向鍵控制蛇向上下左右4個方向移動,蛇頭接到食物,則表示食物被蛇吃掉,這時蛇的身體加長一節(jié),同時計10分。接著又出現(xiàn)食物等待被蛇吃掉。如果蛇在移動過程中,撞到墻壁或身體交叉(蛇頭撞到自己的身體),則游戲結(jié)束。分?jǐn)?shù)每增加100分,游戲等級升1級即速度加快1級。允許穿墻模式:如果蛇在移動過程中,撞到墻壁會穿過從該墻的對面?zhèn)鞒?,游戲不會結(jié)束,身體交叉(蛇頭撞到自己的身體) ,則游戲結(jié)束。其他記分、等級規(guī)則與禁止穿墻模式相同。第三章 詳細(xì)設(shè)計3.1設(shè)計思想3.1.1界面設(shè)計這個游戲程序的關(guān)鍵是表示蛇的圖形以及蛇的移動。用一個小小方格來表示蛇的一節(jié)身體,身體每長一節(jié),增加一個小方格。移動時必須從蛇頭開始,如果不按任何鍵,蛇自行在當(dāng)前方向上向前移動,當(dāng)游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當(dāng)按了有效的方向鍵后,首先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實(shí)現(xiàn)是從蛇頭的新位置開始畫出蛇的整個身體,在界面的游戲框中隨機(jī)出現(xiàn)一個靜止靜止不動的食物,用戶通過鍵盤來控制蛇的走向,當(dāng)蛇吃到食物時,分?jǐn)?shù)增加十分,界面開始更新,蛇的身體增加一節(jié),游戲框中又會隨機(jī)出現(xiàn)一個靜止不動的食物在禁止穿墻模式下,當(dāng)蛇頭碰到游戲框邊框的時候或者蛇頭碰到自己的身體的時候,游戲自動結(jié)束。在可以穿墻的模式下,蛇頭碰到游戲框邊框的時候,蛇會從該邊框的對面穿出,游戲不會結(jié)束,當(dāng)蛇頭碰到自己的身體的時候,游戲結(jié)束。兩種模式下,蛇每吃到一個食物,增加10分,分?jǐn)?shù)每累積夠百分,游戲等級增加1級,游戲速度加快1級,在游戲界面的上會有同步分?jǐn)?shù)和等級的數(shù)碼顯示。在游戲中,還增加了游戲暫停功能,當(dāng)游戲需要暫停時,按下暫停功能鍵p鍵,游戲在停,如果按下任意方向鍵,游戲繼續(xù)。3.1.2數(shù)據(jù)結(jié)構(gòu)QtSnake.h文件及類的設(shè)計如表3-1所示。表3-1文件名成員類型成員功能QtSnake.hpublicSnake(QWidget* = 0)容器選取privatechar SnakeBodyMax2 int header_Index,Int tail_Indexint eat_X,eat_Y int level int speed int score,eatNum int map_row,map_col int Dir int step int tempx,tempy bool CanGoThroughWall bool hasMoved 程序所需變量QLCDNumber* levelNumber QLCDNumber* scoreNumber QLabel* label QLabel* levelLabel QLabel* scoreLabel QLabel* setlabel Qtimer* timer QPushButton* button 布局選取void iniWidget() void iniConnect() bool isEating() bool isGameOver() void iniGame() void changeScore() void changeLevel() QColor getColor()功能函數(shù)private slotsvoid doMoveSnake()void setEnableGoThroughWall()信號槽函數(shù)protectedvoid paintEvent()void keyPressEvent()受保護(hù)函數(shù)類容器設(shè)計:class Snake : public QWidget Q_OBJECTpublic: Snake(QWidget* = 0);private: char SnakeBodyMax2; /存儲蛇的身體坐標(biāo)信息 int header_Index,tail_Index; /蛇頭、尾在數(shù)組的位置 int eat_X,eat_Y; /出現(xiàn)吃的位置 int level; /等級 int speed; /蛇的速度 int score,eatNum; /得分 int map_row,map_col; /地圖太小 int Dir; /當(dāng)前蛇移動方向 int step; /步距 int tempx,tempy; /蛇頭下一位置臨時存放 bool CanGoThroughWall; /是否能穿墻 bool hasMoved; /用于避免兩次方向鍵之間間隔太小造成的錯誤 QLCDNumber* levelNumber; /等級LED QLCDNumber* scoreNumber;/分?jǐn)?shù)LED QLabel* label;/游戲框 QLabel* levelLabel;/等級標(biāo)簽 QLabel* scoreLabel;/分?jǐn)?shù)標(biāo)簽 QLabel* setlabel;/模式標(biāo)示 Qtimer* timer;/游戲計時器 QPushButton* button;/選擇模式按鈕 void iniWidget();/初始化容器狀態(tài) void iniConnect();/信號連接 bool isEating();/蛇要吃食物 bool isGameOver();/判斷游戲結(jié)束 void iniGame();/初始化游戲 void changeScore();/更新得分 void changeLevel();/更新等級 QColor getColor();/食物變色private slots: void doMoveSnake();/蛇移動每一步狀態(tài) void setEnableGoThroughWall();/設(shè)置是否允許穿墻protected: void paintEvent(QPaintEvent *);/繪畫蛇身,食物 void keyPressEvent(QKeyEvent *event);/捕獲按鍵信號;3.2函數(shù)設(shè)計3.2.1文件及函數(shù)組成 源文件函數(shù)名稱功能main.cppmain總控函數(shù),增加了編碼格式,窗口標(biāo)題QtSnake.cppSnake:Snake(QWidget *parent)初始化容器的總體狀態(tài)void Snake:iniWidget()初始化容器中的各個窗口和標(biāo)簽的位置,字體大小,變量值void Snake:iniConnect()開啟模式選擇按鍵,方向鍵,暫停鍵的信號捕捉void Snake:iniGame()初始化游戲的速度、級別、食物分?jǐn)?shù),蛇身坐標(biāo),食物坐標(biāo),計分器,級別器void Snake:doMoveSnake()每一步做一次游戲結(jié)束判斷,然后改變蛇的狀態(tài),隨機(jī)出現(xiàn)食物void Snake:setEnableGoThroughWall()判斷穿墻變量,為真,設(shè)置為模式標(biāo)示為“可以穿墻”模式為假為“禁止穿墻”模式void Snake:changeScore()蛇吃到食物的分?jǐn)?shù)增加void Snake:changeLevel()改變游戲等級,速度bool Snake:isEating()蛇吃食物的狀態(tài)實(shí)現(xiàn)bool Snake:isGameOver()首先判斷游戲是否處于穿墻模式,穿墻模式下,蛇頭碰到自己的身體游戲結(jié)束,禁止穿墻模式下,蛇頭碰到邊框或者身體游戲結(jié)束,游戲結(jié)束返回tureVoid Snake:paintEvent()游戲開始時,在隨機(jī)坐標(biāo)畫出蛇身和食物,游戲中描繪蛇的運(yùn)動軌跡,并隨機(jī)補(bǔ)充食物void Snake:keyPressEvent()捕捉4個方向鍵和p鍵(暫停鍵)的信號QColor Snake:getColor()存放了8種顏色用于隨機(jī)選取3.3.流程圖3.3.1系統(tǒng)流程圖開始載入游戲,初始化游戲界面按任意方向鍵開始游戲,隨機(jī)出現(xiàn)一個食物,并用方向鍵控制蛇的游動方向游戲模式判斷是否碰到自己的身體是否碰到自己的身體 允許穿墻 禁止穿墻是否碰到墻壁 Y N N Y是否吃到食物 N Y蛇身增加1格,分?jǐn)?shù)加10吃掉食物數(shù)*10是否等于分?jǐn)?shù) Y N保持原狀等級加1,速度增加宣布死亡結(jié)束圖3.1大連大學(xué)論文設(shè)計3.3.2函數(shù)流程圖main函數(shù)流程圖如圖3.2所示開始調(diào)用游戲主控函數(shù)調(diào)用編碼函數(shù),選擇編碼UTF-8設(shè)置游戲窗口標(biāo)題貪吃蛇調(diào)用顯示窗口函數(shù),開始運(yùn)行游戲結(jié)束如圖3.2QColor Snake:getColor()函數(shù)流程圖如圖3.3所示開始將8種顏色放入一個8個元素的數(shù)組中隨機(jī)選擇一種顏色返回結(jié)束圖3.3Snake:Snake(QWidget *parent)函數(shù)流程圖如圖3.4所示開始初始化游戲窗口的位置,大小。默認(rèn)游戲模式為禁止穿墻調(diào)用:容器初始化容器,槽函數(shù)初始化信號函數(shù),游戲初始化函數(shù)結(jié)束圖3.4void Snake:iniWidget()函數(shù)流程圖如圖3.5所示開始初始化:分?jǐn)?shù)標(biāo)簽,分?jǐn)?shù)LED,等級標(biāo)簽,等級LED,模式標(biāo)示窗口(位置,大小,字體)初始化模式選擇按鈕的位置,大小,字體初始化提示窗口的位置,字體,大小初始化游戲框的位置,大小,邊框?qū)挾冉Y(jié)束圖3.5void Snake:iniConnect()函數(shù)流程圖如圖3.6所示開始捕捉信號:游戲控制鍵(上、下、右、左、暫停),模式改變按鈕,其他調(diào)用模式改變槽函數(shù)調(diào)用游戲控制槽函數(shù) 游戲控制鍵 模式改變按鈕 結(jié)束圖3.6void Snake:iniGame()函數(shù)流程圖如圖3.7所示開始初始化游戲:速度,吃食數(shù),分?jǐn)?shù),等級將分?jǐn)?shù),等級初始值顯示在LED上定義蛇身數(shù)組大小,隨機(jī)獲取蛇頭和食物坐標(biāo)時間暫時停止,暫時設(shè)定方向變量Dir=-1(沒有方向,等待方向鍵信號)結(jié)束圖3.7void Snake:doMoveSnake()函數(shù)流程圖如圖3.8所示開始游戲開始變量設(shè)為ture(游戲開始)判斷游戲是否為結(jié)束狀態(tài)蛇是否吃到食物游戲結(jié)束并顯示提示信息“game over”,游戲狀態(tài)設(shè)為最初狀態(tài)吃到食物,蛇身加長1格,分?jǐn)?shù)加10 Y N隨機(jī)出現(xiàn)食物,并獲取食物坐標(biāo)食物坐標(biāo)是否與蛇身重合 N Y將處理后的狀態(tài)更新 結(jié)束圖3.8void Snake:setEnableGoThroughWall()函數(shù)流程圖如圖3.9所示開始穿墻判斷變量取反判斷變量時ture/false ture false 禁止穿墻允許穿墻結(jié)束圖3.9void Snake:changeScore()函數(shù)流程圖如圖3.10所示開始蛇是否吃到食物 Y N分?jǐn)?shù)加10,并且在LED上顯示結(jié)束如圖3.10void Snake:changeLevel()函數(shù)流程圖如圖3.11所示開始吃掉的食物乘以10是否等于分?jǐn)?shù) Y N不做改變,將原有等級在LED上顯示等級加1,速度增加,吃食數(shù)量加10,并在LED顯示結(jié)束圖3.11bool Snake:isEating()函數(shù)流程圖如圖3.12所示開始判斷蛇頭的當(dāng)前坐標(biāo)是否等于食物的坐標(biāo) Y N沒有吃到返回false吃到食物返回ture結(jié)束圖3.12開始是否能穿墻bool Snake:isGameOver()函數(shù)流程圖如圖3.13所示 能 不能蛇頭是否碰到身體蛇頭是否碰上身體 N N蛇頭是否碰到墻壁 Y Y N Y函數(shù)返回ture(游戲結(jié)束)結(jié)束函數(shù)返回false(游戲繼續(xù)) 圖3.13void Snake:paintEvent(QPaintEvent *event)函數(shù)流程圖如圖3.14所示開始i = 蛇頭的映射 畫蛇的身體i != 蛇尾的映射 畫出蛇的一個身體 Y N N游戲處于激活狀態(tài) 畫食物在坐標(biāo)范圍內(nèi)隨機(jī)畫出一個食物 結(jié)束 圖3.14void Snake:keyPressEvent(QKeyEvent *event)函數(shù)流程圖如圖3.15所示開始捕捉按鍵信號:方向鍵(上、下、右、左),暫停鍵(p),其他判斷輸入的方向 方向鍵 其他 上 下 右 左是否與運(yùn)動垂直是否與運(yùn)動垂直是否與運(yùn)動垂直是否與運(yùn)動垂直 暫停鍵 暫停游戲 是 否 是 否 是 否 是 否向上運(yùn)動向上運(yùn)動向上運(yùn)動向上運(yùn)動向上運(yùn)動向上運(yùn)動向上運(yùn)動向上運(yùn)動結(jié)束 圖3.15第四章 程序測試運(yùn)行程序,默認(rèn)是“禁止穿墻”模式,分?jǐn)?shù)為0,等級為0。按下任意方向鍵,游戲開始,游戲窗口出現(xiàn)一個食物。此時蛇向下運(yùn)動,分?jǐn)?shù)是30吃到一個食物后,分?jǐn)?shù)加10蛇吃掉10個食物,吃食數(shù)乘以10,等于分?jǐn)?shù)100,等級加1“禁止穿墻”模式下蛇碰到墻壁游戲結(jié)束,消息框彈出“禁止穿墻”模式下蛇碰到自己身體游戲結(jié)束,消息框彈出“穿墻模式”下蛇從左邊墻壁傳入,從右邊墻壁傳出“穿墻模式”下蛇從下邊墻壁傳入,從上邊墻壁傳出“禁止穿墻”模式下蛇碰到自己身體游戲結(jié)束,消息框彈出第五章 設(shè)計心得與體會 貪吃蛇是家喻戶曉的益智類小游戲,選擇這個題目一是為了將自己的所學(xué)知識加以運(yùn)用,二是一直以來貪吃蛇這個游戲就深深地吸引著我,它的制作方法對于以前的我而言都是很神秘的。這次編程我通過自己的所學(xué)知識把它剖析開來,真真正正的了

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論