基于ARM9開發(fā)板的掃雷游戲設(shè)計_第1頁
基于ARM9開發(fā)板的掃雷游戲設(shè)計_第2頁
基于ARM9開發(fā)板的掃雷游戲設(shè)計_第3頁
基于ARM9開發(fā)板的掃雷游戲設(shè)計_第4頁
基于ARM9開發(fā)板的掃雷游戲設(shè)計_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 畢 業(yè) 論 文題 目: 基于arm9開發(fā)板的掃雷游戲設(shè)計 學(xué)院: 電氣信息學(xué)院 專業(yè): 自動化 班級: 0901 學(xué)號: 200901020130 學(xué)生姓名: 段 志 勤 導(dǎo)師姓名: 萬 琴 完成日期: 2013年6月7日 畢 業(yè) 設(shè) 計題 目: 基于arm9開發(fā)板的掃雷游戲設(shè)計 學(xué)院: 電氣信息學(xué)院 專業(yè): 自動化 班級: 0901 學(xué)號: 200901020130 學(xué)生姓名: 段 志 勤 導(dǎo)師姓名: 萬 琴 完成日期: 2013年6月7日 誠 信 聲 明本人聲明:1、本人所呈交的畢業(yè)設(shè)計(論文)是在老師指導(dǎo)下進行的研究工作及取得的研究成果;2、據(jù)查證,除了文中特別加以標(biāo)注和致謝的地方外,

2、畢業(yè)設(shè)計(論文)中不包含其他人已經(jīng)公開發(fā)表過的研究成果,也不包含為獲得其他教育機構(gòu)的學(xué)位而使用過的材料;3、我承諾,本人提交的畢業(yè)設(shè)計(論文)中的所有內(nèi)容均真實、可信。作者簽名: 日期: 年 月 日畢業(yè)設(shè)計(論文)任務(wù)書 題目: 基于arm9開發(fā)板的掃雷游戲設(shè)計 姓名 段志勤 系別 電氣信息學(xué)院 專業(yè) 自動化 班級 0901 學(xué)號 200901020130 指導(dǎo)老師 萬 琴 職稱 教研室主任 黃峰、汪超、劉星平 一、基本任務(wù)及要求: 以arm9為核心,設(shè)計一個移動平臺的掃雷游戲。 1.要求實現(xiàn)pc機上掃雷的基本功能,點到空白是遞歸,點到雷時自動爆炸,并且所有的雷自動爆炸,點到其他圖片翻開圖片。

3、用c+對鼠標(biāo)事件,遞歸函數(shù)的編寫。用qt的界面完成掃雷游戲的界面。2.要求把在pc機上寫好的掃雷游戲移植到arm9開發(fā)板上,實現(xiàn)移動設(shè)備上的掃雷游戲設(shè)計。利用linux和qt的兼容性移植到到arm9開發(fā)板。 二、進度安排及完成時間: (1)1月14日至3月4日:查閱資料為畢業(yè)設(shè)計做準(zhǔn)備。 (2)3月5日至3月15日:撰寫文獻的開題報告。 (3)3月18日至4月1日:進行畢業(yè)實習(xí),撰寫畢業(yè)實習(xí)報告。 (4)4月2日至4月7日:了解課題的基本要求。 (5)4月8日至4月14日:進行程序的編寫。 (6)4月15日至4月21日:對程序改進和修改。 (7)4月22日至4月28日:對arm9開發(fā)板的移植進

4、行調(diào)式。 (8)4月29日至5月12日:程序的調(diào)試。 (9)5月13日至5月20日:qt應(yīng)用的移植。 (10)5月21日至5月24日:撰寫前言,目錄,摘要,緒論。 (11)5月25日至5月28日:撰寫系統(tǒng)軟件設(shè)計和程序調(diào)試。 (12)5月29日至6月1日:撰寫系統(tǒng)硬件部分設(shè)計和qt移植。 (13)6月2日至6月5日:撰寫參考文獻,致謝,附錄。 目錄摘要iabstractii第一章 概述11.1 掃雷簡介11.2 arm9簡介11.3 linux系統(tǒng)簡介11.4 qt簡介21.5 c+簡介21.6 課題研究的背景和意義2第二章 總體設(shè)計思路42.1 設(shè)計總體思路42.2 掃雷游戲主要功能52.3

5、 設(shè)計的軟件72.4 設(shè)計的環(huán)境82.5 設(shè)計的語言82.6 設(shè)計的平臺9第三章 軟件部分設(shè)計123.1 視圖和場景的設(shè)計123.1.1 視圖的設(shè)計123.1.2 場景的設(shè)計133.1.3 視圖中控件和動作的設(shè)計143.2 stl數(shù)據(jù)的設(shè)計163.2.1 stl的設(shè)計163.2.2 數(shù)據(jù)的設(shè)計183.3 stl圖片的設(shè)計193.3.1 圖片的選取和加載193.3.2 圖片坐標(biāo)的設(shè)計223.4 功能程序塊的設(shè)計233.4.1 鼠標(biāo)事件233.4.2 圖片交換的設(shè)計253.4.3 爆炸和遞歸的設(shè)計253.4.4 初始化的設(shè)計26第四章 硬件部分的設(shè)計274.1 硬件介紹274.1.1 開發(fā)板簡介2

