(貪食蛇設(shè)計(jì))_第1頁(yè)
(貪食蛇設(shè)計(jì))_第2頁(yè)
(貪食蛇設(shè)計(jì))_第3頁(yè)
(貪食蛇設(shè)計(jì))_第4頁(yè)
(貪食蛇設(shè)計(jì))_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 南昌航空大學(xué)嵌入式報(bào)告課程名稱:Android移動(dòng)應(yīng)用設(shè)計(jì)與開設(shè)計(jì)名稱:貪食蛇游戲?qū)W院:信息工程學(xué)院 班級(jí): 學(xué)號(hào): 姓名:- II - 目 錄§1 系統(tǒng)描述11.1 本設(shè)計(jì)的目的和意義11.2 設(shè)計(jì)的主要內(nèi)容11.4 設(shè)計(jì)實(shí)現(xiàn)功能和目標(biāo)21.5游戲設(shè)計(jì)環(huán)境3§2 游戲需求分析32.1 游戲處理流程32.2 需求分析42.3 功能模塊設(shè)計(jì)62.4 類模塊設(shè)計(jì)72.5 游戲圖形界面的圖形顯示更新功能8§3 游戲的基本實(shí)現(xiàn)83.1 GameConstants地圖和移動(dòng)93.2 Operator類103.3 Block類173.4 GameActivity類183.5

2、 Menu菜單Activity253.6 Welcome歡迎菜單313.7 GameView自定義的View控件333.8 Food 食物類37§4運(yùn)行結(jié)果38§5總結(jié)41- 41 - 基于手機(jī)android平臺(tái)的 “貪吃蛇”的設(shè)計(jì)和實(shí)現(xiàn)內(nèi)容提要: “貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂性強(qiáng)而廣受歡迎。本文基于Java技術(shù)和android開發(fā)環(huán)境,開發(fā)了一個(gè)操作簡(jiǎn)單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個(gè)游戲程序分為三個(gè)功能模塊,五個(gè)類模塊,實(shí)現(xiàn)了游戲的開始、暫停、結(jié)束。通過本游戲的開發(fā),達(dá)到學(xué)習(xí)android平臺(tái)操作技術(shù)和熟悉軟件開發(fā)流程的目的。§

3、;1 系統(tǒng)描述1.1 本設(shè)計(jì)的目的和意義 貪吃蛇游戲是一款非常經(jīng)典的手機(jī)游戲,貪吃蛇游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì),將難以成功開發(fā)出這個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個(gè)游戲的開發(fā)中,還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,在設(shè)計(jì)開發(fā)過程中,需要處理好各個(gè)類之間間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。正是因?yàn)槿绱?,本次設(shè)計(jì)的目的在于學(xué)習(xí)Java程序設(shè)計(jì)基本技術(shù),學(xué)習(xí)用android開發(fā)Java程序的相關(guān)技術(shù),熟悉游戲“貪吃蛇”的需求,熟悉項(xiàng)目開發(fā)的完整過程。學(xué)會(huì)怎樣進(jìn)行一個(gè)項(xiàng)目的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)等軟件開發(fā)

4、過程,熟練地掌握J(rèn)ava程序設(shè)計(jì)的基本技術(shù)和方法,熟練地掌握android環(huán)境的使用方法,培養(yǎng)初步的項(xiàng)目分析能力和程序設(shè)計(jì)能力。 1.2 設(shè)計(jì)的主要內(nèi)容貪吃蛇游戲設(shè)計(jì)與實(shí)現(xiàn),主要分為以下三個(gè)模塊:游戲主界面模塊、游戲控制模塊和游戲菜單模塊。在此只實(shí)現(xiàn)游戲的游戲主界面模塊、游戲控制模塊和游戲菜單模塊,并且只是實(shí)現(xiàn)開始、暫停、退出等最基本簡(jiǎn)單的功能。本次設(shè)計(jì)要達(dá)到的目標(biāo)分別從以下模塊進(jìn)行闡述:(1)游戲菜單模塊:這個(gè)模塊主要是為進(jìn)入游戲做準(zhǔn)備,是進(jìn)入游戲的第一步,提供“開始游戲”“游戲幫助”“退出游戲”等按鈕,通過幫助按鈕簡(jiǎn)單介紹游戲規(guī)則。(2)游戲主界面模塊:游戲的主界面是進(jìn)入游戲后,能夠給玩家

