版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、指導(dǎo)教師王英強(qiáng)西安思源學(xué)院課程實(shí)訓(xùn)報(bào)課程名稱計(jì)算機(jī)系統(tǒng)綜合實(shí)訓(xùn)課題名稱基于Android 的貪吃蛇游戲開發(fā)計(jì)算機(jī)軟件技術(shù) 電信學(xué)院軟件技術(shù) 01班 132040800211李鵬軒2015年6月4 日目錄1、程序構(gòu)思 2、程序設(shè)計(jì)2.1游戲功能22總設(shè)計(jì)模塊的劃分2.3游戲主界面模塊2.4游戲控制模塊2.5類模塊設(shè)計(jì)3、程序?qū)崿F(xiàn)3.1、游戲界面的實(shí)現(xiàn)3.2、游戲整個框架的構(gòu)建3.3、實(shí)現(xiàn)鍵盤響應(yīng)事件.143.4、刷新,1.53.4、實(shí)現(xiàn)頁面的切換153.5、加載游戲163.6、游戲背景界面的改進(jìn).1.63.8、添加音效1.63.9、游戲本身的完善163、類模塊具體設(shè)計(jì)19TitleView.ja
2、va1.9Sn akeView.java194.程序結(jié)果225.總結(jié)與展望256.附錄261、程序構(gòu)思貪吃蛇游戲是一款非常經(jīng)典的手機(jī)游戲,貪吃蛇游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì), 將難以成功開發(fā)出這個游戲。在這個游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新, 并且在這個游戲的開發(fā)中, 還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,在設(shè)計(jì)開發(fā)過程中, 需要處理好各個類之間間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。正是因?yàn)槿绱?,本次設(shè)計(jì)的目的在于學(xué)習(xí)Java程序設(shè)計(jì)基本技術(shù),學(xué)習(xí)用an droid開發(fā)Java程序的相關(guān)技術(shù),熟悉游戲“貪吃蛇”的需求,熟悉項(xiàng)目開發(fā)的
3、完整過程。學(xué)會怎樣進(jìn)行一個項(xiàng)目的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)等軟件開發(fā)過程,熟練地掌握J(rèn)ava程序設(shè)計(jì)的基本技術(shù)和方法,熟練地掌握an droid 環(huán)境的使用方法,培養(yǎng)初步的項(xiàng)目分析能力和程序設(shè)計(jì)能力。2、程序設(shè)計(jì)2.1游戲功能本系統(tǒng)主要完成以下幾方面的功能:游戲控制功能一一包括游戲的開始、暫停、退出界面布局其他輔助功能(如游戲幫助,游戲積分,游戲過關(guān)等)2.2總設(shè)計(jì)模塊的劃分游戲總設(shè)計(jì)模塊劃分為游戲主要界面模塊、游戲控制模塊和游戲菜單模塊。2.3游戲主界面模塊游戲主界面模塊主要是指游戲的框圖,其包括一下內(nèi)容:1、游戲界面的邊界,即游戲中的墻;2、游戲中蛇的構(gòu)成,以及蘋果的構(gòu)成;3、游戲中障礙
4、物的構(gòu)成;4、游戲中分?jǐn)?shù)顯示以及關(guān)卡顯示。2.4游戲控制模塊(1 )游戲開始控制: 我們的程序是使用上鍵開始游戲,啟動游戲后會有一個初始菜單界面,我們點(diǎn)擊“開始游戲”, 彈出一句話“請按上鍵開始游戲”。游戲開始后蛇向下移動,然后由控制上下左右鍵來控制蛇的移動。在程序中我們重新建了一個activity來控制游戲的開始,使游戲的開始界面更美觀。(2 )游戲暫停控制: 我們是使用center鍵來控制游戲的暫停的,這是一項(xiàng)人性化的設(shè)計(jì),當(dāng)玩家在游戲過程中突遇緊急情況時可以按center鍵暫停游戲,等玩家空閑后按center鍵可以繼續(xù)游戲。(3 )游戲退出控制:當(dāng)玩家正在游戲中時,如想在游戲的退出上我們
5、的程序使用了多種方式來應(yīng)對不同的情況, 退出可以按“ 1”鍵,程序會自動跳轉(zhuǎn)到初始菜單界面,在初始菜單界面點(diǎn)擊“退出游戲”即可退出游戲。如果玩家在游戲中由于碰到墻或者咬到自己或者碰到障礙物而導(dǎo)致游戲結(jié)束 的,游戲或自動彈出一個界面,里面有提示是繼續(xù)游戲還是退出游戲,當(dāng)點(diǎn)擊“取消”時, 游戲就會自動跳轉(zhuǎn)到初始菜單,再點(diǎn)擊“退出游戲”即可。2.5類模塊設(shè)計(jì)src源碼目錄:.業(yè)e. aitcLroi AHelp, j waHenukctiri ty. j ava £ii 業(yè)色.j axFiSai4e Vi e牯-j ava.T11 a I ew. J avaQtn. t啟st.飯旺miaS
6、n ake.java為主界面類;Sn akeView為貪吃蛇類的視圖主要邏輯控制和繪制類;TitleView為界面的整體視圖;MenuActivity為菜單類,可以跳轉(zhuǎn)到Help類和Snake類;Help為游戲幫助類。3、程序?qū)崿F(xiàn)3.1、游戲界面的實(shí)現(xiàn)1、先聲明用來存放繪畫圖像的X,Y軸的位置的數(shù)組:privateint mTileGrid;2、編寫存放圖片索引用圖片的X,Y軸位置;p ublic void setTile( int tile in dex,int x, int y) mTileGridxy = tilei ndex; 3.把圖片素材加入到 bitmap中 p ublic vo
7、id loadTile(i nt key, Drawable tile)Bitma p bitma p =Bitma p.createBitma p(mTileSize, mTileSize, Bitma p.Co nfig.ARGB_8888);Can vas can vas = new Can vas(bitma p);tile.setBo un ds(0, 0, mTileSize, mTileSize);tile.draw(ca nvas);mTileArraykey = bitma p;4、調(diào)用以上的方法以循環(huán)的方式位置數(shù)組賦值以及圖片的索引,P rivate void up dat
8、eWalls() for (int x = 0; x < mXTileCou nt; x+) setTile(GREEN_STAR, x, 0);setTile(GREEN_STAR, x, mYTileCou nt - 1);for (int y = 1; y < mYTileCou nt - 1; y+) setTile(GREEN_STAR, 0, y);/ 設(shè)置左邊的界線的位置setTile(GREEN_STAR, mXTileCou nt - 1, y);/設(shè)置右邊的界線的位置5、重寫VIEW類里面的方法。把界線畫出。p ublic void on Draw(Ca nva
9、s can vas)sup er.o nDraw(ca nvas);for (int x = 0; x < mXTileCou nt; x += 1) for (i nt y = 0; y < mYTileCou nt; y += 1) if (mTileGrid x y > 0) can vas.drawBitma p( mTileArraymTileGridxy,mXOffset + x * mTileSize,mYOffset + y * mTileSize, mPain t);同上可見: 整個界面其實(shí)就是由圖片數(shù)組拼直面成的。到此,則可以實(shí)現(xiàn)游戲背景墻。3.2、游戲整
10、個框架的構(gòu)建1實(shí)現(xiàn)方案游戲的整個框架的構(gòu)建包括基本的蛇身,蘋果的實(shí)現(xiàn),有兩種方案:此方案的優(yōu)點(diǎn)是對數(shù)組的操作較方案一:使用常用的數(shù)組來存儲蛇身和蘋果的點(diǎn)集的信息。為熟悉,實(shí)現(xiàn)簡單,但是部分操作較為麻煩, 有可能出現(xiàn)數(shù)組越界, 或者浪費(fèi)太多存儲空間。方案二:使用動態(tài)數(shù)組 ArrayList來存儲蛇身和蘋果點(diǎn)集的信息。ArrayList可以用來定義為各種不同類型的數(shù)組,不僅僅局限于int整型;而且ArrayList為用戶編程提供了各種借口,比如插入,刪除元素,統(tǒng)計(jì)元素個數(shù)等,實(shí)現(xiàn)較為簡單,不會出現(xiàn)數(shù)組越界的問題。結(jié)合各種因素的考慮,我們在設(shè)計(jì)中采用第二種方案。定義Position方法,用于存儲蛇身
11、和蘋果的點(diǎn)集坐標(biāo)P rivate class Positi on /存儲每個點(diǎn)的坐標(biāo)p ublic int x;p ublic int y;p ublic Positi on (i nt xpo siti on, int ypo siti on) x = xpo siti on;y = ypo siti on;p ublic boolea n equals(i nt n ewx,i nt n ewy) if (x = n ewx && y = n ewy ) return true; return false;定義setMode方法,用于表示游戲所處的幾種狀態(tài):進(jìn)行,暫停,P
12、ublic void setMode(i nt n ewMode)int oldMode = mMode;mMode = n ewMode;if(n ewMode = RUNNING && oldMode != RUNNING)if(n ewMode = PAUSE)if(n ewMode = LOSE)if(n ewMode = READY)蘋果的實(shí)現(xiàn)聲明:P rivate ArrayList <Po siti on> mApp leTrail = new ArrayList <Po siti on>();用于存儲蘋果的坐標(biāo)位置根據(jù)游戲的需要,蘋果的位
13、置應(yīng)該是隨機(jī)產(chǎn)生的,使用java.util.Ra ndom類中提供的隨機(jī)數(shù)實(shí)現(xiàn)蘋果坐標(biāo)的隨機(jī)。int n ewa ppiex = 2+ra ndom. nextl nt(mYTileCo un t-2)-4);int n ewa ppiey = 2+ra ndom.n ext In t(mXTileCo un t-2)-4);n ewa ppie = new Positi on(n ewa pplex,n ewa ppi ey);檢測蘋果坐標(biāo)是否與蛇的坐標(biāo)以及墻的左邊沖突設(shè)置沖突標(biāo)志位:boolean flag = false;int sn akele ngth = mSn akeTrail.
14、size();for (int in dex = 0; in dex < sn akele ngth; in dex+)if (mS nakeTrail.get(i ndex).equals( newa pp le.x ,n ewa ppi e.y) flag = true; mApp leTrail墻的沖突檢測方法與上同;當(dāng)產(chǎn)生的新坐標(biāo)沒有問題時,則把新坐標(biāo)加入到中。蛇的實(shí)現(xiàn)聲明: p rivate ArrayList <Po siti on> mApp leTrail = new ArrayList <Po siti on>();用于存儲蘋果的坐標(biāo)位置蛇的初始
15、化蛇身的初始化在ininNewGame中實(shí)現(xiàn),直接把最初要呈現(xiàn)給玩家的蛇的情況定義出來,即添加一定數(shù)量的坐標(biāo)點(diǎn)進(jìn)入mSn akeTrail中,使得在最初開始游戲時,有蛇可以進(jìn)行自由移動。蛇的移動游戲中是通過觸發(fā)來改變坐標(biāo)(+1,-1 )的方式來改蛇頭的方向,包括后面的蛇的碰撞檢測都要用到蛇頭。獲取蛇的頭部:Position head = mS nakeTrail.get(O);蛇的新頭部: Position n ewHead = new P ositio n(2,2);通過設(shè)置整型變量mDirection 以及mNextDirection來判斷蛇下一步移動方向,然后改變蛇頭的坐標(biāo),使蛇移動sw
16、itch (mDirectio n) case EAST:n ewHead = new Positi on( head.x,head.y-1);break;蛇的碰撞檢測蛇在移動時,若碰撞到墻壁或者自己身體,則游戲結(jié)束。蛇的碰壁檢測:if(head.x < 1) | (head.y < 1) | (head.x > mYTileCou nt-2)II (head.y > mXTileCou nt-2)setMode(LOSE);return;蛇的自身碰撞的檢測:int walle ngth = mWallTrail.size();for ( int walli ndex
17、= 0 ; walli ndex < walle ngth; walli ndex+)Positi on c = mWallTrail.get(walli ndex);if (c.equals (n ewHead.x ,n ewHead.y)setMode(LOSE);return;蛇吃蘋果的實(shí)現(xiàn)蛇所經(jīng)過的個坐標(biāo),他們都要在蘋果所在的ArrayList <Po siti on> mApp leList =new ArrayList<Position>()坐標(biāo)集里面集依次判斷,若是坐標(biāo)相同,那個這個蘋果就被蛇吃了O找蘋果的方法:int appi eco unt =
18、mAppI eTrail.size();int applein dex;for ( applein dex = 0; applein dex < app leco unt; applein dex+)Positi on c = mApp leTrail.get(a ppiein dex);if (c.equals (n ewHead.x ,n ewHead.y) 3.3、實(shí)現(xiàn)鍵盤響應(yīng)事件鍵盤響應(yīng)鍵盤主要起操作作用,可以控制蛇的行走方向:P ublic boolea n on KeyDow n(i nt keyCode,KeyEve nt eve nt)/if (keyCode = Key
19、Eve nt.KEYCODE_D PAD_DOWN) if (mDirectio n != SOUTH)mNextDirection = NORTH;return (true);3.4、刷新只要繼承Handier類就可以對消息進(jìn)行控制,或者處理class RefreshHa ndler exte nds Han dIer /響應(yīng)消息p ublic void han dleMessage(Message msg) Sn akeView.this.u pdate();/重要頁面Sn akeView.this.i nvalidate();刷新頁面/向外提供人工的調(diào)用消息的接口,P ublic voi
20、d slee p(lo ng delayMillis) this.removeMessages(O);/注消消息/添加消息,sen dMessageDelayed(obta inM essage(0), delayMillis);3.4、實(shí)現(xiàn)頁面的切換程序中從主菜單界面到游戲界面的切換以及從主菜單界面到游戲幫助界面都采用的是活動的切換方法;使用 startActivity(new Intent(MenuActivity.this,Snake.class);實(shí)現(xiàn)不同活動之間的切換,即從一個頁面跳轉(zhuǎn)到另一個上。換的目的,但是這種方式較為復(fù)雜。3.5、加載游戲通過ininN ewGame 方法來初始
21、化新游戲,通過Up date方法更新游戲設(shè)置。3.6、游戲背景界面的改進(jìn)為貪吃蛇游戲設(shè)計(jì)了背景,使其更具有觀賞新,使玩家賞心悅目。3.8、添加音效為游戲添加了音效,使游戲在聽覺上給人以耳目一新的感覺;具體實(shí)現(xiàn)方法: 通過調(diào)用android.media.MediaPlayer 類函數(shù),聲明對象:Media Playermp=Media PI ayer.create(this.getC on text(),R.raw.backgro un d);通過 mp.start();mp.p ause();mp .sto p();來控制游戲不同狀態(tài)時的音樂狀態(tài)。3.9、游戲本身的完善10、為游戲設(shè)置關(guān)卡根據(jù)
22、玩家的得分為游戲設(shè)置了關(guān)卡,難度逐漸加強(qiáng),蛇的移動速度逐漸加快。每一關(guān)卡中的障礙物是固定不變的,為簡單起見,只設(shè)置了五個關(guān)卡通過Obstacle 函數(shù)來設(shè)置關(guān)卡的障礙物,其中函數(shù)中以當(dāng)前處于的關(guān)卡數(shù)作為判斷依據(jù)。p ublic void Obstacle。switch(stage) case 5: case 4: case 3: case 2:游戲中設(shè)置的有三種不同的蘋果:普通,加分,和毒蘋果吃掉普通的蘋果加一分;吃掉加分的蘋果加兩分;吃掉毒蘋果減三分并加速每一種蘋果的實(shí)現(xiàn)方法都一樣,使用ArrayList動態(tài)數(shù)組每種蘋果都采用隨機(jī)的方法實(shí)現(xiàn),實(shí)現(xiàn)方式基本與蛇找到蘋果相同,只是在細(xì)節(jié)上略有區(qū)別
23、P rivate void PoisonappI e();p rivate void Lovea ppi e();設(shè)置退出快捷鍵在游戲進(jìn)行中,設(shè)置了退出快捷鍵,可以直接退出游戲,更加方便玩家操作。具體實(shí)現(xiàn)還是依靠鍵盤響應(yīng)函數(shù):游戲中是數(shù)字“1 ”鍵作為退出快捷鍵P ublic boolea n on KeyDow n(i nt keyCode,KeyEve nt event) if(keyCode = KeyEve nt.KEYCODE_1) mUp dateFlag = false;mp .sto p();In te ntintent = new In te nt(this.getC on
24、text(),Me nu Activity.class);this.getC on text().startActivity(i ntent);設(shè)置加速根據(jù)實(shí)際操作需要,當(dāng)操控蛇的移動時, 若按下方向鍵不放,則蛇在該方向上的運(yùn)行速度就會加快;若松開方向鍵則恢復(fù)原速度。通過設(shè)置整型變量 mSpeed和mNSpeed ,其中mNSpeed用來保存蛇在該關(guān)卡的移動速度。通過鍵盤響應(yīng)函數(shù) P ublic boolean on KeyDow n(i nt keyCode,KeyEve nt event)P ublic boolea n on Key Up (i nt keyCode, KeyEve nt
25、 event)一起來實(shí)現(xiàn)加速功能。提示對話框在游戲結(jié)束后彈出對話框詢問玩家的下一步動作,按確定按鈕繼續(xù)開始新的游戲,按取消退出游戲。這項(xiàng)功能需要 android.content.DialogInteface類的支持,聲明對象:private AlertDialog.Builder showRightorNot彈出對話框的界面:showRightorNot = new AlertDialog.Builder(this.getC on text();showRightorNot.setIc on (R.drawable.ic on);showRightorNot.setTitle(” 貪吃蛇&qu
26、ot;);showRightorNot.set PositiveButto n(”確定", this);showRightorNot.setNegativeButto n(”取消", this);showRightorNot.setMessage(”按確定繼續(xù),按取消退出游戲”).show();3、類模塊具體設(shè)計(jì)TitleView.javaTitleView.java中的成員變量表變量類型意義賦值mTileArray p rivateBitma p聲明四種類型的小塊,黃綠紅黑mTileSizeprotectedstatic finalint小塊邊長12mXTileCou n
27、tp rotected static intx方向小塊個數(shù)mYTileCount ;p rotected static inty方向小塊個數(shù)mTileGridprivate int 每個小塊的數(shù)值mXOffsetp rotectedint橫向偏移量mYOffset ;p rotectedint縱向偏移量pai ntp rivate Paintnew Paint();TitleView.java 成員方法Sn akeView.javaSnakeView.java中的成員變量表變量類型作用賦值TAGp ublic static finalStri ng"Sn akeview"s
28、howRightorNotPrivateAlertDialog.Builder游戲繼續(xù)提示mDirectio np rivate int控制蛇的移動方向SOUTHmNextDirecti onp rivate int控制蛇的下一個移動方向SOUTHNORTHp rivate static final int控制蛇向上移動1SOUTHp rivate static final int控制蛇向下移動2EASTp rivate static final int控制蛇向右移動3WESTp rivate static final int控制蛇向左移動4READYp ublic static final
29、int1RUNNINGp ublic static final int控制游戲開始2P AUSEp ublic static final int控制游戲暫停3LOSEp ublic static final int控制游戲結(jié)束4textView1;p rivate TextViewtextView2;p rivate TextViewtextView3;p rivate TextViewmCenterP ress edp rivate boolea nfalsemUp dateFlagp rivate boolea nfalsemModep ublic intREADYstagep rivat
30、e int記錄通關(guān)等級1mScorep rivate int計(jì)分0mSp eedp rivate int刷新界面時間變量600mNS peedp rivate int刷新界面時間變量mSp eedreprivateRefreshHa ndler刷新界面處理變量newRefreshHa ndler();ran domp rivate static finalRandomnew Ran dom();mRecordprivate int =new int 10SnakeView.java 成員方法Menu Activity.JavaMen uActivity.Java成員變量TAGpublic st
31、atic final String TAGshowRightorNotp rivate AlertDialog.BuildershowRightorNotHelp .JavaHelp.Java成員變量on Createprotected void on Create4.程序結(jié)果保存原程序,啟動模擬機(jī),選擇java application ,運(yùn)行結(jié)果如下:11:25123 =4S6789 0QWERTYLI0PSDF ''GHJKLncL 1 <nZXCVBNMSTM/rJ 1 .r零 bbbtzitl匸歸區(qū). -SnakeII嚴(yán)L些甲甬j專IL - SnakeI魯 bhb
32、lKtl"區(qū)気-二f、嚴(yán)7、EL匚L- , * H iK- 占:勺耳”匚'心.沁輕=” n一、r V.Jk T J »>F f -品rCE©4SWi3v'wiwBWHgiaBBSHBBS 曲匿質(zhì)國型確H益圜 BBaBBBHHSeoe®©©昆畫函破畫蘆H鬲啦SiHHin I1 j聖 IB BBS jiB 曲 IB IB '贏同';gl I L廠rQ bbbtittlnBBBSHBHiBB99B9SHSBS'Snake«ra«0 n“*飛2F99999 嘗Q O ®
33、; &®®®£r»© ® ® ®o®_ '* 寥一i-iiMh/P" «SM*硬陵應(yīng)H陵m應(yīng)冠g MMBMiBmaBaiEl BBaSisSSii貪吃蛇習(xí) RQe 11:27T.12J =4二'、一697s'1i790 1V1ER'rY11 .01 1:p1LbF'H"jK.'a舎ZX1CBNM|-1,/r5.總結(jié)與展望貪吃蛇是一個簡單的游戲,卻讓我吃了很多的苦頭, 從搭建開發(fā)環(huán)境到對程序進(jìn)行調(diào)試, 現(xiàn)了各種各
34、樣的問題,像 JDK版本現(xiàn)錯了啊,環(huán)境變量的設(shè)置出錯啊,調(diào)試的時候那個文件不能夠讀取我用了 3天才發(fā)現(xiàn)只是大小寫的問題等等,這些讓我深刻地(絕對深刻)這一次的實(shí)驗(yàn)很多代碼認(rèn)識到細(xì)節(jié)對一個想要成為一個優(yōu)秀程序員是多么不可或缺的品質(zhì)。是從網(wǎng)上找來的,我自己只是起到了一個整合處理的作用,還有一小部分自己還不是完全搞懂,我還將花一部分時間來弄明白他們,爭取自己能夠獨(dú)立的編寫出一個完整的完美的程序 來。6.附錄p ackage com.S nake.a ndroid;import java.util.ArrayList;import java.util.Ra ndom;import an droid.a
35、 pp. AlertDialog;import an droid.c onten t.C on text;import an droid.c onten t.Dialog In terface;import an droid.c onten t.I ntent;import an droid.c onten t.res.Resources;import an droid.media.Media Player;import an droid.os.Ha ndler;import an droid.os.Message;import an droid.util.AttributeSet;impor
36、t an droid.view.KeyEve nt;import an droid.view.View;import an droid.widget.TextView;/* author Adm inistrator*/p ublicclassSn akeViewexte ndsTileViewimp leme ntsan droid.c onten t.Dialog In terface. On ClickListe nerpublic static final String TAG = "Sn akeview"p rivate AlertDialog.Builder s
37、howRightorNot ;p rivate int mDirectio n = SOUTH;private int mNextDirection = SOUTH;/設(shè)置方向private static final int NORTH = 1;private static final int SOUTH = 2;private static final int EAST = 3;private static final int WEST = 4;public static final int READY = 1;public static final int RUNNING = 2;publ
38、ic static final int P AUSE = 3;public static final int LOSE = 4;p rivate TextView textView1;p rivate TextView textView2;p rivate TextView textView3;是否更新的標(biāo)志量p rivate boolea n mCe nterPressed = false;p rivate boolea n mUp dateFlag =false;/ public int mMode = READY;p rivate int mScore = 0;p rivate int
39、mSp eed = 600;p rivate int stage = 1;p rivate int mNSp eed = mSp eed;/刷新界面處理器 p rivate RefreshHa ndler re = new RefreshHa ndler();/為創(chuàng)建蘋果坐標(biāo)使用隨機(jī)對象P rivate static final Ran dom ran dom = new Ran dom();/用于存儲貪吃蛇中,蘋果和蛇的點(diǎn)陣的坐標(biāo)的信息的集合P rivate ArrayList <P ositi on> mSn akeTrail = new ArrayList <Po si
40、ti on> ();p rivate ArrayList <P ositi on> mApp leTrail = new ArrayList <P ositi on> ();p rivate ArrayList <P ositi on> mWallTrail = new ArrayList <Po siti on> ();p rivate ArrayList <P ositi on> mPoisonApple = new ArrayList <Po siti on> ();p rivate ArrayList <
41、;P ositi on> mLoveA ppie = new ArrayList <P ositi on> ();Media PI ayer mp=Media PI ayer.create(this.getC on text(),R.raw.backgro un d);/相當(dāng)于數(shù)組大小可變 /* p aram con text* p aram attrsII每600ms刷新一次*/class RefreshHa ndler exte nds Han dier I*響應(yīng)消息*IOverride p ublic void han dIeMessage(Message msg) u
42、p date();invaIidate();II消失重新調(diào)用 on draw*向外提供人工的調(diào)用消息的接口 * p aram delayMillisI*IP ublic void slee p(lo ng delayMillis) /隔600ms重新調(diào)用這個函數(shù)this.removeMessages(O);sen dMessageDelayed(obta inM essage(0),delayMillis);public Sn akeView(C on text c on text, AttributeSet attrs) super(con text, attrs);setFocusable
43、(true);初始化界面ininSn akeView();p ublic void ininSn akeView()/Resourcesr = this.getC on text().getResources();resetTiles(6);loadTile(1, r.getDrawable(R.drawable.redstar);loadTile(2, r.getDrawable(R.drawable.yellowstar);loadTile(3, r.getDrawable(R.drawable.gree nstar);loadTile(4,r.getDrawable(R.drawable
44、. purplewstar);loadTile(5,r.getDrawable(R.drawable.favourite);p rivate class Positi on /存儲每個點(diǎn)的坐標(biāo)p ublic int x;p ublic int y;p ublic Positi on (i nt xpo siti on, int ypo siti on) x = xpo siti on;y = ypo siti on;p ublic boolea n equals(i nt n ewx,i nt n ewy) if (x = n ewx && y = n ewy )return
45、true;return false;p ublic void ininN ewGame()mSn akeTrail.clear();mAppI eTrail.clear();mScore=0;stage=1;mSp eed=600;/初始化蛇的位置mSn akeTrail.add(0, new P ositio n(20,20);mSn akeTrail.add(1, new P ositio n(19,20);mSn akeTrail.add(2, new P ositio n(18,20);/初始化蘋果的位置Appl e();PoisonappI e();Lovea ppi e();mDi
46、rectio n = NORTH;mNextDirection = NORTH;鍵盤響應(yīng)p ublic boolea n on KeyDow n(i nt keyCode,KeyEve nt even t)/mSp eed = 200;if(keyCode = KeyEve nt.KEYCODE_D PAD_UP)if(mMode = READY | mMode = LOSE)ininN ewGame();setMode(RUNNING);up date();mp .start();return (true);if(mMode = PAUSE)setMode(RUNNING);mp .star
47、tO;return (true);mNextDirection = SOUTH;if(mDirection != NORTH)if (keyCode = KeyEve nt.KEYCODE_D PAD_DOWN) return (true);if (mDirection != SOUTH) mNextDirection = NORTH;return (true);if (keyCode = KeyEve nt.KEYCODE_D PAD_LEFT) if (mDirection != WEST) mNextDirection = EAST;return (true);if (keyCode =
48、 KeyEve nt.KEYCODE_D PAD_RIGHT) if (mDirection != EAST) return (true);mNextDirection = WEST;if(keyCode = KeyEve nt.KEYCODE_D PAD_CENTER)if(mCe nterP ressed = false)setMode( PAUSE);mp.p ause();elsesetMode(RUNNING);mp .startO;mCe nterP ressed = !mCe nterP ressed;if(keyCode = KeyEve nt.KEYCODE_1)mUp da
49、teFlag = false;mp .sto p();Intent intent = new Inten t(this.getC on text(),Me nu Activity.class);this.getC on text().startActivity(i nte nt);retur n sup er.o nKeyDow n( keyCode, even t);©Overridep ublic boolea n onKeyUp (i nt keyCode, KeyEve nt eve nt)mSp eed = mNSp eed;if(keyCode = KeyEve nt.K
50、EYCODE_D PAD_UP)if(mDirection != NORTH)mNextDirection = SOUTH;return (true);if (keyCode = KeyEve nt.KEYCODE_D PAD_DOWN) mNextDirection = NORTH;return (true);if (mDirection != SOUTH) if (keyCode = KeyEve nt.KEYCODE_D PAD_LEFT) if (mDirection != WEST) mNextDirection = EAST;return (true);if (keyCode =
51、KeyEve nt.KEYCODE_D PAD_RIGHT) if (mDirection != EAST) mNextDirection = WEST;return (true);/ TODO Auto-ge nerated method stubretur n sup er.o nKey Up( keyCode, even t);p ublic void setMode(i nt n ewMode)int oldMode = mMode;mMode = n ewMode;Stri ng str =""if(n ewMode = RUNNING && ol
52、dMode != RUNNING)in validate。;mUp dateFlag =true;textView1.setVisibility(View.lNVISIBLE);up date();return;if(n ewMode = PAUSE)str ="按暫停鍵繼續(xù)開始"mUp dateFlag = false;if(n ewMode = LOSE)str ="游戲結(jié)束,按上鍵重新開始H.mUp dateFlag = false;showRightorNot = new AlertDialog.Builder(this.getCo ntext();showRightorNot
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024門禁工程合同
- 2024閘門采購合同模板大全
- 2024榨菜種植與農(nóng)業(yè)電商人才培訓(xùn)合作合同3篇
- 2025年度文化旅游代理股權(quán)轉(zhuǎn)讓及項(xiàng)目運(yùn)營合同4篇
- 2025年度智能社區(qū)視頻監(jiān)控系統(tǒng)工程承包協(xié)議4篇
- 2025年度應(yīng)急物流承運(yùn)商合作協(xié)議范本4篇
- 2024音樂制作合同:錄音工作室合同范本版B版
- 2025年度桉樹苗木線上線下融合發(fā)展合同3篇
- 2025年度知識產(chǎn)權(quán)運(yùn)營丨合伙人共同運(yùn)營專利技術(shù)的合同4篇
- 2024舞臺建設(shè)施工合同協(xié)議書
- 2024版智慧電力解決方案(智能電網(wǎng)解決方案)
- 公司SWOT分析表模板
- 小學(xué)預(yù)防流行性感冒應(yīng)急預(yù)案
- 肺癌術(shù)后出血的觀察及護(hù)理
- 聲紋識別簡介
- 生物醫(yī)藥大數(shù)據(jù)分析平臺建設(shè)-第1篇
- 基于Android的天氣預(yù)報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 沖鋒舟駕駛培訓(xùn)課件
- 美術(shù)家協(xié)會會員申請表
- 聚合收款服務(wù)流程
- 中石化浙江石油分公司中石化溫州靈昆油庫及配套工程項(xiàng)目環(huán)境影響報(bào)告書
評論
0/150
提交評論