6、74.1.2 cpu簡介284.1.3 usb接口294.1.4 電源系統(tǒng)及接口294.1.5 復(fù)位系統(tǒng)303.1.6 flash 存儲系統(tǒng)304.2 開發(fā)平臺的設(shè)計314.2.1 交叉編譯環(huán)境的搭建324.2.2 linux內(nèi)核配置和編譯334.3 qt應(yīng)用的移植34第五章 調(diào)試與測試36總結(jié)39參考文獻41附錄 掃雷程序及注釋42基于arm9開發(fā)板的掃雷游戲設(shè)計摘要:隨著時代的進步,現(xiàn)在已進入移動互聯(lián)網(wǎng)時代,智能手機,平板電腦等移動設(shè)備越來越受到人們的歡迎。移動設(shè)備因為其的方便性,移動設(shè)備將是未來通信,上網(wǎng),娛樂的主體。在人們緊張的工作學(xué)習(xí)之余,在外出旅游之余,可以隨時隨地拿出移動設(shè)備玩一

7、盤游戲給自己帶來歡樂與放松,也可以放松自己的心情,緩解自己的工作和學(xué)習(xí)壓力。掃雷是很多操作系統(tǒng)自帶的一款小游戲,幾乎每個電腦使用者都接觸過這款游戲,并且深愛著這款小游戲。掃雷游戲是非常經(jīng)典的一款小游戲,實現(xiàn)它的方法很多,可以用c,c+,vb,java等很多語言。本設(shè)計主要是以qt作為開發(fā)軟件,在linux系統(tǒng)中用c+設(shè)計并開發(fā)的一款掃雷游戲,最后移植到arm9開發(fā)板上,以arm9開發(fā)板作為測試和運行掃雷游戲,實現(xiàn)移動設(shè)備上的掃雷游戲。本設(shè)計的掃雷游戲功能基本上和window系統(tǒng)上的相同。利用qt軟件的良好的圖形界面做出掃雷游戲的圖形界面,利用c+的方便和qt強大的類庫來實現(xiàn)掃雷的基本功能,利用

8、qt的兼容性強以及l(fā)inux系統(tǒng)良好的移植性能來移植到arm9開發(fā)板上來實現(xiàn)移動設(shè)備上的掃雷游戲。論文首先介紹了c+,qt,linux系統(tǒng),arm9等本設(shè)計中用到的東西。然后介紹了總體設(shè)計思路,在linux系統(tǒng)下以及qt軟件中用c+分模塊設(shè)計出掃雷游戲的每個模塊,最后移植到arm9開發(fā)板上,實現(xiàn)本次設(shè)計。 關(guān)鍵字:掃雷、qt、linux、arm9minesweeping game design of arm9-based development boardabstract:along with the progress of the times, and now has entered the

9、 era of mobile internet, smart phones, tablets and other mobile devices more and more get the welcome of people. mobile devices because of its convenience, mobile devices will be the future communication, the internet, the main body of entertainment.in the tense work and study, travel, can take out

10、mobile devices anytime and anywhere to play a game to cheer myself and relaxation, can also relax the mood, reduce the pressure on their work and study.minesweeping is many operating system comes with a small game, almost every computer users are exposed to the game, and deeply in love with this lit

11、tle game. minesweeping game is a classic game, a lot of ways for it, you can use c, c + +, vb, java, etc. a lot of language. this design mainly is the qt as the development software, a linux system using c + + design and development of a mine clearance game, finally ported to the arm9 development bo

12、ard, with arm9 development board as a test and run the minesweeper, realize minesweeping game on a mobile device. this design of mine clearance game function and window system is basically the same. using the qt software good graphical interface made minesweeper graphical interface, convenient using

13、 c + + and qt powerful class library to realize the basic function of mine, using qt strong compatibility and good transplantation linux system performance to transplant to the arm9 development board up minesweeping game on a mobile device. paper first introduces the c + +, qt, linux system, this de

14、sign used in things such as the arm9. then introduces the overall design ideas, using c + + and qt software runs under linux system module design each module that minesweeper, finally ported to the arm9 development board, realize the design.keywords:minesweeping、qt、linux、arm9第一章 概述隨著計算機與網(wǎng)絡(luò)的普及,人們生活水平

15、的提高,移動設(shè)備越來越成為人們生活中不可或缺的一部分,移動設(shè)備可以隨身攜帶,在外出旅游,繁忙的工作之余,可以隨時隨地給人帶去歡樂與放松。1.1 掃雷簡介掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲,不久之后,“方塊”被改寫成了游戲“rlogic”,在“rlogic”里,玩家的任務(wù)是作為美國海軍陸戰(zhàn)隊隊員,為指揮中心探出一條沒有地雷的安全路線,如果路全被地雷堵死就算輸。兩年后,湯姆安德森在“rlogic”的基礎(chǔ)上又編寫出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。 1981年,微軟公司的羅伯特杜爾和卡特約翰遜兩位工程師在windows 3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全