5、第一感官的部分,主要包括游戲圖形區(qū)域界面、游戲分?jǐn)?shù)以及關(guān)卡的顯示更新界面、提示退出游戲的快捷方式,游戲開始按鈕、暫停游戲按鈕以及退出游戲按鈕。從很大程度上決定了玩家對(duì)游戲的興趣問題,因此,游戲的主界面應(yīng)該力求美觀,爽心悅目。(3)游戲控制模塊:這個(gè)模塊是游戲的中心環(huán)節(jié),主要完成控制游戲的開始、暫停、退出,移動(dòng),加速等功能。為了能夠給玩家一個(gè)很好的游戲環(huán)境,這部分應(yīng)該做到易懂、易操作。 1.4 設(shè)計(jì)實(shí)現(xiàn)功能和目標(biāo)本設(shè)計(jì)所開發(fā)的是基于android手機(jī)平臺(tái)的一個(gè)貪吃蛇游戲軟件,主要實(shí)現(xiàn)游戲的開始、暫停、退出等功能,分為: 游戲主界面模塊、游戲控制模塊和游戲菜單三個(gè)模塊。性能:本軟件在設(shè)計(jì)方面本著方

6、便、實(shí)用及娛樂性高的宗旨,在對(duì)界面進(jìn)行設(shè)計(jì)的過程中,始終堅(jiān)持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯(cuò)等優(yōu)點(diǎn)。(1)游戲主界面模塊:主要包括游戲圖形區(qū)域界面、游戲開始按鈕、暫停游戲按鈕、關(guān)閉按鈕。游戲的主界面應(yīng)該力求美觀,爽心悅目。(2)游戲控制模塊:主要完成控制游戲的開始、暫停、退出等功能,這部分應(yīng)該做到易懂、易操作而且準(zhǔn)確率高,不易出錯(cuò)。(3)游戲菜單模塊:是進(jìn)入游戲主界面的第一步,提供“游戲幫助”等功能。這部分使貪吃蛇游戲軟件更加完善。1.5游戲設(shè)計(jì)環(huán)境android模擬器,模擬實(shí)現(xiàn)手機(jī)上的貪吃蛇游戲開發(fā)。軟件包括: android-sdk eclipse jdk-6u10-rc2-b

7、in-b32-windows-i586-p-12_sep_2008§2 游戲需求分析2.1 游戲處理流程 本次游戲設(shè)計(jì)的處理流程圖如下所示。開始初始化界面和蛇身放置食物蛇開始運(yùn)動(dòng)蛇吃到食?蛇長(zhǎng)大蛇死亡?繼續(xù)續(xù)?退出界面NNYNY游戲者按鍵選擇Y2.2 需求分析2.2.1 用戶的特點(diǎn) 游戲開發(fā)成功后,最終用戶為各個(gè)年齡段的人群,用戶范圍相當(dāng)廣泛。本游戲友好的用戶界面,簡(jiǎn)單易學(xué)的按鈕操作以及簡(jiǎn)單通俗的游戲規(guī)則,使廣大的用戶不需要專門進(jìn)行培訓(xùn),就可以立即學(xué)會(huì)如何使用。2.2.2 功能需求貪吃蛇是一款經(jīng)典的手機(jī)游戲,一條蛇在封閉圍墻里,通過按鍵盤上下左右四個(gè)鍵控制蛇向上下左右四個(gè)方向移動(dòng),如

8、果蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記1分;若吃到獎(jiǎng)勵(lì)蘋果,加兩分;若吃到毒蘋果,則減3分。在游戲過程中,如果長(zhǎng)按住方向鍵不放,則蛇的移動(dòng)速度加快,松開方向鍵,恢復(fù)原速。如果蛇在移動(dòng)中撞到墻或障礙物或者蛇頭撞倒自己身體,則游戲結(jié)束?。?) 游戲主界面模塊需求游戲界面主框架主要包括游戲圖形區(qū)域界面、游戲開始按鈕、游戲暫停按鈕、關(guān)閉按鈕。(2) 游戲圖形區(qū)域界面的需求游戲畫布區(qū)主要應(yīng)該包括游戲畫布中貪吃蛇隨機(jī)出現(xiàn)的位置,貪吃蛇重新出現(xiàn)的位置,事物隨機(jī)出現(xiàn)的位置。(3) 游戲菜單模塊的需求游戲菜單模塊主要是為進(jìn)入游戲主界面做準(zhǔn)備,提供“游戲幫助”介紹游戲規(guī)則。同時(shí)提供進(jìn)入游戲和退出游戲等

