




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 畢 業(yè) 設(shè) 計(jì)(2016屆)題 目:基于安卓推箱子游戲的設(shè)計(jì)與開發(fā) 學(xué) 院 XXxxXX 專 業(yè) XXxxX 年 級 XXxxXX 學(xué)生學(xué)號 XXxxXX 學(xué)生姓名 XXxxXX 指導(dǎo)教師 XXxxXX XX年XX月XX日摘 要如今,伴隨著Google Android操作系統(tǒng)的盛行,基于Android SDK的系統(tǒng)開發(fā)和基于Android應(yīng)用的開發(fā)等已倍受大家關(guān)注. 但是目前基于Android游戲開發(fā)的市場還是不夠成熟的,因而一款休閑娛樂、鍛煉思維且適應(yīng)于Android操作系統(tǒng)的游戲必將成為主流. 在這個(gè)快速發(fā)展的社會壞境中,生活節(jié)奏飛快,人們需要適當(dāng)?shù)穆聛恚酒恼率墙Y(jié)合Eclipse
2、SDK開發(fā)平臺開發(fā)的一款基于安卓平臺的推箱子小游戲. 該游戲主要分為初始化模塊,界面模塊,數(shù)據(jù)存儲模塊,功能模塊及游戲控制模塊. 玩家通過控制小人的移動來推動箱子,將所有箱子都推到目的地從而過關(guān). 每關(guān)的難易程度不同,可保持玩家對游戲的新鮮感,本游戲不僅是適合各類人群休閑娛樂的活動,還有助于提高人們思考問題能力與想象力,改善思維方式,拓展思維. 關(guān)鍵詞:安卓 推箱子 EclipseAbstract Recently, along with the prevalence of Google Android operating system, the public has immensely co
3、ncerned on the development of applications that based on Android SDK systems and Android application. In this rapid development of social environment, the fast pace of life, people need to be appropriate to slow down . This issue is a Sokoban game, which is developed for Android system and is invent
4、ed based on the combination of Eclipse SDK development platform. players have to control the movement of a turtle to push a box and to put all boxes into the right destination. Particularly, the difficulty of each level is separated differently, which maintain the freshness of the game . The game is
5、 not only suitable for all kinds of people for leisure time, but also can help people to expand imagination and to improve creative thinking. Key Words:Android PushBox Eclipse數(shù)學(xué)計(jì)算機(jī)學(xué)院 寧夏大學(xué)本科畢業(yè)設(shè)計(jì)目錄1. 緒論11.1 研究背景和意義11.2 國內(nèi)外研究狀況21.3 本文主要工作內(nèi)容22. 相關(guān)技術(shù)簡介32.1 Android技術(shù)32.1.1 應(yīng)用程序32.1.2 Java開發(fā)方面42.1.3 C/C+開發(fā)
6、方面42.2 Android工作原理42.2.1 硬件抽像層42.2.2 系統(tǒng)內(nèi)核42.2.3 安全權(quán)限機(jī)制52.3 系統(tǒng)開發(fā)環(huán)境說明52.3.1 Android的開發(fā)環(huán)境說明52.3.2 開發(fā)環(huán)境53. 系統(tǒng)分析63.1 系統(tǒng)設(shè)計(jì)目標(biāo)63.2 系統(tǒng)可行性分析63.2.1 技術(shù)可行性分析63.2.2 操作可行性分析63.3.3 經(jīng)濟(jì)可行性分析63.3 系統(tǒng)功能需求概述73.4 系統(tǒng)設(shè)計(jì)規(guī)則73.5 業(yè)務(wù)流程設(shè)計(jì)74. 游戲的設(shè)計(jì)與實(shí)現(xiàn)94.1 主菜單界面模塊設(shè)計(jì)94.2 游戲界面設(shè)計(jì)94.3 設(shè)計(jì)方案115. 游戲功能設(shè)計(jì)說明及代碼135.1 對鍵盤的抬起按下接聽的實(shí)現(xiàn)135.2 主菜單界面的
7、實(shí)現(xiàn)145.3 游戲地圖的實(shí)現(xiàn)155.4 游戲中關(guān)于人物的實(shí)現(xiàn)175.5 屏幕滾動的實(shí)現(xiàn)186. 系統(tǒng)測試196.1 鍵盤的操作和功能測試196.2 箱子放置到指定位置時(shí)變色顯示功能的測試演示206.3 游戲是否通關(guān)判斷功能的測試演示207. 結(jié) 論22參考文獻(xiàn)23謝 辭241. 緒論1.1 研究背景和意義本課題來源于一款來自日本的古老游戲推箱子,其設(shè)計(jì)目的是訓(xùn)練人的邏輯思維能力. 游戲場景一般是設(shè)定在空間狹小的倉庫中,要求把箱子擺放到指定位置. 稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排箱子的位置和移動次序才可能完成任務(wù). 但任務(wù)的完
8、成還需要玩家頭腦清晰,在最少的步驟之下完成所有箱子的定向移動. 這就需要玩家開動腦筋,在大腦中模擬游戲中人物的行走路線. 而推箱子游戲是目前比較流行的游戲之一,很多操作系統(tǒng)或者流行軟件都會帶有這種游戲. 它既能鍛煉思維的嚴(yán)密性,又有很多樂趣. 我個(gè)人也比較喜歡玩這個(gè)游戲,因此,我就借這個(gè)機(jī)會將這個(gè)推箱子游戲用安卓語言實(shí)現(xiàn)了出來,然而隨著計(jì)算機(jī)游戲的發(fā)展,很多編程愛好者基于該游戲的思想開發(fā)了出各種版本、各種類型的推箱子. 這其中也包括很多手機(jī)版本的實(shí)現(xiàn),伴隨著手機(jī)與計(jì)算機(jī)的普及,很快推箱子游戲便進(jìn)入了千家萬戶. 推箱子游戲是一個(gè)經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎. 本文基于Androi
9、d技術(shù)和eclipse SDK開發(fā)環(huán)境, 開發(fā)了一個(gè)操作簡單、界面美觀、功能較齊全、可在Android SDK 2. 2平臺上運(yùn)行的推箱子游戲. 整個(gè)游戲包含了兩個(gè)公共類,主菜單界面相關(guān)類,游戲界面相關(guān)類,在這個(gè)游戲的設(shè)計(jì)過程中,可以加深我對安卓語言的應(yīng)用,提升了我的代碼編程能力,在整個(gè)游戲的開發(fā)過程中我查閱了很多資料,請教了好多同學(xué),開發(fā)這個(gè)游戲增強(qiáng)了我的動手能力. 通過該游戲的設(shè)計(jì)過程,培養(yǎng)了我的結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對安卓語言基本語言要素和流程結(jié)構(gòu)的理解,針對安卓語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行了訓(xùn)練,讓我獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),得到軟件工程的綜合訓(xùn)練,提高了我解決實(shí)際問題的能
10、力. 1.2 國內(nèi)外研究狀況Android是由Google為首的OHA(Open Handset Alliance)推出的一款開放的嵌入式操作系統(tǒng)平臺,從2008推出的android SDK1. 0到現(xiàn)在,Android SDK的最新版本已經(jīng)升級到了最新的2. 3,Android正以前所未有的速度聚集著來自世界各地的開發(fā)者,越來越多的創(chuàng)意被應(yīng)用到Android1應(yīng)用程序的開發(fā)中,大有席卷整個(gè)手機(jī)產(chǎn)業(yè)的趨勢. 說到Android系統(tǒng),Google于2007年11月5日宣布的基于Linux平臺的開源手機(jī)操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個(gè)為移動終端打造的真正
11、開放和完整的移動軟件. Android 的核心系統(tǒng)服務(wù)依賴于 Linux 2. 6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型. 由于Android帶有相當(dāng)濃郁的Linux血統(tǒng)這也就意味著他擁有開源Linux的眾多優(yōu)點(diǎn):安全、運(yùn)算速度快、易于開發(fā)等等. 正因?yàn)锳ndroid具有上述的優(yōu)點(diǎn),所以它在國內(nèi)具有相當(dāng)強(qiáng)勁的競爭優(yōu)勢. 青年網(wǎng)絡(luò)的主要負(fù)責(zé)人潘長華先生說到:Android作為一款十分優(yōu)秀的移動開發(fā)平臺十分適合國內(nèi)的開發(fā)環(huán)境. 尤其是中小企業(yè)開發(fā)團(tuán)隊(duì)低成本以及源代碼的分享可以為企業(yè)節(jié)省大量資金,這對于中小企業(yè)來說無疑是最大的誘惑. 青年網(wǎng)絡(luò)推出的星網(wǎng)睿話就是國內(nèi)成功的Andro
12、id開發(fā)產(chǎn)品. 同時(shí)一個(gè)資深的Android開發(fā)愛好者告訴記者:如果你是個(gè)人開發(fā)愛好者,那么Android就是Google為你量身打造的,放棄閉源的種種吧,開源才是王道,Android才是未來的主宰. 伴隨著Google Android操作系統(tǒng)的盛行,國內(nèi)外的開發(fā)團(tuán)隊(duì)也逐漸的壯大起來了,基于Android SDK的系統(tǒng)開發(fā),基于Android應(yīng)用的開發(fā)等已逐漸倍受大家關(guān)注,而手機(jī)游戲開發(fā)歷來是移動開發(fā)中分量最重的部分,面對如此火爆的Android市場自然也不甘示弱,由于Android的應(yīng)用層開發(fā)是基于Java的開發(fā),所以必有其可以快速移植J2ME開發(fā)的游戲的優(yōu)勢,但是移植的游戲必定也不能發(fā)揮A
13、ndroid操作系統(tǒng)獨(dú)特的特性,所以目前基于Android游戲開發(fā)的市場還是不夠成熟的,面對這種情況,在了解AndroidSDK基礎(chǔ)上,我打算開發(fā)一款完全適應(yīng)于Android操作系統(tǒng)的推箱子益智游戲,此游戲采用OpenGL技術(shù),實(shí)現(xiàn)2. 5D斜視角的立體視角,采用SQLite輕量級數(shù)據(jù)庫存儲技術(shù)等質(zhì)在為Android量生打造一款獨(dú)特的游戲. 1.3 本文主要工作內(nèi)容本文首先對系統(tǒng)所涉及到的基礎(chǔ)理論知識進(jìn)行闡述,并在此基礎(chǔ)上進(jìn)行了系統(tǒng)分析. 系統(tǒng)分析是平臺開發(fā)的一個(gè)不可缺少的環(huán)節(jié),為了能夠使本系統(tǒng)更好、更完善的被設(shè)計(jì)出來,就必須先進(jìn)行調(diào)查研究. 在系統(tǒng)調(diào)查的基礎(chǔ)上,對新系統(tǒng)的功能進(jìn)行系致的分析,
14、從而才能夠開發(fā)出完整的系統(tǒng)設(shè)計(jì). 本平臺利用了現(xiàn)在比較廣泛的安卓語言實(shí)現(xiàn)的. 其次考慮到系統(tǒng)實(shí)施的可行性,在軟件方面我選擇了如今比較流行的Android來進(jìn)行開發(fā)管理平臺的設(shè)計(jì),使用 Eclipse進(jìn)行開發(fā),Eclipse是非常成熟的開發(fā)工具,因此無論在可用性還是可靠性方面都毋庸置疑. 2. 相關(guān)技術(shù)簡介2.1 Android技術(shù)Android是一種以linux為基礎(chǔ)的開放源代碼操作系統(tǒng)2,主要使用于便攜設(shè)備. 目前尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”. Android操作系統(tǒng)最初由Andy Rubin開發(fā),最初主要支持手機(jī). 2005年由google收購注資,并組建開
15、放手機(jī)聯(lián)盟開發(fā)改良,逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上. Android的主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS. 2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一. 2012年2月數(shù)據(jù),Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場52. 5%的份額,中國市場占有率為68. 4%. 并且Android支持多種操作系統(tǒng)3-4. Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu). android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和linux核心層. Android是以Linux為核心的手機(jī)操作平
16、臺5,作為一款開放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng). 在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應(yīng)用程序,也可以通過NDK使用C/C+作為編程語言來開發(fā)應(yīng)用程序,也可使用SL4A來使用其他各種腳本語言進(jìn)行編程(如:python、lua、tcl、php等等),還有其他諸如:QT(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持An
17、droid編程,甚至通過MonoDroid,開發(fā)者還可以使用C#作為編程語言來開發(fā)應(yīng)用程序. 另外,谷歌還在2009年特別發(fā)布了針對初學(xué)者的Android Simple語言,該語言類似Basic語言. 而在網(wǎng)頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持Android開發(fā). 2.1.1 應(yīng)用程序早期的Android應(yīng)用程序開發(fā),通常通過Android SDK(Android軟件開發(fā)包)下使用Java作為編程語言來開發(fā)應(yīng)用程序,但通過不同的軟件開發(fā)包,則使用的編程語言也不同. 例如開發(fā)者可以通過Andro
18、id NDK(Android Native開發(fā)包)使用C語言或者C+語言來作為編程語言開發(fā)應(yīng)用程序. 同時(shí)谷歌還推出了適合初學(xué)者編程使用的Simple語言,該語言類似微軟公司的Visual Basic語言. 此外,谷歌公司還推出了Google App Inventor開發(fā)工具,該開發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開發(fā)者. 2.1.2 Java開發(fā)方面Android支持使用Java作為編程語言來開發(fā)應(yīng)用程序,而Android的Java開發(fā)方面從接口到功能,都有層出不窮的變化. 考慮到Java虛擬機(jī)的效率和資源占用,谷歌重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與
19、J2ME等不同. 2.1.3 C/C+開發(fā)方面早期的Android開發(fā)只支持Java作為編程語言開發(fā)應(yīng)用程序,因而使得其他語言開發(fā)者只能望而卻步. 2010年4月,谷歌正式對開發(fā)者發(fā)布了Android NDK,NDK允許開發(fā)者使用C/C+作為編程語言來為Android開發(fā)應(yīng)用程序,初版的NDK使得開發(fā)者看到了C/C+在Android開發(fā)中的希望. 但是,當(dāng)前版本的NDK在功能上還有很多局限性:NDK并沒有提供對應(yīng)用程序生命周期的維護(hù);NDK也不提供對Android系統(tǒng)中大量系統(tǒng)事件的支持;對于作為應(yīng)用程序交互接口的UI API,當(dāng)前版本的NDK中也沒有提供. 但是相對于初版的NDK,現(xiàn)在的ND
20、K已經(jīng)進(jìn)行了許多重大的功能改進(jìn). 由此可見,NDK仍然需要完善和發(fā)展,相信未來隨著NDK的發(fā)展,NDK可以做得更多更好. 2.2 Android工作原理2.2.1 硬件抽像層Android 的 HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動模塊. HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達(dá)成 kernel independent 的概念,也讓 Android framework 的開發(fā)能在不考量驅(qū)動程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展. HAL stub 是一種代理人(proxy)的概
21、念,stub 是以 *. so 檔的形式存在. Stub 向 HAL“提供”操作函數(shù)(operations),并由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 這些操作函數(shù). HAL 里包含了許多的 stub(代理人). Runtime 只要說明“類型”,即 module ID,就可以取得操作函數(shù). 2.2.2 系統(tǒng)內(nèi)核Android 是運(yùn)行于 Linux kernel之上,但并不是GNU/Linux. 因?yàn)樵谝话鉍NU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK
22、、Pango及Glibc等都被移除掉了. Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等. Android 為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU GPL授權(quán)證所約束的部份,例如Android將驅(qū)動程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開. bionic/libc/kernel/ 并非標(biāo)準(zhǔn)的kernel header files. Android 的 kernel header 是利用工具由 Linux kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)
23、構(gòu)與宏. 2.2.3 安全權(quán)限機(jī)制Android本身是一個(gè)權(quán)限分立的操作系統(tǒng). 在這類操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識別身份運(yùn)行(Linux用戶ID與群組ID). 系統(tǒng)的各部分也分別使用各自獨(dú)立的識別方式. Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開. 系統(tǒng)更多的安全功能通過權(quán)限機(jī)制提供. 權(quán)限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對特定數(shù)據(jù)段的訪問. Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒有權(quán)限對其他應(yīng)用、系統(tǒng)或用戶進(jìn)行較大影響的操作. 一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限. 用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡單判定這
24、款應(yīng)用是否安全. 如一款應(yīng)用是不帶廣告的單機(jī)版,也沒有任何附加的內(nèi)容需要下載,那么它要求訪問網(wǎng)絡(luò)的權(quán)限就比較可疑. 編輯本段系統(tǒng)組件Android開發(fā)四大組件分別是:活動(Activity): 用于表現(xiàn)功能. 服務(wù)(Service): 后臺運(yùn)行服務(wù),不提供界面呈現(xiàn). 廣播接收器(BroadcastReceiver):用于接收廣播. 內(nèi)容提供商(Content Provider): 支持在多個(gè)應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫. 2.3 系統(tǒng)開發(fā)環(huán)境說明2.3.1 Android的開發(fā)環(huán)境說明為了學(xué)習(xí)Android的 UI和功能,我們可以通過Android Virtual Device(AVD)
25、來實(shí)現(xiàn). AVD是Google提供給開發(fā)人員來調(diào)試他們開發(fā)的應(yīng)用程序的,它可以運(yùn)行在我們的PC機(jī)上,提供與真實(shí)手機(jī)形同的UI和操作方式,只是底層的硬件驅(qū)動不同. 我們可以用鼠標(biāo)代替手機(jī)在AVD上實(shí)現(xiàn)點(diǎn)、劃、按等觸摸操作. 實(shí)現(xiàn)這一切的前提是我們需要搭建一個(gè)Android的開發(fā)環(huán)境. 2.3.2 開發(fā)環(huán)境開發(fā)所用操作系統(tǒng):Windows 7 64位IDE:Eclipse開發(fā)語言:安卓開發(fā)所用插件:ADT 12. 0. 0SDK:Android SDK 2. 2,JDK 1. 6及以上辦公軟件:Office 2007 Office Visio20033. 系統(tǒng)分析3.1 系統(tǒng)設(shè)計(jì)目標(biāo)基于安卓版推箱
26、子游戲的具體開發(fā)目標(biāo)為:(1)完成游戲菜單的設(shè)計(jì),實(shí)現(xiàn)菜單上按鈕功能. (2)設(shè)計(jì)游戲地圖,并將建筑物、箱子、人物在地圖中設(shè)置好(3)主角不能穿過箱子;(4)箱子數(shù)量和目標(biāo)位置數(shù)量相等(但每個(gè)箱子并不和唯一的目標(biāo)位置一一對應(yīng));(5)主角可以移動和推動木箱(響應(yīng)鍵盤方向鍵);(6)主角只能往前推動箱子,不能向后或者向側(cè)面拉箱子;(7)主角不能同時(shí)推動兩個(gè)箱子;(8)箱子移動方向正前方緊挨墻壁,不可推動;(9)將所有箱子推到設(shè)定位置則通過本關(guān),自動進(jìn)入下一關(guān)卡. 3.2 系統(tǒng)可行性分析3.2.1 技術(shù)可行性分析在策劃推箱子游戲時(shí),首要考慮到要設(shè)計(jì)一個(gè)優(yōu)美的游戲界面,操作起來更加人性化,即玩家可以
27、用鍵盤的上、下、左、右鍵控制人物的移動位置,在畫面方面也要更加清新,該游戲是一個(gè)輕量級的益智游戲,不存在復(fù)雜的情節(jié),做的主要工作為設(shè)計(jì)游戲各關(guān)倉庫的形狀、大小、可通過區(qū)域、各關(guān)中箱子的初始位置與目的地. 上述種種都可以用Android原因來實(shí)現(xiàn). 在編寫程序是需要上網(wǎng)搜集了游戲中要用到的圖片、聲音等,收集一些有用的素材. 3.2.2 操作可行性分析本游戲只需要玩家操作四個(gè)鍵位即上下左右四個(gè)鍵位來控制游戲中人物的動作,操作簡單易懂,對玩家來說不需要高深的計(jì)算機(jī)專業(yè)知識,只要認(rèn)識漢字,懂得開關(guān)游戲,就可以對系統(tǒng)進(jìn)行使用. 3.3.3 經(jīng)濟(jì)可行性分析由于游戲?qū)儆诎沧堪姹拘∮螒?語言平臺是開放的,編譯
28、器也是學(xué)生學(xué)習(xí)版本不需要交錢,整個(gè)游戲并不算太大,因此開發(fā)成本不算太高. 整個(gè)開發(fā)過程由一個(gè)人參與,只需要一臺PC機(jī),就可以實(shí)現(xiàn)全部的開發(fā)任務(wù). 由于PC機(jī)是我自己所有的,而且無需專門升級硬件;而各種軟件,又是能夠在網(wǎng)上免費(fèi)下載的,因此,整個(gè)開發(fā)成本可以說是非常的低廉,這也為以后進(jìn)一步完善游戲提供了非常大的方便. 在使用成本上,用戶只需要擁有一部手機(jī),安裝本游戲APK就可以使用本游戲,無需付出任何代價(jià),而且對手機(jī)的硬件的需求也不是很高,軟件方面也沒有特殊的需求,易于推廣和使用. 因此,從經(jīng)濟(jì)可行性分析來看,這個(gè)游戲完全是可行的. 3.3 系統(tǒng)功能需求概述基于安卓的推箱子小游戲運(yùn)用于手機(jī)端,手機(jī)
29、端實(shí)現(xiàn)了打開游戲、進(jìn)入游戲列表,開始游戲、開關(guān)聲音、游戲幫助、退出游戲四項(xiàng)功能. 進(jìn)入游戲以后利用上下左右四個(gè)鍵控制游戲,進(jìn)入游戲以后按下左下角有退出按鈕,游戲會退回到菜單頁面. 3.4 系統(tǒng)設(shè)計(jì)規(guī)則無論哪個(gè)游戲都要有它自己的設(shè)計(jì)規(guī)則. 該游戲也一樣,它的主要設(shè)計(jì)規(guī)則有:簡單性:在實(shí)現(xiàn)系統(tǒng)的功能的同時(shí),盡量讓系統(tǒng)操作簡單易懂,這對于一個(gè)系統(tǒng)來說是非常重要的. 針對性:該系統(tǒng)設(shè)計(jì)是基于安卓版推箱子小游戲的設(shè)計(jì)與實(shí)現(xiàn),所以具有專業(yè)突出和很強(qiáng)的針對性. 實(shí)用性:該游戲操作簡單,打開即玩,具有良好的實(shí)用性. 3.5 業(yè)務(wù)流程設(shè)計(jì)業(yè)務(wù)流程分析階段要調(diào)查系統(tǒng)所涉及每個(gè)環(huán)節(jié)的管理業(yè)務(wù)活動,掌握所有管理業(yè)務(wù)的
30、內(nèi)容、作用和信息的輸入、輸出、數(shù)據(jù)存儲以及信息處理方法和過程,并根據(jù)業(yè)務(wù)的實(shí)際處理步驟和過程,繪制出業(yè)務(wù)流程圖. 業(yè)務(wù)流程圖(Transaction Flow Diagram,TFD),它是用一些規(guī)定的符號及連線來表示某個(gè)具體業(yè)務(wù)處理過程的圖表,即描述系統(tǒng)內(nèi)各單位、人員之間的業(yè)務(wù)關(guān)系、作業(yè)順序和管理信息流向的圖. 業(yè)務(wù)流程圖如圖3-1所示:圖3-1業(yè)務(wù)流程圖4. 游戲的設(shè)計(jì)與實(shí)現(xiàn)4.1 主菜單界面模塊設(shè)計(jì)游戲的界面只有一個(gè)主菜單界面和一個(gè)游戲界面組成,菜單界面包含了四項(xiàng)功能按鈕,在游戲界面中只有一個(gè)退回到主菜單界面的按鈕. 如下圖4-1所示. 圖4-1 界面模塊圖 4.2 游戲界面設(shè)計(jì)啟動游戲
31、后便可直接進(jìn)入游戲主界面,主界面上玩家可以自由選擇對游戲的操作. 該游戲的運(yùn)行步驟與界面設(shè)計(jì)如下:啟動游戲后游戲主界面,效果如圖4-2所示. 圖4-2 游戲主界面圖點(diǎn)擊“開始游戲”,即可進(jìn)入系統(tǒng)設(shè)置的關(guān)卡中,默認(rèn)從第一關(guān)開始,在游戲地圖下方只有一個(gè)退出按鈕,玩家可以通過退出按鍵返回游戲主界面. 玩家現(xiàn)在就可以開始游戲旅途,充分開動腦筋,挑戰(zhàn)每一關(guān)卡,關(guān)卡難度設(shè)計(jì)由易到難. 效果如圖4-3所示. 圖4-3 游戲第一關(guān)圖當(dāng)玩家將所有箱子推向目的地,這時(shí)候游戲會提示恭喜過關(guān),點(diǎn)擊游戲屏幕繼續(xù). 如圖4-4所示. 圖4-4 游戲勝利提示圖當(dāng)游戲通過第一關(guān)時(shí)游戲進(jìn)入第二關(guān),第二關(guān)游戲如圖4-5所示. 圖
32、4-5 第二關(guān)圖點(diǎn)擊“退出”,則會退回游戲主菜單. 4.3 設(shè)計(jì)方案游戲主體設(shè)計(jì)主要分為以下幾個(gè)模塊6-7:控制調(diào)度模塊、圖形界面模塊、邏輯運(yùn)算模塊、動畫效果模塊本游戲分五個(gè)模塊(1)初始化模塊,對游戲界面進(jìn)行初始化操作,包括界面切換、和控制聲音播放. (2)功能實(shí)現(xiàn)模塊,主要是對游戲中各個(gè)環(huán)節(jié)進(jìn)行繪制,設(shè)計(jì)出系統(tǒng)地圖,對玩家手機(jī)鍵位的設(shè)定,音樂功能調(diào)用,游戲中所有文字的提示信息以及游戲中背景和文字顏色大小等設(shè)置的實(shí)現(xiàn). (3)游戲設(shè)計(jì)模塊,實(shí)現(xiàn)玩家控制人物的操作,使之能夠操作箱子到各個(gè)位置,以完成游戲設(shè)定的任務(wù). (4)游戲數(shù)據(jù)模塊,游戲數(shù)據(jù)合理性的判斷. (5)功能控制模塊,控制游戲功能的
33、實(shí)現(xiàn),包括創(chuàng)建菜單、調(diào)用系統(tǒng)音樂、獲取當(dāng)前系統(tǒng)狀態(tài)、獲取游戲界面圖標(biāo)等參數(shù)、保存游戲. 系統(tǒng)功能結(jié)構(gòu)圖如圖4-6所示圖4-6 系統(tǒng)功能模塊圖5. 游戲功能設(shè)計(jì)說明及代碼5.1 對鍵盤的抬起按下接聽的實(shí)現(xiàn)在對鍵盤的抬起按下進(jìn)行接聽是用到了兩個(gè)類PushBoxActivity、KeyThread. PushBoxActivity主要是游戲的控制器,其主要功能是各個(gè)view之間的切換. 在這個(gè)程序中,定義了一些變量,例如是否播放聲音的變量boolean isSound=true,勝利時(shí)的聲音MediaPlayer winSound,儲存游戲地圖的變量 int map;int map2,和選中地圖的變
34、量int selectMap,鍵盤的狀態(tài)變量 int action 以及最重要的Handler myHandler=new Handler變量,該變量用于接收各個(gè)view的控制消息,然后根據(jù)消息的類型進(jìn)行不同的處理. 在定義好好一些變量之后,初始化游戲中的聲音,設(shè)置為循環(huán)播放. 改程序最后的部分編寫的是鍵盤抬起的處理和鍵盤按下的處理方法. 鍵盤的抬起和鍵盤的按下代碼如下:public boolean onKeyUp(int keyCode, KeyEvent event) /鍵盤抬起 if(keyCode = 19)/上 action = action & 0x37; if(keyCode =
35、 20)/下 action = action & 0x3B; if(keyCode = 21)/左 action = action & 0x3D; if(keyCode = 22)/右 action = action & 0x3E; return false; public boolean onKeyDown(int keyCode, KeyEvent event)/鍵盤按下監(jiān)聽 if(keyCode = 19)/上 action = action | 0x08; if(keyCode = 20)/下 action = action | 0x04; if(keyCode = 21)/左 act
36、ion = action | 0x02; if(keyCode = 22)/右 action = action | 0x01; return false;KeyThread主要負(fù)責(zé)定時(shí)檢測PushBoxActivity中鍵盤狀態(tài)碼,負(fù)責(zé)鍵盤事件. 在此程序中,睡眠的時(shí)間定為150ms,并對循環(huán)標(biāo)志位、是否監(jiān)聽鍵盤和鍵盤各個(gè)方向是否按下變量做出定義. 該類的重點(diǎn)在于監(jiān)聽的運(yùn)行,監(jiān)聽的運(yùn)行方法先判斷是否需要監(jiān)聽,當(dāng)需要監(jiān)聽,判斷其為走路或者推箱子,得到鍵盤的狀態(tài)碼,賦值到變量action中,通過處理運(yùn)算,判斷哪個(gè)鍵被按下,例如向上鍵被按下時(shí),先判斷是否達(dá)到最上方,若沒達(dá)到最上方則判斷是否有箱子,若
37、上方有箱子移動是,需要啟動箱子移動線程,進(jìn)行箱子的無極移動,在此過程中將鍵盤的監(jiān)聽標(biāo)志位設(shè)為false,即失去鍵盤監(jiān)聽. 其他方向鍵被按下時(shí),判斷類似. 向上被按下時(shí)的鍵盤監(jiān)聽方法如下:while(flag)if(keyFlag)/是否需要鍵盤監(jiān)聽boolean typeFlag = true;/什么類型. 推箱子或者走路action = pushBoxActivity. action;/得到當(dāng)前鍵盤的狀態(tài)碼if(action & 0x08) != 0)/上KEY_UP = true;elseKEY_UP = false;if(action & 0x04) != 0)/下KEY_DOWN =
38、true;elseKEY_DOWN = false;if(action & 0x02) != 0)/左KEY_LEFT = true;elseKEY_LEFT = false;if(action & 0x01) != 0)/右KEY_RIGHT = true;elseKEY_RIGHT = false;5.2 主菜單界面的實(shí)現(xiàn)主菜單界面由MenuView、MenuViewDrawThread兩個(gè)類組成. MenuView繼承自SurfaceView,并且實(shí)現(xiàn)了SurfaceHolder,Callback接口. 程序有對該類中引用到的圖片進(jìn)行聲明,該類的構(gòu)造器, 游戲界面繪制是將各個(gè)獨(dú)立的組件相
39、結(jié)合,進(jìn)而繪制出的8. 界面的繪制工作的編寫,屏幕監(jiān)聽的方法. 在該類的構(gòu)造其中包括了刷幀線程進(jìn)行初始化和對圖片資源進(jìn)行初始化. 界面的繪制工作只需要將所有的圖片繪制到指定位置即可,而聲音狀態(tài)圖片會根據(jù)PushBoxActivity中的聲音狀態(tài)值進(jìn)行繪制. 屏幕的監(jiān)聽方法會在點(diǎn)擊聲音開關(guān)圖片時(shí),聲音開始的處理方法為將聲音標(biāo)志位致反,若此時(shí)聲音正在播放則聲音停止播放,若沒有聲音播放,則開始聲音播放. MenuViewDrawThread主要負(fù)責(zé)刷幀. 定時(shí)調(diào)用程序中onDraw方法. 在此程序的構(gòu)造器中,得到MenuView和surfaceHolder的引用. 程序中定義和編寫了睡眠時(shí)間和循環(huán)標(biāo)
40、志位實(shí)現(xiàn)的方法,界面的運(yùn)行方式. 界面的運(yùn)行方法先將畫布置空,鎖定畫布,然后繪制畫布最后解鎖畫,布并定義畫布每隔200ms循環(huán)一次. 5.3 游戲地圖的實(shí)現(xiàn)游戲地圖涉及到了兩個(gè)類MapList、GameView兩個(gè)類. MapList主要是地圖信息的封裝類,封裝了所有管卡中的地圖信息,包含了多個(gè)矩陣集合. 在地圖中用于到了迷宮電腦鼠9的思想. 迷宮問題是圖形學(xué)、圖論和數(shù)據(jù)結(jié)構(gòu)等領(lǐng)域中廣為人知的一個(gè)經(jīng)典問題10-11. GameVIew主要負(fù)責(zé)前臺的顯示,負(fù)責(zé)繪制游戲中所有的信息. 游戲地圖實(shí)現(xiàn)是整個(gè)游戲過程的核心,由于游戲的整個(gè)過程中呈現(xiàn)三維立體的效果. 所有游戲地圖設(shè)置也是至關(guān)重要的一塊,游
41、戲地圖整體是用二維數(shù)組存儲在文件中的. 在MapList中有具體的方法. 每次打開游戲會初始化一次地圖文件,游戲地圖分為兩層地板. 該類同樣繼承自SurfaceView并且實(shí)現(xiàn)SurfaceViewHolder,Callback接口. 此程序包括對PushBoxActivity的引用、初始坐標(biāo)的定義、各個(gè)圖片的聲明、箱子的坐標(biāo)、游戲的狀態(tài)值、構(gòu)造器、游戲畫面繪制的實(shí)現(xiàn),在構(gòu)造器中,PushBoxActivity的引用,初始化刷幀線程和圖片資源. 游戲畫面繪制時(shí)會根據(jù)游戲的狀態(tài)值不同進(jìn)行不同的繪制,狀態(tài)值為0時(shí)繪制游戲時(shí)的信息,狀態(tài)值為1時(shí)繪制游戲勝利時(shí)的信息. 游戲地圖繪制代碼如下:if(st
42、atus = 0)/正常游戲中paint. setAntiAlias(true);/抗鋸齒canvas. drawColor(Color. BLACK);/繪制黑背景/繪制第一層,即地板層for(int i=0; ipushBoxActivity. map1. length; i+)for(int j=0; jpushBoxActivity. map1i. length; j+) /根據(jù)索引值進(jìn)行坐標(biāo)轉(zhuǎn)換 int X = initX+36*j-15*i; int Y = initY+10*j+25*i; if(pushBoxActivity. map1ij = 0)/白色空地 paint. s
43、etColor(Color. argb(255, 220, 220, 220); this. myDrawRect(canvas, X, Y); else if(pushBoxActivity. map1ij = 1)/灰色空地 paint. setColor(Color. argb(255, 170, 170, 170); this. myDrawRect(canvas, X, Y); else if(pushBoxActivity. map1ij = 2)/目的地1 paint. setColor(Color. argb(255, 127, 255, 130); this. myDrawR
44、ect(canvas, X, Y); else if(pushBoxActivity. map1ij = 3)/目的地2 paint. setColor(Color. argb(255, 60, 255, 120); this. myDrawRect(canvas, X, Y); /開始繪制第二層,及建筑所在層for(int i=0; ipushBoxActivity. map2. length; i+)for(int j=0; jpushBoxActivity. map2i. length; j+) /根據(jù)索引值進(jìn)行坐標(biāo)轉(zhuǎn)換 int X = initX+36*j-15*i; int Y =
45、initY+10*j+25*i; if(pushBoxActivity. map2ij = 1)/第二層上有箱子處 if(tempi = i & tempj = j)/是當(dāng)前移動的箱子 canvas. drawBitmap(box, tx-1, ty-27, paint); else/不是移動的箱子 canvas. drawBitmap(box, X-1, Y-27, paint); else if(pushBoxActivity. map2ij = 2)/墻 canvas. drawBitmap(wall, X, Y-25, paint); else if(pushBoxActivity.
46、map2ij = 3)/綠色的箱子 if(tempi = i & tempj = j)/是當(dāng)前移動的箱子 canvas. drawBitmap(greenBox, tx-1 ,ty-27, paint); else/不是移動的箱子 canvas. drawBitmap(greenBox, X-1, Y-27, paint); /繪制精靈 if(i = pushBoxActivity. mySprite. i & j = pushBoxActivity. mySprite. j) pushBoxActivity. mySprite. drawMySelf(canvas, paint); canv
47、as. drawBitmap(exit2, 0, 440, paint); /繪制退出按鈕else if(status = 1)/恭喜過關(guān)paint. setAntiAlias(true);/抗鋸齒canvas. drawColor(Color. BLACK);/繪制黑背景canvas. drawBitmap(goon, -3, 70, new Paint();/繪制恭喜圖片5.4 游戲中關(guān)于人物的實(shí)現(xiàn)游戲中關(guān)于人物的實(shí)現(xiàn)涉及到了三個(gè)類 MySprite、SpriteMoveThread、SpriteThread. MySprite負(fù)責(zé)游戲中主人公的繪制、封裝的信息. 此程序包括了變量的定義、
48、圖片的定義、數(shù)組的定義、構(gòu)造器、初始化化圖片、把圖片放入數(shù)組中和繪制封裝的方法. 該程序定義了主人公的初始位置變量、當(dāng)前位置變量和是否處于行走的變量,定義了各個(gè)圖片的ID,并把ID放入數(shù)組中進(jìn)行管理. 程序的構(gòu)造器中得到PushBoxsActivity的引用,并根據(jù)角色當(dāng)前的位置換算出X、Y坐標(biāo),并換算出當(dāng)前的實(shí)際坐標(biāo). 繪制封裝的方法會根據(jù)角色當(dāng)前的狀態(tài)進(jìn)行繪制,如果正在行走,直接繪制即可. 如果不是在行走需要進(jìn)行坐標(biāo)換算和坐標(biāo)修正進(jìn)行繪制. 創(chuàng)建圖片數(shù)組和ID數(shù)組循環(huán)初始化所有圖片并把圖片放入數(shù)組中的代碼如下:public void initBitmap()/初始化所有的圖片manUp =
49、 new BitmapmanUpID. length;manDown = new BitmapmanDownID. length;manLeft = new BitmapmanLeftID. length;manRight = new BitmapmanRightID. length;manPushUp = new BitmapmanPushUpID. length;manPushDown = new BitmapmanPushDownID. length;manPushLeft = new BitmapmanPushLeftID. length;manPushRight = new Bitm
50、apmanPushRightID. length; for(int i=0; imanUpID. length; i+) manUpi = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manUpIDi); for(int i=0; imanDownID. length; i+) manDowni = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manDownIDi); for(int i=0; imanLeftID. length; i+) manLefti = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manLeftIDi); for(int i=0; imanRightID. length; i+) manRighti = BitmapFa
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保溫壺銷售合同范例
- 農(nóng)村木質(zhì)住房出售合同范例
- 出租車改造合同范例
- 刀具供貨合同范本
- 室內(nèi)裝修雨季施工方案
- 人員安全協(xié)議合同范本
- 保潔公司臨時(shí)合同范例
- 體育設(shè)備購銷合同范例
- 公司店鋪?zhàn)鈶{合同范例
- 上海整車運(yùn)輸業(yè)務(wù)合同范例
- 2025口腔科年度工作計(jì)劃
- iso28000-2022供應(yīng)鏈安全管理手冊程序文件表單一整套
- 養(yǎng)老院敬老院福利醫(yī)養(yǎng)機(jī)構(gòu)消防知識培訓(xùn)科普講座教學(xué)課件
- 商業(yè)辦公樓網(wǎng)絡(luò)改造施工方案
- 子癇診斷及治療
- 2025屆海南省??谑忻8呖加⒄Z二模試卷含解析
- 《中醫(yī)美容》課件
- 2023年高考真題-歷史(遼寧卷) 含解析
- 2024年中國主題公園競爭力評價(jià)報(bào)告-中國主題公園研究院
- 2024年中國電動紅外線槍玩具市場調(diào)查研究報(bào)告
- 2023年湖北省生態(tài)環(huán)保有限公司招聘考試真題
評論
0/150
提交評論