freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

本科-基于qt的貪吃蛇游戲設(shè)計與實現(xiàn)-資料下載頁

2024-12-04 11:00本頁面

【導讀】隨著社會的發(fā)展,人們生活的步調(diào)日益加快,越來越多的人加入了全球化的世界。人們不再拘泥于一小塊天地,加班、出差成為現(xiàn)代人不可避免的公務(wù)。隨時隨地娛樂的游戲成了必需品。貪吃蛇簡單易行、操作方便、娛樂性極強,很好地滿。足了玩家的需求。本系統(tǒng)開發(fā)平臺為Windows7,應(yīng)用基于Qt跨平臺的圖形用戶界面應(yīng)用程序框架,程序設(shè)計語言采用C++。采用軟件工程的方法進行需求分析、總體設(shè)計、總體實現(xiàn)和測試。在程序設(shè)計中,探討。了用圖形框架的方法解決問題,對設(shè)計其他圖形用戶界面具有重要的實際意義。本設(shè)計實現(xiàn)了一個簡單的貪吃蛇小游戲,該游戲不僅實現(xiàn)了簡單的游戲操作功能,還實現(xiàn)了靈活的運作功能,而且具有簡潔大方的圖文外觀。此系統(tǒng)具有良好的界面和必。要的交互信息,使操作人員能快捷簡單的進行操作,給玩家一個有趣的游戲。

  