16、世界推廣開來。 這款游戲的玩法是在一個9*9(初級),16*16(中級),16*30(高級),或自定義大小的方塊矩陣中隨機布置一定量的地雷(初級為10個,中級為40個,高級為99個)。由玩家逐個翻開方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開的方塊有地雷,則游戲結(jié)束。 掃雷游戲是windows操作系統(tǒng)自帶的一款小游戲,在過去的幾年里,windows操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來越龐大、復(fù)雜,功能也越來越強大,但是這款小游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。本次的畢業(yè)設(shè)計我將利用qt作為開發(fā)工具,開發(fā)一款類似的“掃雷游戲”,并把掃雷游戲移植到arm開發(fā)板上,實現(xiàn)移動

17、設(shè)備上的掃雷游戲。1.2 arm9簡介 arm是advanced risc machines的簡稱,arm9系列處理器是英國arm公司設(shè)計的主流嵌入式處理器,主要包括arm9tdmi和arm9e-s等系列, 新一代的arm9處理器,通過全新的設(shè)計,采用了更多的晶體管,能夠達到兩倍以上于arm7處理器的處理能力。這種處理能力的提高是通過增加時鐘頻率和減少指令執(zhí)行周期實現(xiàn)的。1.3 linux系統(tǒng)簡介 linux是一種自由和開放源代碼的類unix操作系統(tǒng)。定義linux的組件是linux內(nèi)核,該操作系統(tǒng)內(nèi)核由林納斯托瓦茲在1991年10月5日首次發(fā)布。嚴(yán)格來講,術(shù)語linux只表示操作系統(tǒng)內(nèi)核本身

18、,但通常采用linux內(nèi)核來表達該意思,linux則常用來指基于linux內(nèi)核的完整操作系統(tǒng),包括gui組件和許多其他實用工具。由于這些系統(tǒng)工具和庫主要由gnu計劃提供,自由軟件基金會提議將該組合系統(tǒng)命名為gnu/linux。linux是一個領(lǐng)先的操作系統(tǒng),可以運行在服務(wù)器和其他大型平臺之上,如大型機和超級計算機。世界上500個最快的超級計算機90%以上運行l(wèi)inux發(fā)行版或變種,最快的前10名超級計算機運行的都是linux操作系統(tǒng)。 linux也廣泛應(yīng)用在嵌入式設(shè)備上,如手機、平板電腦、路由器、電視和電子游戲機等。在移動設(shè)備上廣泛使用的android操作系統(tǒng)就是創(chuàng)建在linux內(nèi)核之上。1.

19、4 qt簡介 qt以作為一個跨平臺框架而著稱,qt使用“一次編寫,隨處編譯”的方式為開發(fā)跨平臺的圖形用戶界面應(yīng)用程序提供了一個完整的c+應(yīng)用程序開發(fā)框架。qt容許程序開發(fā)人員的單一源碼樹來構(gòu)建可以運行在不同平臺下的應(yīng)用程序的不同版本,這些平臺包括從window98到vista,mac os x、linux、solaris、hp-ux以及其他很多基于x11的unix。許多qt庫和工具也都是qt/embedded linux的組成部分。qt/embedded linux是一個可以在嵌入式linux上提供窗口系統(tǒng)的產(chǎn)品。1.5 c+簡介 c+是一種語言,僅僅是它的語法、特性、標(biāo)準(zhǔn)類庫就已經(jīng)是一門非常

20、高深的課程,c+設(shè)計成靜態(tài)類型、和c同樣高效且可移植的多用途程序設(shè)計語言。設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)格(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。設(shè)計成給程序設(shè)計者更多的選擇,即使可能導(dǎo)致程序設(shè)計者選擇錯誤。設(shè)計成盡可能與c兼容,籍此提供一個從c到c+的平滑過渡。避免平臺限定或沒有普遍用途的特性。不使用會帶來額外開銷的特性。設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。1.6 課題研究的背景和意義現(xiàn)在已進入移動物聯(lián)網(wǎng)時代,人們已經(jīng)不滿足于用電腦來娛樂,電腦攜帶不方便,不能隨時隨地帶著電腦。所以移動設(shè)備越來越受到人們的喜愛。移動設(shè)備:也被稱為行動裝置(英語:mobile devi

21、ce)、流動裝置、手持裝置(handheld device)等,是一種口袋大小的計算設(shè)備,通常有一個小的顯示螢?zāi)?,觸控輸入,或是小型的鍵盤。因為通過它可以隨時隨地訪問獲得各種信息,這一類設(shè)備很快變得流行。諸如手提電腦和智能手機之類的移動計算設(shè)備一起,pda代表了新的計算領(lǐng)域。移動設(shè)備包括掌上游戲機、移動電話、智能手機、平板電腦。移動設(shè)備能隨時隨地玩游戲或者做其他事情??梢宰屛覀冊诰o張的工作之余能隨時放松自己的心情。通過研究本課題來熟悉了解移動設(shè)備上的軟件開發(fā)。經(jīng)過大學(xué)四年的學(xué)習(xí),我對理論知識有了一定的了解和認(rèn)知,本次的畢業(yè)設(shè)計便是將大學(xué)所學(xué)的理論知識與實踐相結(jié)合,同時也是對所學(xué)知識的檢查,希望