9、功能。2.2.3 屬性需求在可使用性方面,要求各個(gè)功能實(shí)現(xiàn)簡(jiǎn)單,操作方便,系統(tǒng)處理正確;整個(gè)系統(tǒng)恢復(fù)性能好,連接速度快,以確保系統(tǒng)可使用性好。另外,還要求系統(tǒng)的可擴(kuò)展性、可維護(hù)性、可移植性良好。2.3 功能模塊設(shè)計(jì)軟件開發(fā)過程中的功能模塊設(shè)計(jì),主要解決實(shí)現(xiàn)該游戲需求的程序模塊設(shè)計(jì)問題。包括如何把該游戲劃分成若干個(gè)模塊、決定各個(gè)模塊之間的接口、模塊之間傳遞的信息,以及模塊結(jié)構(gòu)的設(shè)計(jì)等。2.3.1 游戲功能 本系統(tǒng)主要完成以下幾方面的功能:游戲控制功能包括游戲的開始、暫停、退出界面布局其他輔助功能(如游戲幫助,游戲積分,游戲過關(guān)等)2.3.2 總設(shè)計(jì)模塊的劃分游戲總設(shè)計(jì)模塊劃分為游戲主要界面模塊、

10、游戲控制模塊和游戲菜單模塊。2.3.3 游戲主界面模塊游戲主界面模塊主要是指游戲的框圖,其包括一下內(nèi)容:1、游戲界面的邊界,即游戲中的墻;2、游戲中蛇的構(gòu)成,以及蘋果的構(gòu)成;3、游戲中障礙物的構(gòu)成;4、游戲中分?jǐn)?shù)顯示以及關(guān)卡顯示。2.3.4 游戲控制模塊(1)游戲開始控制:我們的程序是使用上鍵開始游戲,啟動(dòng)游戲后會(huì)有一個(gè)初始菜單界面,我們點(diǎn)擊“開始游戲”,彈出一句話“請(qǐng)按上鍵開始游戲”。游戲開始后蛇向下移動(dòng),然后由控制上下左右鍵來控制蛇的移動(dòng)。 在程序中我們重新建了一個(gè)activity來控制游戲的開始,使游戲的開始界面更美觀。(2)游戲暫??刂疲何覀兪鞘褂胏enter鍵來控制游戲的暫停的,這是

11、一項(xiàng)人性化的設(shè)計(jì),當(dāng)玩家在游戲過程中突遇緊急情況時(shí)可以按center鍵暫停游戲,等玩家空閑后按center鍵可以繼續(xù)游戲。(3)游戲退出控制:在游戲的退出上我們的程序使用了多種方式來應(yīng)對(duì)不同的情況,當(dāng)玩家正在游戲中時(shí),如想退出可以按“1”鍵,程序會(huì)自動(dòng)跳轉(zhuǎn)到初始菜單界面,在初始菜單界面點(diǎn)擊“退出游戲”即可退出游戲。如果玩家在游戲中由于碰到墻或者咬到自己或者碰到障礙物而導(dǎo)致游戲結(jié)束的,游戲或自動(dòng)彈出一個(gè)界面,里面有提示是繼續(xù)游戲還是退出游戲,當(dāng)點(diǎn)擊“取消”時(shí),游戲就會(huì)自動(dòng)跳轉(zhuǎn)到初始菜單,再點(diǎn)擊“退出游戲”即可。2.4 類模塊設(shè)計(jì)src源碼目錄:GameConstants地圖和移動(dòng);Operato

12、r為主要的邏輯運(yùn)算類,判斷移動(dòng),吃食物,死亡;Guttler為蛇類;Block為用來標(biāo)記每一個(gè)坐標(biāo)點(diǎn)上的小方塊,主要記錄方塊在二維數(shù)組中的坐標(biāo);GameActivity為顯示游戲主Activity,沒找到更好的音效,就沒用增加音效Menu為菜單Activity;Welcome為 歡迎菜單;自己的圖片;GameView為自定義的View控件,顯示并更新游戲畫面2.5 游戲圖形界面的圖形顯示更新功能在初始菜單界面,我們的程序設(shè)置了三個(gè)功能鍵:“開始游戲”“游戲幫助”“退出游戲”,“開始游戲”是進(jìn)入游戲的入口,“游戲幫助”是告訴玩家如何玩這個(gè)游戲,“退出游戲”是玩家退出游戲的出口。§3 游

13、戲的基本實(shí)現(xiàn) 3.1 GameConstants地圖和移動(dòng)package oneRain.Guttler.constants;import android.app.Activity;import android.content.SharedPreferences;import oneRain.Guttler.logic.Operator;public class GameConstants /設(shè)置移動(dòng)方向public static final int UP = 1;public static final int LEFT = 2;public static final int DOWN = 3

