基于嵌入式的貪食蛇的設計和實現(xiàn)講解_第1頁
基于嵌入式的貪食蛇的設計和實現(xiàn)講解_第2頁
基于嵌入式的貪食蛇的設計和實現(xiàn)講解_第3頁
基于嵌入式的貪食蛇的設計和實現(xiàn)講解_第4頁
基于嵌入式的貪食蛇的設計和實現(xiàn)講解_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式大作業(yè)貪食蛇的設計和實現(xiàn)作者姓名:學科、專業(yè):學號:指導教師:完成日期:大連大學DalianUniversity摘要WinCE是微軟公司嵌入式、移動計算平臺的基礎它是一個開放的、可升級的32位嵌入式操作系統(tǒng)是基于掌上型電腦類的電子設備操作系統(tǒng)。本文基于此,嘗試設計了基于嵌入式winCE開發(fā)的一款貪吃蛇游戲,主要目的是通過開發(fā)嵌入式貪吃蛇游戲,掌握嵌入式開發(fā)的整個過程,同時介紹基于winCE嵌入式開發(fā)的詳細設計步驟,向初學者介紹開發(fā)基于winCE方面嵌入式程序的整個框架流程。本論文軟件方面采用的是EVC++4.0開發(fā)平臺設計程序,PB5.0進行系統(tǒng)定制,硬件方面采用的是PXA270-S實驗開發(fā)箱。整個設計流程將在本論文主體部分進行詳細的敘述。從定制自己所需的winCE系統(tǒng)、運用MFC基于對話框的C++語言編寫貪吃蛇游戲源代碼到最終下載程序到實驗開發(fā)板的整個過程都做了很詳細的介紹。關鍵詞:winCE5.0、EVC++4.0、PB5.0、嵌入式系統(tǒng)、貪吃蛇游戲目錄摘要 2引言 11系統(tǒng)概要設計 21.1系統(tǒng)的整體結構 21.1.1系統(tǒng)的定制 21.1.2程序的編寫 21.2系統(tǒng)的硬件構建 41.3系統(tǒng)的軟件組成 52.系統(tǒng)的詳細設計 62.1定制winCE內核 62.1.1winCE內核定制原理以說明 62.1.2winCE內核定制 72.2貪吃蛇游戲詳細設計開發(fā) 82.2.1貪吃蛇游戲的可行性分析 82.2.2貪吃蛇游戲的需求分析 82.2.3貪吃蛇游戲的總體功能圖 102.2.4貪吃蛇游戲的實現(xiàn)的功能模塊 102.2.5貪吃蛇游戲的主要功能設計思路 112.2.6貪吃蛇游戲界面的實現(xiàn) 162.2.7貪吃蛇游戲主要代碼說明 173.系統(tǒng)整合及測試 263.1系統(tǒng)整合 263.2系統(tǒng)整體測試 273.2.1系統(tǒng)規(guī)則測試 273.2.2按鍵功能測試 283.2.3分數和關卡測試 32結論 34 引言隨著計算機技術的快速發(fā)展,嵌入式技術也相應的取得了突破性的進展,嵌入式設備正日益滲透到人們的日常生活中,默默地為我們提供連接和服務,嵌入式設備往往是一個資源有限的系統(tǒng),它們追求的是在有限的價格上滿足一定的功能性要求。通常它們采用那些功能并不強大的CPU,這也是開發(fā)者不得不盡可能地壓縮嵌入式系統(tǒng)性能的原因。最初的嵌入式設備是單一用途的,它們擁有各自獨特的顯示方式和用戶界面,而今天它們變成了類似PC系統(tǒng)。它們可以運行很多相同的應用程序。針對嵌入式資源的限制,如何將對資源有很大依賴性的大規(guī)模的計算,成功的移植到嵌入式系統(tǒng)中,并能使其達到類似與在PC上計算的效果。針對此問題,必須對原適用于PC上的游戲引擎做出修改,才能使其在嵌入式系統(tǒng)中成功的運行。因此需要在特定的環(huán)境下開發(fā)相應的游戲,這樣才能在以后下載到相應的板子上進行效果演示。目前嵌入式行業(yè)在中國得到了有效發(fā)展,但是規(guī)模相應的還與國際上有很大的差距,因此,為了能夠讓大家對基于嵌入式wince開發(fā)游戲得到有效的理解,本論文以貪吃蛇游戲為詳細的例子,完整的闡述了嵌入式游戲的開發(fā)流程,以及演示結果,還有中間特別要注重的難點疑點的解析。本文對具體的開發(fā)流程都做了很詳細的闡述,從編碼到仿真,然后在定制系統(tǒng)內核,最后進行應用程序的下載,完成貪吃蛇游戲的具體效果演示,論文的后續(xù)都做了相當詳細的解釋。1系統(tǒng)概要設計1.1系統(tǒng)的整體結構1.1.1系統(tǒng)的定制首先所需winCE系統(tǒng)內核的定制,通過PlatformBuilders5.0來定制自己所需要的系統(tǒng)內核,根據自己程序設計時所用到的win32程序的接口,以及用到的庫函數,類庫,各種所需要的驅動,例如USB驅動,屏幕顯示驅動,鼠標驅動,鍵盤驅動等,來定制自己所需要的系統(tǒng)內核,系統(tǒng)不必過于繁瑣,達到自己所需要的功能即可,因為我們所強調的是嵌入式,嵌入式是以方便為前提的,定制的系統(tǒng)是以簡潔方便為目的的,具體的定制細節(jié)我們在第四章將會詳細介紹。1.1.2程序的編寫程序的名稱是《貪吃蛇游戲》,采用的是VC++語言,MFC微軟基礎類庫環(huán)境的單文檔窗體。程序的大體思想是:采用一個二維數組(這里我們采用的是24*24的整形數組)作為貪吃蛇游戲的背景地圖,數組的每個值代表地圖上每個小矩形,而每個小矩形連續(xù)組成貪吃蛇的蛇身,在程序初始化窗體時候調用這個函數,刷新出程序的背景地圖;程序貪吃蛇的蛇身用一個Cpoint類的一位連續(xù)數組,Cpoint類是一個結構體類型,結構體類型里包含著兩個整形參數x和y代表的是屏幕窗體上的某一個對應的點的坐標,我們在得知點的坐標的同時,就明確了對應二維數組地圖上的某個矩形區(qū)域的坐標值,這樣用Cpoint類的一位數組我們可以存放蛇身的每個節(jié)點的坐標,于此同時,我們在程序snake類里面設定蛇頭和蛇尾的坐標變量、蛇身長度的坐標變量,這樣在程序調用Timer()系統(tǒng)函數定時刷新時,每次刷新只需要改變蛇頭和蛇尾的坐標即可,每次刷新時,根據舍身前進方向判斷下一個頭節(jié)點的坐標值,然后添加到Cpoint類定義的蛇身節(jié)點,而蛇尾節(jié)點坐標值是前一個狀態(tài)的倒數第二個節(jié)點,然后調用庫函數FillSolildRect()函數刷新頭節(jié)點為蛇的自身顏色,而尾節(jié)點是地圖背景顏色,這樣我們在外觀看起來就是蛇身前進的效果。那么,我們怎么判斷蛇頭前進的方向呢?這個問題的解決方式是,在定義snake類的同時,定義了一個私有變量Direction為蛇動態(tài)前進的方向,而每次Timer()刷新時,動態(tài)的根據鍵盤響應函數來判斷前進方向,并同時給Direction賦值,這樣每次刷新的同時Direction為四個方向(上、下、左、右)其中的一個方向,蛇頭前進的方向在此時已經確定,這樣就動態(tài)的根據輸入的鍵盤值來改變蛇的前進方向,我們就可以控制蛇的移動啦!最后,在蛇動態(tài)效果顯示出來的同時,我們也應該考慮到蛇的生命周期問題,就是蛇在什么情況下會死亡,在什么情況下會得分,在什么情況下會自身長度增加等一系列相關問題。這里我們首先考慮到一個十分重要的問題,就是蛇遇到食物(這里我們用一個藍色的小矩形表示蛇的食物蘋果)同時,將食物吃掉并且動態(tài)自身增加一節(jié),這里我們是這樣實現(xiàn)的:首先實現(xiàn)的是食物的隨機出現(xiàn),在某個食物被吃掉的同時,我們要立即產生出下一個食物的坐標,我們用到的是一個隨機函數產生出下一個食物的坐標,但是這個坐標必須僅僅在0—23之間,因為我們地圖采用的是一個24維的二維數組表示的,地圖每個橫坐標縱坐標的范圍是0—23,但是,這里注意一個特別重要的問題,就是每次隨機產生的食物坐標不能出現(xiàn)在當前蛇身上,我們必須加一個判斷,如果產生的坐標在蛇身上,必須重新生成,一直到產生一個在地圖上并且不在蛇身上的食物坐標為止;當蛇頭坐標的下一個前進方向的坐標和食物坐標相等時,我們在這里是將食物坐標改變成當前蛇頭坐標,并且蛇尾坐標不變,蛇身長度增加一個單位,這樣就動態(tài)的現(xiàn)實出來蛇吃食物自身增加一個的效果。生命周期的問題:在我們解決上述功能的同時,我們不得不考慮一個問題,那就是蛇的生命周期問題,就是蛇在身條件下會死亡,死亡的結果會是怎么樣,我們在這里做了一個判斷,就是蛇遇到地圖周圍的墻和遇到自己的身體蛇會死亡,生命周期結束,于此同時記錄下當前玩家所得的分數,比較分數來判斷玩家的能力程度,那么我們怎么判斷蛇頭撞墻和蛇頭撞到自身呢?繼承上一個問題的解決方式,蛇身用到的是Cpoint類的一個一維數組表示,地圖用到的是一個二維數組表示,當蛇頭節(jié)點的左邊和二維數組邊界值相等時,或者蛇頭坐標變?yōu)樯咦陨淼淖鴺藭r,蛇死亡,生命周期結束,關閉定時器函數Timer(),初始化游戲界面,記錄當前分數,重新等待游戲開始。到此為止,貪吃蛇游戲的大概思路就解決了。1.2系統(tǒng)的硬件構建硬件環(huán)境分析:系統(tǒng)硬件平臺采用的是PXA270-S實驗開發(fā)板,開發(fā)板提供了多種CPU內核共大家使用,具體的內核信息詳細如下:X86:支持的處理器包括486、586、Geode、PentiumI/II/III/IV。ARM:支持的處理器包括ARM720T、ARM920T、ARM1020T、StrongARM、Xscale。SHx:支持的處理器包括SH-3、SH-3DSP、SH-4。MIPS:支持的處理器包括MIPSII/32(帶浮點運算)、MIPSII/3(不帶浮點運算)、MIPS16、MIPSIV/64(帶浮點運算)、MIPSIV/6(不帶浮點運算)。軟件環(huán)境分析:PC機操作系統(tǒng)Win2000或以上,EVC4.0開發(fā)環(huán)境,WinCE500標準SDK,PXA270-S平臺SDK。1.3系統(tǒng)的軟件組成PC機操作系統(tǒng)Win2000或以上,EVC4.0開發(fā)環(huán)境,WinCE500標準SDK,PXA270-S平臺SDK。2.系統(tǒng)的詳細設計2.1定制winCE內核2.1.1winCE內核定制原理以說明定制winCE內核之前,我們首先要做的準備工作詳見下:首先是安裝PB工具,我們這里之前已經提及,所以就不再過多敘述。在實際操作中,我們主要有如下的注意事項:(1)推薦安裝在分區(qū)根目錄下。并且分區(qū)需要保持足夠大的硬盤空間,一般需要5G以上,PB和運行在PC的WinCE環(huán)境需要安裝在一個分區(qū)內。安裝時間通常較長,網絡安裝的版本同時依賴網絡的速度。以下是微軟推薦的最小配置,低于該配置PB工具將不能正常安裝或使用;處理器:至少266MHzPentiumII以上;推薦使用500MHzPentiumIII以上CPU;操作系統(tǒng):Windows2000SP2以上;WindowsXP;內存要求:至少128M;使用模擬器時候至少192M(不包括操作系統(tǒng)本身占用的內存)硬盤:典型安裝時,選擇一種處理器需至少1.7G空間;若要包含PlatformBuilder的完整工具組在內需要至少12G的硬盤空間。光驅:可以使用與桌面系統(tǒng)相兼容的CD-ROM或DVD-ROM等。(2)在安裝過程中,會提示選擇處理器體系結構,務必選中ARMV4I和XSCALE兩項,否則無法支持PXA270處理器。(3)如果PC上使用的操作系統(tǒng)為WindowsXPSP2,可能出現(xiàn)嚴重安裝問題,最好不要采用WindowsXPSP2,或者在微軟網站上搜索相關的指導文檔。安裝過程中請關閉系統(tǒng)防火墻。然后需要建立系統(tǒng)最基本的配置。打開PB5.0,首先導入我們提供的BSP包。導入BSP的過程很簡單,只需要安裝光盤中提供的up270classic_BSP文件就可以實現(xiàn),可以由指導教師提前完成。安裝完,會發(fā)現(xiàn)在系統(tǒng)的\WINCE500\Platform\路徑下出現(xiàn)“Up_PXA270cl”文件夾,這個就是安裝好的BSP了。之后建立UP-TECHS2410/P270DVP的WinCE工程,都需要建立在這個BSP的基礎上。(類似地,你也可以自己構建系統(tǒng)自帶的MainstoneII的工程,但是它不能運行在UP-TECHS2410/P270DVP實驗箱上)。2.1.2winCE內核定制我們在編譯winCE內核鏡像前,需要添加特性目錄(Catalog)的一些組件來定制內核,我們在本系統(tǒng)需要添加以下的組件:(1)添加鼠標鍵盤控制驅動;(2)添加USB主控制器驅動;(3)添加USB從控制器驅動(建立與PC機的Activesyn。連接需要此特性);(4)添加串口驅動;(5)添加觸摸屏驅動;(6)添加IE6.0瀏覽器驅動;(7)添加撥號網絡組件驅動;(8)添加Fat文件系統(tǒng);.(9)加入對HIVE注冊表的支持;(10)加入對Mediaplayer播放器;(11)加入對本地存儲器中的mp3和wMA文件播放的支持。除了上述所需的添加組件外,我們還需要一些另外的組件。2.2貪吃蛇游戲詳細設計開發(fā)2.2.1貪吃蛇游戲的可行性分析通過查找相關文檔和技術支持,了解了EVC環(huán)境下的開發(fā)過程,熟悉了VC++語言的開發(fā)技巧,通過以下幾個方面,進行可行性分析:參考《貪吃蛇游戲用戶描述文檔》、《軟件工程》等書,確定自己能夠在自己能力范圍內開發(fā)出這個貪吃蛇游戲項目。功能要求:在進行整個項目開發(fā)之前,必須要做的就是確定貪吃蛇游戲的主要功能,必須明確貪吃蛇游戲的功能,因為要進行游戲功能可行性分析,經過自己的查閱相關資料,確定了貪吃蛇游戲的具體功能,詳見后續(xù)部分詳細設計。性能需求:必須保證自己開發(fā)的貪吃蛇游戲能夠整體盡可能做到高效快速,不占用大量的使用資源,因為我做的是一個嵌入式的游戲開發(fā)項目,必須要考慮資源使用情況,要求盡可能少用資源,在有限的資源范圍內實現(xiàn)最大的可利用價值。運行環(huán)境:PXA270-S開發(fā)板,EVC++4.0開發(fā)平臺,模擬器上進行調試,經過安裝軟件,確定可以進行項目程序的編寫。界面要求:采用Windows標準界面,只需要使用鍵盤和鼠標。完成期限,一個學期完成整個系統(tǒng),包括程序的編寫,硬件板子的下載,以及最終的調試,測試階段。2.2.2貪吃蛇游戲的需求分析文檔包括了嵌入式技術領域的介紹,嵌入式國內外環(huán)境的探索與簡介,主要從我國嵌入式領域發(fā)展的最新階段來探討,與國際對比得出相應發(fā)展的前景,同時,針對自身對嵌入式方面的興趣愛好,以及自己所掌握的有限知識來對嵌入式方面的一些看法等,另外還有winCE環(huán)境的簡介,以及用法,還有關于嵌入式基于winCE的開發(fā)流程的一些相關文檔,還有EVC++4.0開發(fā)工具的使用方法的介紹,以及游戲的詳細代碼的功能簡介等。游戲功能:能夠實現(xiàn)貪吃蛇自動前線移動,也就是貪吃蛇能夠“活動”的外觀效果,根據相同的時間間隔,每一次將貪吃蛇自身的蛇頭向前移動一個小格子,同時蛇尾向前移動一個小格子,移動方向為貪吃蛇行走的方向。對游戲中規(guī)則進行判斷,當游戲中的貪吃蛇遇到墻壁和自身時,根據規(guī)則判斷應為死亡,宣告當前游戲結束,記錄當前游戲的分數值。根據每次所得的分數值不同,判斷玩家的能力,來顯示玩家的效果。貪吃蛇的相關操作,根據鍵盤上的上、下、左、右四個鍵來控制貪吃蛇游戲的前進方向,同時,根據空格鍵來開始游戲,空格鍵在游戲開始時,還有另外一個功能,那就是暫停游戲功能,這樣玩家就可以根據暫停游戲來處理當前需要處理的事情,當游戲結束時,按回車鍵就可以重新開始游戲的初始化界面。果實的出現(xiàn),每次貪吃蛇吃到果實時,于此同時,應該出現(xiàn)一個果實在地圖中,那么怎么實現(xiàn)這個功能呢?我采用的是隨機函數出現(xiàn)果實的橫縱坐標,然后判斷這個店得坐標是不是在蛇身上,如果是那么就得重現(xiàn)出現(xiàn)上一個過程,直到食物的坐標不在蛇身上為止。這樣就出現(xiàn)了果實。游戲分數的統(tǒng)計方法,當貪吃蛇吃到果實時,玩家的分數就應該隨著吃到的果實而增加,增加的規(guī)則就是貪吃蛇的身體長度乘以等級得到分數。這樣就可以根據游戲的難度對應得到分數。2.2.3貪吃蛇游戲的總體功能圖貪吃蛇功能圖2.2.4貪吃蛇游戲的實現(xiàn)的功能模塊在貪吃蛇游戲中,本論文設計的貪吃蛇游戲的大致可以分為五個功能模塊,以下是對這五個模塊的具體介紹: 游戲規(guī)則模塊功能設計:游戲規(guī)則包括蛇的運動范圍、蛇的生命周期問題、分數統(tǒng)計、關卡判斷。其中蛇的運動范圍是一個33*57的ListBox,蛇運動的地圖抽象成為一個33*57的ListBox,當蛇遇到ListBox邊界值(我們在這里抽象成為上、下、左、右四個邊界,其中上邊界坐標值中縱坐標都是20,橫坐標任意,下邊界為縱坐標是53,同理橫坐標不變,左邊界為橫坐標為20,縱坐標任意,同理右邊界為橫坐標為77,縱坐標任意)時,宣告蛇生命周期結束,貪吃蛇死亡,這個是第一個規(guī)則;另外,當蛇自己吃到自己身體的某一部分時,也宣告游戲結束,在程序里通過循環(huán)判斷蛇頭下一個前進方向的節(jié)點是不是蛇身上的某一部分節(jié)點即可,如果是那么蛇死亡,否則繼續(xù)運行游戲。分數統(tǒng)計算法的思想是每次蛇吃到一個果實時,相加的分數為蛇身長度乘以一個定值來記錄分數,這樣可以隨著游戲難度的增加,分數值也隨之增多。關卡功能設置通過與分數相關聯(lián)而體現(xiàn)的,初始化游戲為第一關,分數為0,當玩家玩到一定的分數時(例如是500)關卡加一,變?yōu)榈诙P,同時,蛇前進速度相應增加一個等級,這樣就實現(xiàn)了不同關卡,不同速度的貪吃蛇,從而增加了游戲的難度。蛇身操作模塊功能的設計:首先得到當前按下的移動方向,此時有兩種情況需要考慮,如果遇到的是一個果實,則蛇身長度增加一個單位,表現(xiàn)在程序中是存放蛇身數組值增加一位,如果沒遇到果實,則不斷更新蛇身數組中的相應坐標值。按鍵功能模塊:游戲是通過鍵盤按鍵控制,其中空格鍵控制游戲開始和暫停,上、下、左、右鍵控制蛇頭前進方向,回車鍵控制游戲重新開始,程序內部是通過消息響應函數實現(xiàn)。主界面地圖模塊:貪吃蛇游戲的主界面是通過窗體初始化事件進行實現(xiàn)的,運用MFC類庫中的FillSoldRect()庫函數通過程序內部的二維數組進行繪制地圖,地圖然后可以改變,這樣在游戲運行后就會在窗體上顯示游戲初始化的效果。幫組模塊:通過窗體的調用另外一個幫組窗體顯示游戲的規(guī)則,游戲的計分公式,游戲的玩法等等。2.2.5貪吃蛇游戲的主要功能設計思路WindowsMFC在程序執(zhí)行時,會動態(tài)的調用窗口資源,在程序自動生成函數中,添加相應的函數實現(xiàn)程序初始化界面,本程序的具體思路是:程序在開始執(zhí)行時會調用BOOLCSnakeDlg::OnInitDialog()函數,進行窗體的初始化,我們在此窗體客戶區(qū)求得窗體長和寬的最小值,記錄在WIDTHOFBRICKS和HEIGHTOFBRICKS變量中,因為我們設計的游戲地圖是一個33*57的矩形區(qū)域,在這,根據WIDTHOFBRICKS和HEIGHTOFBRICKS等分,求出每個小矩形的邊長存放在HEIGHTOFBRICKS和WIDTHOFBRICKS變量中,然后調用繪圖函數voidCSnakeDlg::MyDraw()進行地圖的繪制,這樣在程序執(zhí)行時,就動態(tài)繪制了貪吃蛇游戲地圖。首先,食物時通過一個坐標記錄下在地圖上的位置,通過繪圖函數繪制這點坐標的小矩形,程序中采用的是隨機數生成食物出現(xiàn)的坐標。其次,程序中必須增加一個判斷,判斷當前生成的食物坐標是否在貪吃蛇身體范圍內,如果當前生成的坐標在蛇身坐標范圍內,那么必須重新隨機產生食物坐標直到不在為止。如果坐標不在蛇身坐標范圍內,則把坐標位置返回給調用對象。程序中本模塊具體功能是在voidInitFoods()函數中實現(xiàn)。具體代碼參見程序主要代碼說明。程序執(zhí)行的步驟:首先接受玩家按下方向鍵消息,并把當前要前進的方向保存在方向變量snake_direct中,記錄貪吃蛇下一個狀態(tài)前進的方向,通過方向判斷頭節(jié)點下一個節(jié)點的坐標值。先判斷下一個節(jié)點坐標值是不是符合游戲規(guī)則之內(也就是判斷蛇是不是死亡)的坐標,此時調用IS_GameOver()函數判斷游戲是否結束,如果結束宣告游戲結束,否則程序繼續(xù)執(zhí)行;如果下一個節(jié)點的坐標值與當前食物節(jié)點坐標值(snake_foods)相同,則調用voidMyDraw()函數重繪蛇頭和蛇尾節(jié)點顏色,因為此時蛇吃到一個果實,蛇身長度加一,動態(tài)的現(xiàn)實,將果實重繪為蛇身顏色(紅色),蛇尾節(jié)點顏色不變,蛇身變量長度snake_body_length自加,動態(tài)記錄當前蛇頭節(jié)點snake_head和蛇尾節(jié)點snake_rear的坐標;如果下一個節(jié)點不是食物節(jié)點,重繪蛇頭蛇尾顏色,蛇身長度不變,動態(tài)的蛇頭和蛇尾節(jié)點坐標改變。分數統(tǒng)計和改變關卡的設計思路:在本程序設計的貪吃蛇游戲中,分數統(tǒng)計采用的是如下公式進行的統(tǒng)計,貪吃蛇游戲分數=貪吃蛇蛇身長度*定制變量(本程序設置的是整形常量5),這樣可以動態(tài)的根據蛇身長度不同,每次得到果實的分數也就隨之不同,體現(xiàn)了游戲難度的差異;另外游戲關卡的設計與分數統(tǒng)計有著密切的關系,關卡是通過玩家玩得的分數而自動晉級的,換句話說,例如:游戲的初始化分數為0,游戲關卡為第一關,當玩家玩到1000分數時根據程序內部定義,關卡增加一級,同時,游戲難度也要隨之增加,體現(xiàn)在程序中就是,定時器變量刷新間隔要變小,也就是類中定義的TimerInterval變量要隨之相應的變小。這樣,在玩家看來,蛇的刷新速度就會變得越來越快。按鍵響應功能的設置思路:貪吃蛇游戲的控制通過鍵盤按鍵來控制,所以必須實現(xiàn)鍵盤響應功能,程序規(guī)定,上、下、左、右按鍵控制貪吃蛇的前進方向,空格鍵控制游戲開始和暫停,當按下回車鍵時,游戲重新進行初始化,重新開始游戲,此時需要重復上一個過程。這些按鍵消息響應是通過函數BOOLCSnakeDlg::PreTranslateMessage(MSG*pMsg)來實現(xiàn),內部通過case語句進行相應按鍵的響應,從而實現(xiàn)按鍵響應功能2.2.6貪吃蛇游戲界面的實現(xiàn)貪吃蛇游戲界面是通過MFC初始化窗口實現(xiàn),地圖是通過初始化窗體時,計算窗體客戶區(qū)高度和寬度,然后取其中最小值,等分為24部分,記錄下每部分的長度,這就是地圖中每個小矩形的長度。具體界面詳見下圖:如上圖:游戲界面左邊為地圖部分,是一個33*的二維數組抽象出來的,右面有七個按鈕部分,分別對應著上訴部分按鍵功能。2.2.7貪吃蛇游戲主要代碼說明下面函數是游戲開始函數,主要功能是初始化游戲的狀態(tài),開啟計時器函數,實現(xiàn)游戲的開始。voidCSnakeDlg::Start(){ Level=1; Score=0; TimerInterval=200; GameState=RUNNING; dead_flag=1;//初始化蛇沒有死 SetDlgItemText(IDC_SCORE_NUM,L"0"); SetTimer(1,TimerInterval,NULL);//開始設置計時器}下面的函數功能是初始化游戲界面,通過窗體初始化事件來進行計算游戲地圖的寬和高,這樣進一步計算出來游戲地圖上每個小格子的寬度和高度,然后調用初始化函數進行游戲界面初始化。BOOLCSnakeDlg::OnInitDialog(){ CDialog::OnInitDialog(); SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE); CenterWindow(GetDesktopWindow()); CRectrt; GetClientRect(&rt); WIDTHOFBRICKS=((rt.right-rt.left)-LEFTMARGIN)/24;// HEIGHTOFBRICKS=((rt.bottom-rt.top))/24; WIDTHOFBRICKS=HEIGHTOFBRICKS=min(WIDTHOFBRICKS,HEIGHTOFBRICKS); Level=0; GameState=STOP; InitSnake(); returnTRUE;}下面是通過二維數組值來確定地圖上的各種顏色,是背景色,是蛇身色,還是食物顏色等。voidCSnakeDlg::RefreshAll(){ CDC*dc=GetDC(); for(inty=0;y<24;y++) { for(intx=0;x<24;x++) { if(SnakeOfBrick[y][x]==0) { dc->FillSolidRect(LEFTMARGIN+x*WIDTHOFBRICKS,10+y*HEIGHTOFBRICKS,WIDTHOFBRICKS,HEIGHTOFBRICKS,BACKCOLOR); dc->Draw3dRect(LEFTMARGIN+x*WIDTHOFBRICKS, 10+y*HEIGHTOFBRICKS,WIDTHOFBRICKS,HEIGHTOFBRICKS,CLRTOPLEFT,BACKCOLOR); } if(SnakeOfBrick[y][x]==1) { dc->FillSolidRect(LEFTMARGIN+x*WIDTHOFBRICKS,10+y*HEIGHTOFBRICKS,WIDTHOFBRICKS,HEIGHTOFBRICKS,SNAKECOLOR); dc->Draw3dRect(LEFTMARGIN+x*WIDTHOFBRICKS,10+y*HEIGHTOFBRICKS,WIDTHOFBRICKS,HEIGHTOFBRICKS,CLRTOPLEFT,SNAKECOLOR); } } } ReleaseDC(dc);}3.系統(tǒng)整合及測試3.1系統(tǒng)整合通過前幾章的敘述,我們已經把系統(tǒng)的各個部分分別作了非常詳細的論述,我們已經將上述過程中定制好的winCE系統(tǒng)下載到PXA270-S實驗箱上,于此同時我們已經在EVC++4.0開發(fā)平臺上運用VC++語言開發(fā)好貪吃蛇游戲的詳細代碼,剩下的就是將上訴三個過程最終整合在一起,達到編制好的程序最終在開發(fā)板上運行的一種嵌入式程序設計的效果。我們將開發(fā)板接好電源,下載好winCE系統(tǒng),后,將數據線連接好,啟動同步軟件,進行連接,直到同步軟件顯示連接成功之后,瀏覽板子內容,選擇PXA270-S開發(fā)板SDK,進行編譯,將C:\DocumentsandSettings\lining\桌面\Snake_no_dead\ARMV4Irel目錄下的可執(zhí)行文件加入到實驗箱目錄下,然后連接鍵盤和鼠標到開發(fā)板上的USB上,點擊可執(zhí)行程序Snake文件,運行開發(fā)完成的貪吃蛇游戲程序,這樣,整個系統(tǒng)整合完成。3.2系統(tǒng)整體測試3.2.1系統(tǒng)規(guī)則測試本程序制定的規(guī)則是貪吃蛇撞墻死亡,撞到自己身體任意一部分死亡。按照預先設計應出現(xiàn)的結果是當蛇頭下一個移動節(jié)點的位置是地圖四周的墻壁時,或者是蛇自身的某一個位置節(jié)點時,應該顯示出一個對話框,標志著蛇死亡。下面我們進行測試。我們運行程序,然后按空格鍵開始游戲,讓蛇自身開始移動,我們首先讓蛇頭撞到地圖周圍的墻壁,觀察結果是不是出現(xiàn)應該出現(xiàn)的結果。下圖是我們運行程序后的結果截圖,觀察出現(xiàn)的結果如圖所示:通過上圖我們可以發(fā)現(xiàn),當貪吃蛇

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論