22、通過本次的畢業(yè)設(shè)計使自己在程序的開發(fā)和設(shè)計上有新的認(rèn)識并能有所提高,對于我們以后工作能力的培養(yǎng)具有重要意義。也讓我們更加了解移動設(shè)備上的軟件開發(fā)。第二章 總體設(shè)計思路掃雷游戲英文名稱為mine sweeper,屬于益智類游戲。通過鼠標(biāo)即可操作游戲。游戲特點為操作簡單,易于上手。本章主要介紹掃雷的總體思路設(shè)計,包括掃雷游戲設(shè)計模塊和主要功能,開發(fā)平臺、開發(fā)軟件以及開發(fā)的環(huán)境。2.1 設(shè)計總體思路本設(shè)計分模塊設(shè)計出掃雷的每一個部分。第一部分使用qt軟件的vsi(view(視圖)、scene(場景)、item(道具)圖形界面設(shè)計出掃雷的基本界面,即打開掃雷游戲出現(xiàn)的界面。然后利用qt的類庫和c+編程

23、把scene加到view上。第二部分利用c+的stl完成掃雷底層的數(shù)據(jù)結(jié)構(gòu),即一個x行y列的數(shù)據(jù)結(jié)構(gòu),類似于二維數(shù)組。-1代表雷,n(0-8)代表周圍有n個雷。再利用qt的類庫和c+編程把stl的數(shù)據(jù)和stl的item結(jié)合起來,實現(xiàn)掃雷的底層數(shù)據(jù)功能。第三部分再利用c+的stl創(chuàng)建一個x行y列的item,在網(wǎng)上選擇好圖片,把圖片這個道具加場景中,實現(xiàn)掃雷的上層圖片功能。把stl數(shù)據(jù)和item結(jié)合起來,加到場景中。第四部分用c+編寫程序?qū)嵙?xí)掃雷的基本功能。第五部分再利用qt的兼容性好,把掃雷游戲移植到arm9開發(fā)板上運行測試。如圖2-1所示。stl數(shù)據(jù)arm開發(fā)板pc機上掃雷stl圖片vsi圖形

24、界面視圖及場景移動平臺掃雷 功能程序塊圖2-1掃雷模塊圖2.2 掃雷游戲主要功能(1)提示區(qū)上側(cè)顯示菜單欄,可以選擇雷的數(shù)目和整個區(qū)域的大小。(2)提示區(qū)下面位置按鈕用于開局;(3)單擊鼠標(biāo)左鍵于未知區(qū)域,如果未知區(qū)域有雷,游戲結(jié)束,顯示所有的地雷;如果沒有雷,則顯示一張數(shù)字的圖片,代表周圍八格的雷數(shù),如果周圍沒雷,則再查看周圍八個區(qū)域是否有雷,沒雷用遞歸一直翻開圖片。直到有雷為止,并顯示周圍雷的數(shù)目; (4)單擊鼠標(biāo)右鍵于未知區(qū)域,則顯示一個標(biāo)志,將其標(biāo)識有雷。在該位置再次單擊右鍵則取消;(5)將雷全部掃完后,會出現(xiàn)一個提示框,顯示游戲勝利。如圖2-2所示。開局為初始化雷數(shù)以及區(qū)域大小以及重

25、新開始游戲,默認(rèn)為三行五列,雷數(shù)數(shù)目為四個。可以單擊選項來調(diào)整區(qū)域的大小和雷的數(shù)目。退出為退出游戲。圖2-3為已經(jīng)把雷全部找出來的圖片。圖2-4為掃雷游戲的總體流程圖。 圖2-2 掃雷界面的初始化圖2-3 掃雷成功的界面 圖2-4 總體流程圖否 結(jié)束是是否是否是否重新開始 遞歸 空白 成功是否掃完 數(shù)字是否是雷 左鍵初始化設(shè)定 開始 右鍵 標(biāo)志取消標(biāo)志 右鍵2.3 設(shè)計的軟件本設(shè)計主要用到qt4.0作為開發(fā)軟件。因為qt4.0具備以下一些優(yōu)點:(1)支持平臺廣泛qt應(yīng)用程序接口與工具兼容于所有支持平臺,讓開發(fā)員們掌握一個應(yīng)用程序接口,便可執(zhí)行與平臺非相關(guān)的應(yīng)用開發(fā)與配置,其支持的平臺有:qt/

26、windows(windows xp,2000,nt4,me/98)、qt/mac (mac os x)、qt/x11(linux ,solarishp-ux,irix,aix)等??梢浦残阅芨摺?2)封裝多qt對不同平臺的專門qpi進行了專門的封裝(文件處理、網(wǎng)絡(luò)等)??杀Wo程序的數(shù)據(jù)以及變量,防止程序出錯。(3)面向?qū)ο髊t具有模塊設(shè)計和注重軟件構(gòu)件或元素的可重用性的特點。 (4)構(gòu)件支持 qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調(diào),冰支持對象之間在彼此不知道對方信息的情況下進行合作,這使得qt非常適合于真正的構(gòu)件編程。 (5)友好的聯(lián)機幫助 q