14、;public static final int RIGHT = 4;/設(shè)置常量public static final int GREEN_START = 1;public static final int RED_START = 2;public static final int YELLOW_START = 3;/消息類型public static final int MSG_UPDATE = 1;public static final int MSG_GAMEOVER = 2;public static final int MSG_PAUSE = 3;/方塊的大小public stati

15、c int SIZE = 20;/更新頻率public static int UPDATE_RATE = 500;/控制類public static Operator operator = null;/地圖二維數(shù)組public static int map;/設(shè)置當(dāng)前方向public static int curOrientation = 3;/設(shè)置當(dāng)前分?jǐn)?shù)public static int score = 0;/設(shè)置第一次吃得到的分?jǐn)?shù)public static int eveScore = 10;/SharedPreferencespublic static SharedPreference

16、s sp;/地圖選擇列表public static final String maps = ""2"型的", ""I"型的", ""U"型的"/地圖選擇public static int mapChoice = 4;3.2 Operator為主要的邏輯運(yùn)算類,判斷移動(dòng),吃食物,死亡;package oneRain.Guttler.logic;import java.util.ArrayList;import java.util.List;import java.util.Ra

17、ndom;import oneRain.Guttler.constants.GameConstants;import oneRain.Guttler.model.Block;import oneRain.Guttler.model.Food;import oneRain.Guttler.model.Guttler;public class Operator /貪吃蛇對(duì)象private Guttler guttler = null;/食物對(duì)象private Food food = null;/地圖二維數(shù)組private int map = null;private int xCount, yCo

18、unt;private boolean foodFlag = false;/構(gòu)造方法:參數(shù)部分可以對(duì)蛇的大小及位置做修改public Operator(int snakeLength, int xCount, int yCount) this.xCount = xCount;this.yCount = yCount;/初始化地圖initMap(xCount, yCount);/初始化貪吃蛇initSnake(snakeLength);/初始化地圖public void initMap(int xCount, int yCount)map = new intyCountxCount;food =