【正文】 體 ,應(yīng)將蛇的最后一節(jié)用背景覆蓋。食物的出現(xiàn)和消失也可以用畫矩形塊和 覆蓋矩形塊方法實現(xiàn)。 北京郵電大學畢業(yè)設(shè)計 15 6 貪吃蛇設(shè)計 系統(tǒng)的輸入輸出 輸入 在該程序設(shè)計中幾乎沒有什么從鍵盤你輸入的數(shù)據(jù),所有的程序所運用的數(shù)據(jù)都是有程序本身提供的,由用戶來選擇,程序?qū)⒏鶕?jù)用戶的選擇來處理相應(yīng)的數(shù)據(jù),如在玩家改變游戲設(shè)置的時候,程序會根據(jù)玩家選擇的設(shè)置來改變圍墻的可穿性。 輸出 在該程序中,輸出的數(shù)據(jù)有玩家單局游戲的總時間,升到的等級,蛇吃到食物的個數(shù),以及目前的得分,玩家可以通過點擊右鍵打開菜單,了解一些相關(guān)信息,當玩家控制的蛇死亡后要輸出一個消息 GAME OVER表示蛇的死亡。 蛇的移動 蛇的移動主要通過改變蛇的坐標位置,然后通過重繪蛇的位置,這樣就實現(xiàn)了蛇的移動 ,具體的為:從構(gòu)成蛇身的所有節(jié)點的最后一點開始,依次將前一個節(jié)點的坐標賦值為后一個節(jié)點,這樣就實現(xiàn)了蛇身的移動。接下來是蛇頭的移動,蛇頭的移動要根據(jù)蛇的運動方向來做出相應(yīng)的移動。 設(shè)計基礎(chǔ) 在設(shè)計中用到了節(jié)、數(shù)組、坐標系來定義一些重要內(nèi)容,以便于程序的編寫。以下進行簡述 ( 1)節(jié) 一條蛇可以看成由許多正方形的“小格子”拼湊成,稱作節(jié)。節(jié)是蛇身上最小的單位。 ( 2)數(shù)組 用來保存每 一段的狀態(tài),數(shù)組的元素單位是節(jié)。且鏈表的第一個元素表示蛇的尾部。 ( 3)坐標系 以左上角那點為( 0,0),向右則 x遞增,向下則 y遞增。 數(shù)據(jù) 字典 設(shè)計中用到的數(shù)據(jù)的名稱、類型、含義如表 61 所示。 表 61 數(shù)據(jù)的類型及含義 名稱 類型 含義 北京郵電大學畢業(yè)設(shè)計 16 SnakeBody[Max][2] int 蛇頭在數(shù)組中的位置 header_Index char 蛇的身體坐標信息 tail_Index int 蛇尾在數(shù)組中的位置 eat_X int 出現(xiàn)食物的位置的橫坐標 eat_Y int 出現(xiàn)食物的 位置的縱坐標 level int 游戲的等級 speed int 蛇的運行速度 score int 出現(xiàn)食物的位置的橫坐標 eatNum int 貪吃蛇吃到食物的數(shù)量 map_row int 貪吃蛇運動范圍的長度 map_col int 貪吃蛇運動范圍的寬度 Dir int 當前貪吃蛇移動的方向 step int 貪吃蛇移動的步長 tempx int 蛇頭下一個臨時存放位置的橫坐標 tempy int 蛇頭下一個臨時存放位置的縱坐標 CanGoThroughWall bool 判斷貪吃 蛇是否能夠穿墻 hasMoved bool 用于避免兩次方向鍵之間間隔太小造成的錯誤 處理流程 開 始顯 示 游 戲 主 界 面和 操 作 控 制 界 面用 戶 的 各 種操 作 指 令執(zhí) 行 相 應(yīng) 的 判 斷 處理執(zhí) 行 相 應(yīng) 的 操 作是否 判 斷 蛇 的 狀 態(tài)L i f e = t r u e結(jié) 束L i f e = f a l s e 圖 61 處理流程圖 根據(jù)要求的貪吃蛇結(jié)構(gòu)設(shè)計出相應(yīng)的貪吃蛇 處理 流程 圖(如圖 61 所示) 。 處理流程圖 基本概述了整個游戲的流程,首先打開游戲,彈出游戲的標題畫面,等待游戲的加載,之后進入游戲運行界面,在此界面點擊右鍵會出現(xiàn)游戲幫助菜單、游戲關(guān)于菜單。在主界面上有設(shè)置游戲難度按鈕,可以更改游戲難度,游戲開始后,可以通北京郵電大學畢業(yè)設(shè)計 17 過方向鍵控制貪吃蛇的運動 方向,也可以選擇 P 鍵使游戲暫停。當你控制的貪吃蛇接觸到蛇的自身身體時或墻壁時,游戲結(jié)束。 流程圖的主要作用是可以很直觀的了解到游戲的功能,同時,在繪制好流程圖后,在后面的編寫代碼時也比較明確。 系統(tǒng)的邏輯模型 系統(tǒng)的邏輯模型如圖 62 所示 圖 62 系統(tǒng)邏輯模型 功能與程序的關(guān)系 ,信息顯示界面。 1)貪吃蛇運動界面主要包括:食物的隨機出現(xiàn)位置 ,蛇的移動 2)信息顯示界面包括:得分顯示,等級顯示,難度顯示,游戲難度設(shè)置,游戲說明,退出 2. 與 程序的關(guān)系 貪吃蛇運動界面貪吃蛇的移動及吃到食物的發(fā)生,向信息顯示界面發(fā)出信號,刷新得分,并在達到一定限額提升等級。 信息顯示界面中的按鈕點擊事件,發(fā)出信號,設(shè)置貪吃蛇運動界面的限制性條件 。 北京郵電大學畢業(yè)設(shè)計 18 運行設(shè)計 運行控制 由用戶選擇游戲控制類別:開始、暫停、繼續(xù)、游戲設(shè)置、退出,不可以手動控制游戲級別,只能在達到一定界限,自動增加難度,這樣有助于循序漸進。 運行時間 蛇移動方法及食物的顏色變化長期占用資源,改變方向、吃到食物、產(chǎn)生新食物都是瞬發(fā)動作,只是瞬間占用系統(tǒng)資源。 7 貪吃蛇實現(xiàn) 程序系統(tǒng)的組織結(jié)構(gòu) 每個模塊 的名稱、標識符 explicit Snake(QWidget *parent = 0)。 北京郵電大學畢業(yè)設(shè)計 19 Class Snake 的 構(gòu)造函數(shù) ,設(shè)置 QWidget 的初始化信息,貪吃蛇運動區(qū)域的大小,調(diào)用其他初始化函數(shù) 。 ~Snake()。 Class Snake 的析構(gòu)函數(shù),用于釋放一些空間 。 void iniWidget()。 用于添加各類控件,并設(shè)置控件的屬性 。 void iniConnect()。 用于連接信號,使能夠在收到信號時,轉(zhuǎn)到相應(yīng)的函數(shù)處理 。 bool isEating()。 判斷貪吃蛇是否吃到食物 。 bool isGameOver()。 通過之前的設(shè)置信息,判斷游戲是否結(jié)束 。 void iniGame()。 用于初始化游戲,設(shè)置初始速度、等級、已吃食物數(shù)量及定時器等,并 隨機得到 貪吃蛇和食物 的初始坐標 。 void changeScore()。 更新并顯示得分 。 void changeLevel()。 更新并顯示等級,每增加 10個食物,升一級,并提高速度 。 QColor getColor()。 獲取隨機顏色 。 void paintEvent(QPaintEvent *)。 繪圖事件,繪制貪吃蛇、食物 。 void keyPressEvent(QKeyEvent *event)。 鍵盤處理事件, 捕獲按鍵信號 ,并作出相應(yīng)的處理 。 void doMoveSnake()。 實現(xiàn)蛇在當前方向下向前移動一步,并調(diào)用判斷是否吃到食物函數(shù)、判斷是否死亡函數(shù) 。 void setEnableGoThroughWall()。 設(shè)置是否可穿墻函數(shù),將結(jié)果顯示在信息顯示界 面 。 void timerEvent(QTimerEvent *)。 時間處理函數(shù),用于實現(xiàn)顯示游戲的時間 。 void InfoChange()。 操作信息顯示函數(shù), 實現(xiàn)彈出對話框,提示操作 說明 。 void AboutChange()。 游戲相關(guān)信息顯示函數(shù),實現(xiàn)彈出對話框,提示游戲相關(guān)信息 。 模塊之間的關(guān)系 此程序中各個模塊之間的關(guān)系如圖 71 所示 北京郵電大學畢業(yè)設(shè)計 20 圖 71 模塊關(guān)系圖 程序描述 目的和意義 該部分以窗體上的按鈕或鍵盤上的快捷鍵為用戶提供友好的控制手段。為工作量 繁大的用戶提供一個簡單而有趣的小游戲。 特點說明 程序交互性好,操作性強。易操作。簡單而有趣。 功能全面,如:開始新游戲、暫停、繼續(xù)、設(shè)置難度、查看游戲幫助 、退出游戲。 程序 詳解 構(gòu)造函數(shù) Snake(QWidget *parent) Snake::Snake(QWidget *parent) : QWidget(parent), ui(new Ui::Snake),step(15) { uisetupUi(this)。 setFocusPolicy(Qt::StrongFocus)。 //如何讓 QWidgt 接收鍵盤事件和點擊事件 setFixedSize(630,340)。 //設(shè)置 QWidgt 大小 qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()))。 //取時間作為產(chǎn)生隨機數(shù)的種子 map_row=Height/step。 //設(shè)置貪吃蛇活動區(qū)域大小 map_col=Width/step。 CanGoThroughWall=false。 //默認初始化難度設(shè)置為禁止穿墻 //初始化時分秒為 0 北京郵電大學畢業(yè)設(shè)計 21 sec=0。min=0。hour=0。 iniWidget()。 iniConnect()。 iniGame()。 } 通過這個函數(shù)實現(xiàn)了 QWidget 的簡單屬性設(shè)置,包括 QWidget 的聚 焦及大小,初始化了貪吃蛇的運動范圍,默認設(shè)置游戲難度為禁止穿墻。取用時間作為產(chǎn)生隨機數(shù)的種子,用于之后貪吃蛇的蛇身初始化,食物的初始化。初始化游戲時間為 00:00:00。 通過調(diào) 用 iniWidget()函數(shù)初始化了 Widget 中的 控件 信息等,通過調(diào)用 iniConnect()函數(shù)初始化了連接信號,通過調(diào)用 iniGame()函數(shù)初始化了游戲的基本信息。 初始化界面函數(shù) iniWidget() void Snake::iniWidget() { timeNumber=new QLabel(00:00:00)。 timeNumbersetFont(QFont(Times,15))。 timeLabel=new QLabel(this)。 timeLabelsetFont(QFont(Times,15))。 timeLabelsetText(Time:)。 scoreNumber = new QLCDNumber(5)。 //得分顯示器 LCD 數(shù)字顯示框 scoreNumbersetSegmentStyle(QLCDNumber::Flat)。 //設(shè)置顯示方式 scoreNumbersetParent(this)。 //scoreNumbersetGeometry(370,30,70,50)。 scoreLabel = new QLabel(this)。 //分數(shù)標簽 scoreLabelsetFont(QFont(Times,15))。 //設(shè)置字體 scoreLabelsetText(Score:)。 //設(shè)置顯示內(nèi)容 //scoreLabelsetGeometry(320,40,30,30)。 //設(shè)置大小 levelNumber = new QLCDNumber(5)。 //等 級顯示器 levelNumbersetSegmentStyle(QLCDNumber::Flat)。 levelNumbersetParent(this)。 //levelNumbersetGeometry(370,90,70,50)。 levelLabel = new QLabel(this)。 //等級標簽 levelLabelsetFont(QFont(Times,15))。 levelLabelsetText(Level:)。 //levelLabelsetGeometry(320,100,30,30)。 setlabel = new QLabel(this)。 //難度顯示器 setlabelsetFrameStyle(QFrame::Sunken | QFrame::Panel)。 // setlabelsetGeometry(325,150,115,90)。 setlabelsetAlignment(Qt::AlignCenter)。 //setlabelsetFont(QFont(Times,18,QFont::Black))。 setlabelsetFont(QFont(Times,15,QFont::Black))。 setlabelsetText(tr(游戲難度:禁止穿墻 ))。 QPalette pe1。 //顯示 setlabel 字體顏色為綠色 (QPalette::WindowText,Qt::blue)。 北京郵電大學畢業(yè)設(shè)計 22 setlabelsetPalette(p
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1