27、t提供了大量的聯(lián)機參考文檔,有超文本html方式,也有unix幫助手冊和補充說明,并且對于初學(xué)者,其中的指南將一步步介紹如何進行qt編程。 (6)便利性 由于qt是一種跨平臺的gui工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題。 (7)豐富的api函數(shù) qt為專業(yè)應(yīng)用提供了大量的函數(shù),在qt的api中含有大約250個c+類,大多數(shù)的類都是gui專有的。 (8)可用戶化外觀 qt支持主題,基于qt的應(yīng)用程序能夠在windows外觀、motif外觀,以及其他一些用戶化主題之間切換。 (9)完整的一套組件工具 qt編程的基本模

28、塊稱之為組件,組件是用戶界面的組成部分,qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件。2.4 設(shè)計的環(huán)境本次設(shè)計主要用linux系統(tǒng)作為開發(fā)環(huán)境,因為linux具有如下優(yōu)點:真正開放的操作系統(tǒng)。也許,linux的最大賣點就是它所給與客戶的選擇性。從硬件到支持再到linux的發(fā)行版,你可以有很多的選擇。你可以在一個價值200美元的舊pc機上運行l(wèi)inux系統(tǒng),你也可以將它作為一個lpar(羅輯分區(qū))運行在價值數(shù)百萬美元的p595 ibm p系列服務(wù)器(server網(wǎng)絡(luò)資源下載)上(你需要在rhel4 或 sles9之間作出選擇),你甚至能夠在ibm主機上運行l(wèi)inux系統(tǒng)。使用linux,

29、你不再會與硬件分銷商發(fā)生沖突。盡管unix也被定義為一個開放的系統(tǒng),但現(xiàn)實是,你通常會與一個硬件供應(yīng)商捆綁在一起。linux是一個真正的開放系統(tǒng)。linux是一套免費使用和自由傳播的類unix操作系統(tǒng),是一個基于posix和unix的多用戶、多任務(wù)、支持多線程和多cpu的操作系統(tǒng)。它能運行主要的unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。linux繼承了unix以網(wǎng)絡(luò)為核心的設(shè)計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。它主要用于基于intel x86系列cpu的計算機上,也可運用在其他芯片上。linux的低成本、強大的定制功能以及良好的移植性能,使得linux在嵌入式系統(tǒng)

30、方面也得到廣泛應(yīng)用。由于linux內(nèi)核可裁剪,且免費,并且其在世界范圍內(nèi),有強大的技術(shù)支持,所以在得到了飛速發(fā)展。2.5 設(shè)計的語言本次設(shè)計主要運用c+編寫程序,c+具備如下一些優(yōu)點:c+設(shè)計成靜態(tài)類型、和c同樣高效且可移植的多用途程序設(shè)計語言。c+設(shè)計成直接的和廣泛的支持多種程序設(shè)計風(fēng)格(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。c+設(shè)計成給程序設(shè)計者更多的選擇,即使可能導(dǎo)致程序設(shè)計者選擇錯誤。c+設(shè)計成盡可能與c兼容,籍此提供一個從c到c+的平滑過渡。c+避免平臺限定或沒有普遍用途的特性。 c+不使用會帶來額外開銷的特性。 c+設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。 c+的很多

31、特性都是以庫(如stl)或其他的形式提供的,而沒有直接添加到語言本身里。 c+在一定程度上可以和c語言很好的結(jié)合,甚至目前大多數(shù)c語言程序是在c+的集成開發(fā)環(huán)境中完成的。c+相對眾多的面向?qū)ο蟮恼Z言,具有相當(dāng)高的性能。 c+引入了面向?qū)ο蟮母拍?,使得開發(fā)人機交互類型的應(yīng)用程序更為簡單、快捷。很多優(yōu)秀的程序框架包括mfc、qt、wxwidgets就是使用的c+,本設(shè)計就是采用qt來實現(xiàn)功能。本設(shè)計主要建立五個類,每個類為一個源文件。通過類與類之間的調(diào)用來實現(xiàn)底層數(shù)據(jù)域上層圖片的結(jié)合,通過類與類之間的調(diào)用來實現(xiàn)初始化的設(shè)定。下圖列出了各個類以及類與類之間的組合關(guān)系。如圖2-6所示: cellite

32、m.cppsweepminesscene.cppmainwidow.cppminesdialog.cpp field.cpp圖2-6 各個類之間的組合關(guān)系2.6 設(shè)計的平臺本設(shè)計主要應(yīng)用arm9作為開發(fā)平臺,把掃雷游戲從pc機上移植到arm開發(fā)板上運行測試,實現(xiàn)移動設(shè)備的掃雷游戲。本設(shè)計運用mini2440開發(fā)板。mini2440 是一款真正低價實用的arm9 開發(fā)板,是目前國內(nèi)性價比最高的一款學(xué)習(xí)板;它采用samsung s3c2440 為微處理器,并采用專業(yè)穩(wěn)定的cpu 內(nèi)核電源芯片和復(fù)位芯片來保證系統(tǒng)運行時的穩(wěn)定性。mini2440 的pcb 采用沉金工藝的四層板設(shè)計,專業(yè)等長布線,保證