19、 new Food();/初始化蛇public void initSnake(int snakeLength)Block head = new Block(10, 1);List<Block> body = new ArrayList<Block>();for(int i=0; i<snakeLength; i+)body.add(new Block(9-i, 1);guttler = new Guttler(head, body, snakeLength);/以時(shí)間為變化更新地圖public int update(int orientation)/每一層更新都是

20、一次重繪clearTile();buildWall();if(!foodFlag)updateFood();foodFlag = true;buildFood();Block b = new Block();int x = 0;int y = 0;/主要分為移動(dòng)和吃蘋果兩種情況switch(orientation)case GameConstants.UP:x = guttler.getHead().getX()-1;y = guttler.getHead().getY();break;case GameConstants.LEFT:x = guttler.getHead().getX();y

21、 = guttler.getHead().getY()-1;break;case GameConstants.DOWN:x = guttler.getHead().getX()+1;y = guttler.getHead().getY();break;case GameConstants.RIGHT:x = guttler.getHead().getX();y = guttler.getHead().getY()+1;break;b.setX(x);b.setY(y);/判斷是移動(dòng)還是吃食物還是死亡if(mapxy = GameConstants.GREEN_START) |(mapxy =

22、GameConstants.YELLOW_START)/死亡return null;else if(mapxy = 0)/移動(dòng)return move(b);else /吃食物return eat(b);/生成食物private void buildFood() if(foodFlag)setTile(GameConstants.RED_START, food.getFood().getX(), food.getFood().getY();/初始化食物public void updateFood()int x, y;/獲取隨機(jī)數(shù)doRandom random = new Random();x =

23、 Math.abs(random.nextInt() % (yCount-1);y = Math.abs(random.nextInt() % (xCount-1);/防止第一行或者第一列(左邊和上邊的墻)if(x = 0)x = 1;if(y = 0)y = 1;while(mapxy != 0);setTile(GameConstants.RED_START, x, y);food.setFood(new Block(x, y);/吃食物的情況public int eat(Block block)foodFlag = false;map = move(block);Block tail =

24、 guttler.getBody().get(guttler.getBody().size()-1);guttler.getBody().add(tail);setTile(GameConstants.YELLOW_START, tail.getX(), tail.getY();/根據(jù)吃食物的多少來修改刷新的頻率,和積分/延遲變短 GameConstants.UPDATE_RATE = (int) (GameConstants.UPDATE_RATE * 0.95);/得分增加GameConstants.score += GameConstants.eveScore;GameConstants

25、.eveScore = (int) (GameConstants.eveScore * 1.1);return map;/移動(dòng)的情況public int move(Block block)/為身體賦值for(int i=guttler.getBody().size()-1; i>0; i-)/依次賦值guttler.getBody().set(i, guttler.getBody().get(i-1);/為身體第一個(gè)節(jié)點(diǎn)賦值賦值guttler.getBody().set(0, guttler.getHead();/為頭賦值guttler.setHead(block);/為蛇頭賦值setT

26、ile(GameConstants.RED_START, guttler.getHead().getX(), guttler.getHead().getY();/為蛇的身體賦值for(int i=0; i<guttler.getBody().size(); i+)Block b = guttler.getBody().get(i);setTile(GameConstants.YELLOW_START, b.getX(), b.getY();return map;/清空操作public void clearTile()for(int x=0; x<yCount; x+)for(int

27、 y=0; y<xCount; y+)setTile(0, x, y);/設(shè)置地圖顯示內(nèi)容public void setTile(int picIndex, int x, int y)mapxy = picIndex;/根據(jù)不同的選擇繪制不同的墻public void buildWall()switch(GameConstants.mapChoice)case 0:build2Wall(); /繪制"2"型墻break;case 1:buildIWall(); /繪制"I"型墻break;case 2:buildUWall(); /繪制"

28、U"型墻break;default:buildNormalWall(); /繪制普通墻break;/繪制2型的墻public void build2Wall()buildNormalWall();int i, j;for(j=xCount/4; j<xCount*3/4; j+)setTile(GameConstants.GREEN_START, yCount/6, j);for(i=yCount/6; i<yCount/2; i+)setTile(GameConstants.GREEN_START, i, xCount*3/4);for(j=xCount/4; j<

29、;xCount*3/4+1; j+)setTile(GameConstants.GREEN_START, yCount/2, j);for(i=yCount/2; i<yCount*5/6; i+)setTile(GameConstants.GREEN_START, i, xCount/4);for(j=xCount/4; j<xCount*3/4; j+)setTile(GameConstants.GREEN_START, yCount*5/6, j);/繪制I型的墻public void buildIWall()buildNormalWall();int i, j;for(j=

30、xCount*2/5; j<xCount*3/5+1; j+)setTile(GameConstants.GREEN_START, yCount/4, j);for(i=yCount/4; i<yCount*3/4; i+)setTile(GameConstants.GREEN_START, i, xCount/2);for(j=xCount*2/5; j<xCount*3/5+1; j+)setTile(GameConstants.GREEN_START, yCount*3/4, j);/繪制U型墻public void buildUWall()buildNormalWal

31、l();int i, j;for(i=yCount/4; i<yCount*3/4; i+)setTile(GameConstants.GREEN_START, i, xCount/4);for(j=xCount/4; j<xCount*3/4+1; j+)setTile(GameConstants.GREEN_START, yCount*3/4, j);for(i=yCount/4; i<yCount*3/4; i+)setTile(GameConstants.GREEN_START, i, xCount*3/4);/繪制普通墻public void buildNormal

32、Wall()/左右兩邊f(xié)or(int x=0; x<yCount; x+)setTile(GameConstants.GREEN_START, x, 0);setTile(GameConstants.GREEN_START, x, xCount-1);/上下兩邊f(xié)or(int y=0; y<xCount; y+)setTile(GameConstants.GREEN_START, 0, y);setTile(GameConstants.GREEN_START, yCount-1, y);3.3 Block為用來標(biāo)記每一個(gè)坐標(biāo)點(diǎn)上的小方塊,主要記錄方塊在二維數(shù)組中的坐標(biāo);packag

33、e oneRain.Guttler.model;public class Block /定義圖片塊得x,y軸坐標(biāo)private int x;private int y;public Block() super();/構(gòu)造方法public Block(int x, int y) this.x = x;this.y = y;/Setter,Getter方法public int getX()return x;public void setX(int x) this.x = x;public int getY()return y;public void setY(int y) this.y = y;

34、3.4 GameActivity為顯示游戲主Activity,沒找到更好的音效,就沒用增加音效package oneRain.Guttler.ui;import oneRain.Guttler.R;import oneRain.Guttler.constants.GameConstants;import oneRain.Guttler.view.GameView;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.cont

35、ent.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.LinearLayout;public class GameActivity extends

36、Activity private LinearLayout layout = null;private GameView gameView = null;MyHandler handler = new MyHandler();/音樂播放/private MediaPlayer mp = null;/是否暫停private boolean isPaused = false; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.la

37、yout.main); / initMusic(); initData(); initView(); ut.start(); / public void initMusic()/ / mp = MediaPlayer.create(this, R.raw.becauselove);/ / mp.start();/ public void initData() GameConstants.curOrientation = GameConstants.DOWN; GameConstants.map = null; GameConstants.operator = null; GameConstan

38、ts.UPDATE_RATE = 500; GameConstants.score = 0; GameConstants.eveScore = 10; GameConstants.mapChoice = getIntent().getIntExtra("map", 4); Overrideprotected void onResume() super.onResume();public void initView() layout = (LinearLayout)findViewById(R.id.layout); gameView = new GameView(this)

39、; gameView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); layout.addView(gameView); Overrideprotected void onPause() super.onPause();Overrideprotected void onStop() /GameConstants.mapChoice = 4;super.onStop();Overrideprotected void onDestroy() super.o

40、nDestroy();ut.setFlag(false);/mp.stop();private UpThread ut = new UpThread();/更新數(shù)據(jù)線程public class UpThread extends Threadprivate boolean flag = true;public void setFlag(boolean flag)this.flag = flag;Overridepublic void run() while(flag)try Thread.sleep(GameConstants.UPDATE_RATE);catch (InterruptedExc

41、eption e) e.printStackTrace();/判斷是否暫停if(!isPaused) /沒暫停的時(shí)候update();else /暫停的時(shí)候Message msg = new Message();msg.what = GameConstants.MSG_PAUSE;handler.sendMessage(msg);/更新數(shù)據(jù)public void update()GameConstants.map = GameConstants.operator.update(GameConstants.curOrientation);if(GameConstants.map = null)

42、/死了ut.setFlag(false);Message msg = new Message();msg.what = GameConstants.MSG_GAMEOVER;handler.sendMessage(msg);else /沒死Message msg = new Message();msg.what = GameConstants.MSG_UPDATE;handler.sendMessage(msg);/響應(yīng)更新信息,更新UIpublic class MyHandler extends HandlerOverridepublic void handleMessage(Message

43、 msg)switch(msg.what)case GameConstants.MSG_UPDATE:gameView.invalidate();break;case GameConstants.MSG_GAMEOVER:/游戲死亡/看看有沒有更新排行榜int first = GameConstants.sp.getInt("first", 0);int second = GameConstants.sp.getInt("second", 0);int third = GameConstants.sp.getInt("third",

44、0);String congratulation = ""if(GameConstants.score < third) /未上榜else if(GameConstants.score > first) /比第一還牛xSharedPreferences.Editor editor = GameConstants.sp.edit();int t = GameConstants.sp.getInt("second", 0);editor.putInt("third", t);int s = GameConstants.sp.g

45、etInt("first", 0);editor.putInt("second", s);editor.putInt("first", GameConstants.score);mit();congratulation = "您一不小心就破了第一的記錄."else if(GameConstants.score > second) /上了榜,但是沒第一多,比第二多SharedPreferences.Editor editor = GameConstants.sp.edit();int t = GameConst

46、ants.sp.getInt("second", 0);editor.putInt("third", t);editor.putInt("second", GameConstants.score);mit();congratulation = "您一不小心就破了第二的記錄."else if(GameConstants.score > third) /上了榜,但是沒第一多,沒第二多,比第三多SharedPreferences.Editor editor = GameConstants.sp.edit();edi

47、tor.putInt("third", GameConstants.score);mit();congratulation = "您一不小心就破了第三的記錄."/彈出對(duì)話框AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);builder.setTitle("Game Over");builder.setMessage("你的分?jǐn)?shù)是: " + GameConstants.score + "n"+ con

48、gratulation);builder.setPositiveButton("懂了", new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog, int which) /退出程序Intent i = getIntent();i.putExtra("result", 1);GameActivity.this.setResult(0, i);finish(););builder.setNegativeButton("再玩一次", ne

49、w DialogInterface.OnClickListener()public void onClick(DialogInterface dialog, int which) Intent i = getIntent();i.putExtra("result", 0);GameActivity.this.setResult(0, i);finish(););builder.create().show();/gameView.invalidate();break;case GameConstants.MSG_PAUSE:/調(diào)用GameView重繪gameView.invalidate();break;/* * 按鍵監(jiān)聽 */Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) switch(keyCode)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論