33、關(guān)鍵信號線的信號完整性。mini2440 的眾多先進特性,可以概括為:(1)第一款被linux 社區(qū)廣泛支持的國產(chǎn)2440 開發(fā)板(自從linux-2.6.31 開始,mini2440被正式加入linux 官方內(nèi)核)(2)第一款在linux 下支持萬能usb 攝像頭的2440 開發(fā)板(同類產(chǎn)品至今仍在使用近乎絕跡、拍攝效果奇差的中星微攝像頭,并且沒有圖形界面的應(yīng)用)(3)第一款統(tǒng)一采用支持eabi 標(biāo)準(zhǔn)交叉編譯器的開發(fā)板(同類產(chǎn)品仍在使用拼湊的各個版本的編譯器,導(dǎo)致開發(fā)效率低下,并且不利于初學(xué)者入門掌握)(4)第一款提供齊全bsp(基于linux-2.6.29(當(dāng)前為linux-2.6.32.

34、2)和windowsce 6.0)的開發(fā)板,并全面配有圖形界面實用應(yīng)用程序(同類產(chǎn)品的部分硬件只是各擺設(shè),并且還在盜用友善之臂早期的命令行測試代碼)(5)第一款支持.net 3.5 和騰訊qq 的2440 開發(fā)板(2009 年10 月,windowsce 6.0 補丁release 3 發(fā)布)(6)第一款可以讓用戶無需編程,即可自由簡單定制windowsce 開機畫面的開發(fā)板,并且可在10 秒內(nèi)極速啟動系統(tǒng)(同類產(chǎn)品的windowsce 系統(tǒng)啟動時間一般在30 秒甚至70 秒)(7)第一款完美支持usb 燒寫更新linux(support yaffs2)和windowsce 5.0/6.0的開

35、發(fā)板,并且支持整片nand flash備份到pc,真正適合批量生產(chǎn)(同類產(chǎn)品尚無備份功能)(8)第一款實現(xiàn)wince/linux圖形界面均可使用cmos 攝像頭預(yù)覽并拍照的開發(fā)板(同類產(chǎn)品尚無此功能)(9)第一款公開所有bsp源代碼(含linux 和windowsce)的開發(fā)板(齊全的bsp 讓初學(xué)者可以了解更多的底層,讓真正做開發(fā)的人只需關(guān)注上層應(yīng)用)(10)第一款內(nèi)核(含wince 和linux)同時支持大頁和小頁nand flash 的開發(fā)板,這樣新老用戶均可享用最新的軟件,并且使用方式相同(同類產(chǎn)品尚無此特性)(11)第一款在windowsce 和linux 下通過簡單直觀的圖形界面,

36、就可設(shè)置各種程序開機自動運行的開發(fā)板(同類產(chǎn)品尚無此功能)(12)mini2440 目前是國內(nèi)零售銷量最多的2440 開發(fā)板,靠口碑相傳及朋友間互相介紹,mini2440已經(jīng)被眾多用戶稱贊和認(rèn)同如圖2-7所示;圖2-7 arm9開發(fā)板第三章 軟件部分設(shè)計c+是一種面向?qū)ο蟮恼Z言,同時又兼容c面向過程的優(yōu)點。軟件部分共包含了7個類,每個類為一個源文件,再加上main函數(shù),總共8個源文件。通過類與類之間的調(diào)用來實現(xiàn)掃雷游戲的功能。軟件部分的設(shè)計包括視圖及場景,stl數(shù)據(jù),stl圖片,程序功能塊四個模塊,在本章將詳細對四個模塊進行設(shè)計。3.1 視圖和場景的設(shè)計3.1.1 視圖的設(shè)計視圖是一個游戲的主

37、窗口,由于掃雷游戲有界面,菜單等選項,所以新建一個帶qt控件的工程。選擇繼承基類qmainwindow,我們給這個類取名叫mainwindow,就會生成一個mainwindow.cpp的源文件和mainwindow.h的頭文件。qmainwindow為qt軟件里面的一個c+類,是qt的gui程序里面常的頂層窗口,類mainwindow繼承了qmainwindow類,qmainwindow類提供一個有菜單條、錨接窗口(例如工具條)和一個狀態(tài)條的主應(yīng)用程序窗口,會自動建立一個ui的界面文件,即掃雷游戲的主窗口。工程建立好之后打開工程的ui文件,如下圖3-1所示。 圖3-1 ui界面如圖中“在這里輸

38、入”可以輸入“菜單”、“幫助”、“退出”等控件。同時也會自動生成一個main.c的源文件,源文件中的程序如下:qapplication a(argc, argv);mainwindow w; w.show(); return a.exec();w為mainwindow類定義的一個對象,show()為mainwindow類中的一個函數(shù),為展示主窗口的意思,當(dāng)運行程序的時候w.show()為向用戶展示出游戲的界面。當(dāng)關(guān)閉游戲時,return a.exec()會自動返回一個0,同時程序運行結(jié)束。如圖3-2所示 圖3-2 運行的視圖此圖即為游戲的視圖,稱為view。3.1.2 場景的設(shè)計視圖設(shè)計好了之

39、后接下來就是設(shè)計場景,即scene。場景是加在視圖之上的界面,即掃雷的區(qū)域。一個視圖中可以加多個場景,每個場景是相互獨立,互不干擾的。所有東西都是建立在場景之上的,程序如下所示.頭文件中定義如下:ui:mainwindow *ui; sweepminesscene *scene; qgraphicsview *view;sweepminesscene、qgraphicsview都為qt中的c+類。源文件中程序如下:ui-setupui(this); view = new qgraphicsview; setcentralwidget(view); scene = new sweepminess

40、cene; view-setscene(scene);ui-setupui(this)中this指針并不是對象本身的一部分,不會影響sizeof(對象)的結(jié)果。this作用域是在類內(nèi)部,當(dāng)在類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數(shù)傳遞給函數(shù)。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜態(tài)成員函數(shù)的隱含形參,對各成員的訪問均通過this進行。這句程序的意思為設(shè)置本ui界面作為ui界面。view = new qgraphicsview,scene = new sweepminesscene為在內(nèi)存中開辟一段

41、空間來存放視圖和場景。setcentralwidget(view),view-setscene(scene)是設(shè)置好游戲的視圖和場景的意思。3.1.3 視圖中控件和動作的設(shè)計在游戲中我們能看到菜單欄有一些“菜單”、“幫助”、“退出”等控件,點擊控件就可以退出,重新開始游戲,查看版本信息等功能。打開ui界面,在界面中的“在這里輸入”中輸入你想要設(shè)計的控件,本設(shè)計選擇“菜單”,“幫助”兩個控件,同時設(shè)計“選項”,“退出”,“開局”,“關(guān)于”等幾個動作,“菜單”和“幫助”為主控件,“開局”,“選項”,“退出”為“菜單”主控件中的動作,點擊“菜單”我們就能看到下面三個動作,這三個動作為功能動作,“開局

42、”動作為開始游戲的意思,“選項”動作為我們設(shè)置游戲的行和列,“退出”動作為退出游戲。“關(guān)于”為“幫助”下的動作,打開“關(guān)于”可以看到此游戲的版本號和信息。在ui界面的下方我們可以看到控件和動作的信息,我們應(yīng)該把動作與游戲結(jié)合起來,在ui界面的下方列出了動作,雙擊動作,會看到如圖3-3所示的界面。 3-3 控件設(shè)計的界面 圖中文本為動作的名稱。對象名稱為程序中的名稱,因為qt的程序?qū)χ形牡闹С值?,同時不支持中文路徑,所以得用英文名稱。工具提示為我們在游戲時看到的名字。圖標(biāo)可以為每個動作選擇一張圖片作為圖標(biāo),同時我們可以拖動圖標(biāo)放到菜單欄下面的快捷鍵欄,因為“開局”這動作在游戲中用得比較頻繁,所以

43、我們?yōu)殚_局設(shè)計一個快捷圖標(biāo)。下面快捷鍵可以為每個動作設(shè)計一個快捷鍵。如圖3-4所示。 圖3-4 控件的展示菜單欄下面為快捷鍵欄,我們把開局的快捷圖標(biāo)拖到快捷鍵欄,點擊圖標(biāo)就可以開局??丶O(shè)計好之后接下來就是怎么把控件和程序結(jié)合起來。如圖3-5所示,3-5 ui界面中的控件信息圖3-5為ui界面下面的動作信息,我們右鍵點擊動作然后選擇“轉(zhuǎn)到槽”,就會彈出一個如圖3-6所示的對話框。圖3-6 選擇信號的對話框我們選擇triggered信號。這樣就為此動作自動設(shè)置了信號槽。在程序的頭文件的類中會自動生成private slots的成員,程序如下所示:private slots: void on_ac

44、tionoption_triggered(); void on_actionexit_triggered(); void on_actionabout_triggered(); void on_actionstart_triggered();同時會在源文件中會自動生成此四個函數(shù)。我們用程序編寫函數(shù)的功能就可以把動作的功能實現(xiàn)。我們將在3.4程序功能塊中再介紹。3.2 stl數(shù)據(jù)的設(shè)計3.2.1 stl的設(shè)計stl數(shù)據(jù)是掃雷游戲最底層的數(shù)據(jù),是控制掃雷功能的核心數(shù)據(jù)。用數(shù)字-1代表雷,數(shù)字0代表空格,周圍沒有雷的意思,數(shù)字1-8為代表周圍有1-8個雷的意思。再把底層數(shù)據(jù)和上層的圖片結(jié)合起來就形成

45、了掃雷的基本機構(gòu)。當(dāng)我們點擊一張圖片是,如果圖片下面的是數(shù)字0,表示你點中了雷,然后雷全部爆炸,如果下面是數(shù)字0,則用函數(shù)遞歸自動把周圍的圖片翻開,知道翻到有數(shù)字為止。如果下面是數(shù)字1-8,則只翻開此圖片,代表周圍1-8個雷。我們用c+中的容器來實現(xiàn)底層的數(shù)據(jù)結(jié)構(gòu),c+中的容器類包括“順序存儲結(jié)構(gòu)”和“關(guān)聯(lián)存儲結(jié)構(gòu)”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。若需要存儲的元素數(shù)在編譯器間就可以確定,可以使用數(shù)組來存儲,否則,就需要用到容器類了。c+中容器類有很多個,我們用vector容器,vector容器是連續(xù)存儲結(jié)構(gòu),每個元素

46、在內(nèi)存上是連續(xù)的,支持高效的隨機訪問和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下;先建立一個類field,會自動生成field.cpp的源文件和field.h的頭文件,然后在field類中建立一個名叫cells的vector類stl容器,程序如下:typedef vector cellcolumn;typedef vector cellmatrix;cellmatrix cells; int width; int height; int mines;typedef聲明,簡稱typedef,為現(xiàn)有類型創(chuàng)建一個新的名字,或稱為類型別名,在結(jié)構(gòu)體定義,還有一些數(shù)組等地方都大量的用到。我

47、們先聲明一個int型的vector單列的容器,取類型別名為cellcolumn,類似于數(shù)組中的一維數(shù)組。因為掃雷游戲是一個二維的圖形界面,所以我們得創(chuàng)建一個二維的數(shù)據(jù)。接下來聲明一個多列的容器,即容器中包含容器,聲明一個cellcolumn型的容器,取別名為cellmatrix,類似于二維數(shù)組。vector cells;是用類 vector定義一個cells的對象。這樣一個多容器就定義好了。width為掃雷游戲界面的寬,height為掃雷游戲界面的高,mines為掃雷游戲中雷的個數(shù)。如圖3-7所示:cells00cells01cells02.cells0ncells10cells11cells

48、12.cells1ncellsn0cellsn1cellsn2.cellsnnheightwidth3-7 底層數(shù)據(jù)的排版圖中每一列為一個單列的容器,把幾個單列的容器組合起來就組成多列的容器。void initcells()函數(shù)為容器擴容,即我們需要一個多大的容器來存放數(shù)據(jù),函數(shù)程序如下: for(int x=0; xwidth; x+) cells.push_back(cellcolumn(height); 我們用掃雷界面的高來作為單列的容器中的數(shù)值,再用一個for循環(huán)來把單列的容器堆入多列的容器中,用掃雷界面的寬作為for循環(huán)的循環(huán)次數(shù)。3.2.2 數(shù)據(jù)的設(shè)計容器建立好了,但是掃雷游戲的底

49、層數(shù)據(jù)怎么建立呢?我們利用void deploymines()函數(shù)來建立底層數(shù)據(jù)。我們首先把stl容器中的數(shù)值都清零,防止數(shù)據(jù)異常。如以下程序所示:for(int x=0; xwidth; x+) for(int y=0; y=0&x=0&yheight) if(cellsxy != -1) cellsxy+; 編寫一個void updatesurrounding(int x, int y)函數(shù)來把周圍的數(shù)值加1,只要此數(shù)值不是雷,即不等于-1,就把此數(shù)據(jù)加1,。我們利用rand函數(shù)來產(chǎn)生隨機數(shù),我們把雷隨機的布在我們掃雷界面的區(qū)域。在布雷的時候每布一個雷就要自減1,當(dāng)數(shù)值為0時布雷完成,但是

50、雷的數(shù)量是一個不變的數(shù)據(jù),我們必須保護mines這個變量。所以先把雷的數(shù)值賦給一個變量cpmines,我們來操作那個變量這樣就不會改變雷的數(shù)目。同時用while循環(huán)來控制布雷的個數(shù)。用兩個rand()函數(shù)來產(chǎn)生兩個隨機數(shù),一個用來表示雷的位置的橫坐標(biāo),一個用來表示雷的位置的縱坐標(biāo)。產(chǎn)生隨機數(shù)后為了不讓數(shù)值大于雷區(qū)域的寬和高,我們把產(chǎn)生的隨機數(shù)來分別對雷區(qū)域的寬和高取余,這樣就可以保證產(chǎn)生的數(shù)值不會大于雷區(qū)域的寬和高。當(dāng)產(chǎn)生完隨機數(shù)之后我們就得到了兩個坐標(biāo),把該坐標(biāo)的數(shù)值置為-1,代表此位置布下了一個雷。然后再調(diào)用void updatesurrounding(int x, int y)函數(shù)把雷周圍八個數(shù)值都加1。這樣布雷的底層數(shù)據(jù)結(jié)構(gòu)就完成了。用一個dump()函數(shù)來打印stl里面的數(shù)據(jù),即掃雷的底層數(shù)據(jù)。如圖3-8所示。圖3-8 掃雷底層的數(shù)據(jù)在此類的構(gòu)造函數(shù)中默認(rèn)設(shè)置好掃雷區(qū)域的寬和高,避免在開局的時候系統(tǒng)產(chǎn)生一個隨機的雷數(shù)值大于掃雷區(qū)域的寬高使程序出錯。設(shè)置掃雷區(qū)域?qū)挼哪J(rèn)值為5,高的默認(rèn)值為3,雷數(shù)的默認(rèn)值為4.程序如下:field:field(): width(5), height(3), mines(4) initcells(); deploymines();當(dāng)我們用此類定義一個對象時,系統(tǒng)會自動調(diào)用此類的構(gòu)造函數(shù)。在構(gòu)造函數(shù)中調(diào)用initc

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論