手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告_第1頁(yè)
手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告_第2頁(yè)
手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告_第3頁(yè)
手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告_第4頁(yè)
手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、J2ME手機(jī)游戲開(kāi)發(fā)技術(shù)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱(chēng):益智類(lèi)游戲炸彈人1 實(shí)驗(yàn)?zāi)康?利用J2ME有關(guān)知識(shí),設(shè)計(jì)一款益智類(lèi)(PUZ)炸彈人(Bombman)游戲程序,是我們能夠掌握J(rèn)avaME游戲開(kāi)發(fā)的基本技巧。2 實(shí)驗(yàn)環(huán)境 Windows 7操作系統(tǒng),Eclipse,WTK2.5.1,JDK1.63 實(shí)驗(yàn)內(nèi)容 利用自己所學(xué)的J2ME知識(shí),進(jìn)行游戲開(kāi)發(fā),該游戲的創(chuàng)意是游戲主角在一個(gè)隨機(jī)生存的地圖中放置炸彈,以消滅地圖中所有的敵人為目的。游戲地圖被設(shè)計(jì)成一個(gè)多行多列的棋盤(pán),游戲中的主角和敵人每次都只能按照棋盤(pán)中相鄰的棋盤(pán)格進(jìn)行移動(dòng),而且在地圖中還存在不同的障礙物,用來(lái)阻擋游戲主角和敵人的移動(dòng)。游戲主角可以在沒(méi)

2、有障礙物的地方防止炸彈來(lái)引爆敵人或障礙物來(lái)獲得去路。從中有以下是幾個(gè)元素的詳細(xì)功能:(1) 空白區(qū):是游戲主角和敵人可以移動(dòng)的位置及放置炸彈的位置。(2) 巖石:地圖中的障礙物,用來(lái)阻止游戲主角和敵人的且不能被炸彈摧毀。(3) 磚墻:也是用來(lái)阻止的,不過(guò)能被炸彈摧毀變成空白區(qū)。(4) 敵人:是消滅游戲主角的一方,它需要游戲主角用炸彈將其炸死,其所處 的地方也會(huì)變?yōu)榭瞻讌^(qū),敵人在空白區(qū)來(lái)去自如,一旦碰到游戲主 角,游戲主角會(huì)被殺死。(5) 游戲主角:游戲中由玩家控制的一方,在空白區(qū)移動(dòng),可以放置炸彈。4 實(shí)驗(yàn)步驟(代碼分析) 該游戲是一個(gè)11*11的棋盤(pán),用一個(gè)char型的二維數(shù)組來(lái)表示該棋盤(pán),

3、二維數(shù)組中的每一個(gè)數(shù)組元素就代表了游戲棋盤(pán)中的一個(gè)棋盤(pán)格。該游戲采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,主要的功能都封裝到不同的類(lèi)中,定義了以下幾個(gè)類(lèi):1.Board類(lèi):該類(lèi)作為程序的模型定義類(lèi),在其中定義了游戲中所使用的數(shù) 據(jù)結(jié)構(gòu)以及對(duì)這些數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行設(shè)置和獲取的方法。2.BoardView類(lèi):該類(lèi)作為程序的視圖定義類(lèi),也是游戲的畫(huà)布屏幕類(lèi),在 該類(lèi)中定義了如何根據(jù)用戶(hù)的游戲動(dòng)作繪制對(duì)應(yīng)的游戲運(yùn) 行畫(huà)面的方法。3. Bomb類(lèi):該類(lèi)表示游戲中的炸彈,定義了如何顯示炸彈的爆炸效果以及炸 彈爆炸后對(duì)其他相關(guān)元素的影響的方法。4.Enemy類(lèi):該類(lèi)表示游戲中的敵人,具體定義了敵人如何移動(dòng)以及判斷敵 人

4、是否死亡的方法。5.Player類(lèi):該類(lèi)表示游戲中的主角,定義了游戲主角如何移動(dòng)、如何防止 炸彈以及判斷游戲是否死亡的方法。6.Img類(lèi):該類(lèi)定義了游戲中各種圖像的構(gòu)造方法。7.jBombMan類(lèi):該類(lèi)是程序的MIDlet類(lèi)。(1)jBombMan.java private Display oDisplay; /屏幕對(duì)象private BoardView oBoardView; /棋盤(pán)視圖對(duì)象private Board oBoard; /棋盤(pán)對(duì)象private Player oPlayer; /主角對(duì)象private Enemy oEnemy; /敵人對(duì)象(2) Board.java/定義棋盤(pán)

5、的二維數(shù)組public char chBoard;/*N - None 表示什么也沒(méi)有W - Wall 表示磚墻L - Pillar 表示巖石P - Player 表示游戲主角E - Enemy 表示敵人B - Bomb 表示炸彈U - Bomb under player 表示主角正在放置炸彈X - Exploding 表示炸彈爆炸*/ /聲明一個(gè)隨機(jī)數(shù)對(duì)象privateRandom random; /聲明棋盤(pán)的行和列數(shù)public int iCols, iRows; /聲明判斷游戲是否結(jié)束的標(biāo)識(shí)public volatile boolean isGameOver; /聲明判斷是否玩家勝利的標(biāo)

6、識(shí)public volatile boolean isWin; /構(gòu)造函數(shù),初始化棋盤(pán)的行數(shù)和列數(shù),并構(gòu)造隨機(jī)數(shù)對(duì)象public Board( int cols, int rows ) /定義棋盤(pán)的初始化方法public void init() /判斷某個(gè)棋盤(pán)格中是否是給定的元素public boolean isElement( char ch, int x, int y ) /獲取指定的某個(gè)棋盤(pán)格中的元素public char getElement( int x, int y ) /設(shè)置指定的某個(gè)棋盤(pán)格中的元素public void setElement( char ch, int x, i

7、nt y ) /判斷給定的位置是否在敵人的攻擊范圍內(nèi)public boolean near( char ch, int x, int y ) /判斷給定的位置是否可以向某個(gè)方向移動(dòng)2步public boolean near2( char ch, int x, int y ) (3)BoardView.javaprivate Board oBoard;private Player oPlayer;private Enemy oEnemy;/定義背景色private final int BackgroundColor = 0xffffff;/定義每個(gè)棋盤(pán)格的大小private final int

8、iCellSize = 20;/聲明內(nèi)部邊框距離坐標(biāo)原點(diǎn)的橫坐標(biāo)距離private final int iLeft = 10;/聲明內(nèi)部邊框距離坐標(biāo)原點(diǎn)的縱坐標(biāo)距離private final int iTop = 10; public BoardView( Board board )public void setPlayer( Player player )public void setEnemy( Enemy enemy )/繪制游戲屏幕public void paint( Graphics g )/定義繪制游戲結(jié)束的方法private void paintGameOver( Graphic

9、s g )/定義繪制游戲玩家獲勝的方法private void paintWin( Graphics g )/繪制游戲棋盤(pán)邊框的方法private void paintFrame( Graphics g )/定義繪制棋盤(pán)的方法private void paintBoard( Graphics g )/定義響應(yīng)按鍵按下的事件處理方法public void keyPressed( int code )/定義游戲結(jié)束或者玩家勝利時(shí)的事件處理方法private void keyForInit( int action )/定義游戲過(guò)程中的事件處理方法private void keyForPlay( in

10、t action )/定義重新繪制棋盤(pán)格的方法public void repaintCells( int x, int y, int w, int h ) (4)Player.javaprivate Board oBoard;private BoardView oBoardView;private Enemy oEnemy;private Bomb oBomb;private Random random;private int iX, iY;/游戲主角的構(gòu)造函數(shù)public Player( Board board, BoardView boardview )/游戲主角的初始化方法public

11、void init()public void setEnemy( Enemy enemy )/清除炸彈對(duì)象的方法public void clearBomb()/判斷游戲主角能否移動(dòng)到給定的棋盤(pán)格上private boolean canGo( int x, int y )/定義放置炸彈的方法public void fire()/定義游戲主角向左移動(dòng)的方法public void left()/定義游戲主角向右移動(dòng)的方法public void right()/定義游戲主角向上移動(dòng)的方法public void up()/定義游戲主角向下移動(dòng)的方法public void down()/定義游戲主角死掉的

12、方法public void die() (5)Enemy.java private Board oBoard;private BoardView oBoardView;public Player oPlayer; /設(shè)置敵人每次移動(dòng)的間隔時(shí)間private final int iMoveTime = 500;private Random random; /聲明游戲中敵人的數(shù)量private int iNumbers; /聲明所有敵人所在位置的二維數(shù)組private int arrPositions;private volatile boolean stopThread = false;/初始化

13、敵人對(duì)象的構(gòu)造函數(shù)public Enemy( Board board, BoardView boardview, Player player, int numbers ) /敵人對(duì)象的初始化方法public void init()public void stopThread()/定義線(xiàn)程的方法體,在該方法中將定義敵人如何進(jìn)行移動(dòng)public void run()/定義敵人的移動(dòng)方法private void move( int i )/判斷能否移動(dòng)到指定棋盤(pán)格位置上的方法private boolean canGo( int x, int y )/定義給定位置上的敵人死亡的方法public voi

14、d die( int x, int y )/定義游戲中的所有敵人對(duì)象全部死亡的方法public void dieAll() (6) Bomb.java private Board oBoard;private BoardView oBoardView;private Player oPlayer;private Enemy oEnemy;/定義炸彈爆炸前等待的時(shí)間private final int iExplodingTime = 4000; /定義爆炸效果顯示的時(shí)間private final int iDisapearTime = 1000;private int iX, iY;privat

15、e volatile boolean stopThread = false;/炸彈類(lèi)的構(gòu)造方法public Bomb( Board board, BoardView boardview, Player player, Enemy enemy, int x, int y )public void stopThread()/根據(jù)給定的單元格判斷炸彈爆炸后的結(jié)果的方法private void explode( int x, int y )/清空給定的單元格中的元素private void clear( int x, int y )/定義線(xiàn)程的方法體,在該方法中將定義炸彈爆炸的效果public voi

16、d run() (7) img.java /創(chuàng)建游戲中炸彈圖像的方法,其余圖像方法一樣public static Image imgBomb = Image.createImage(new byte ., (int)0, (int)163 );5 實(shí)驗(yàn)結(jié)果與分析(包括代碼和實(shí)驗(yàn)總結(jié))程序代碼:1. 游戲的模型類(lèi)實(shí)現(xiàn)(1) Board.javapackage com.mot.j2me.midlets.jbombman;import java.util.*;/定義游戲的模型的類(lèi),可以將其看做一個(gè)棋盤(pán)public class Board /定義棋盤(pán)的二維數(shù)組public char chBoard;/

17、*N - None 表示什么也沒(méi)有W - Wall 表示磚墻L - Pillar 表示巖石P - Player 表示游戲主角E - Enemy 表示敵人B - Bomb 表示炸彈U - Bomb under player 表示主角正在放置炸彈X - Exploding 表示炸彈爆炸*/ /聲明一個(gè)隨機(jī)數(shù)對(duì)象privateRandom random; /聲明棋盤(pán)的行和列數(shù)public int iCols, iRows; /聲明判斷游戲是否結(jié)束的標(biāo)識(shí)public volatile boolean isGameOver; /聲明判斷是否玩家勝利的標(biāo)識(shí)public volatile boolean i

18、sWin;/構(gòu)造函數(shù),初始化棋盤(pán)的行數(shù)和列數(shù),并構(gòu)造隨機(jī)數(shù)對(duì)象public Board( int cols, int rows ) /構(gòu)造隨機(jī)數(shù)對(duì)象 random = new Random();iCols = cols;iRows = rows; /構(gòu)造表示棋盤(pán)的二維數(shù)組chBoard = new chariColsiRows; /調(diào)用棋盤(pán)的初始化方法init(); /定義棋盤(pán)的初始化方法public void init() /表示游戲結(jié)束的標(biāo)識(shí)設(shè)置為falseisGameOver = false; /表示玩家獲勝的標(biāo)識(shí)設(shè)置為falseisWin = false; /遍歷二維數(shù)組,為數(shù)組的每個(gè)

19、元素設(shè)置值為N,表示游戲中每個(gè)棋盤(pán)格上都為空f(shuō)or( int i=0; iiCols; i+ )for( int j=0; jiRows; j+ )chBoardij = N;/ 遍歷二維數(shù)組,每相隔一個(gè)元素設(shè)置值為L(zhǎng),表示游戲中每相隔的棋盤(pán)格上放置一個(gè)巖石for( int i=1; iiCols; i+=2 )for( int j=1; jiRows; j+=2 )chBoardij = L;/ 遍歷二維數(shù)組,在棋盤(pán)上非巖石的位置隨機(jī)放置磚墻for( int i=0; iiCols; i+ )for( int j=0; jiRows; j+ ) /判斷當(dāng)前遍歷到的棋盤(pán)格是否為空if( chB

20、oardij = N ) /如果當(dāng)前棋盤(pán)格位置為空,則根據(jù)隨機(jī)數(shù)的判斷條件是否成立來(lái)判斷是否放置磚墻if( Math.abs( random.nextInt() ) % 2 = 0 )chBoardij = W;/判斷某個(gè)棋盤(pán)格中是否是給定的元素public boolean isElement( char ch, int x, int y ) if( x = iCols )return false;if( y = iRows )return false;return( chBoardxy = ch );/獲取指定的某個(gè)棋盤(pán)格中的元素public char getElement( int x,

21、int y ) if( x = iCols )return ?;if( y = iRows )return ?;return chBoardxy;/設(shè)置指定的某個(gè)棋盤(pán)格中的元素public void setElement( char ch, int x, int y ) if( ch = ? )return;if( x = iCols )return;if( y = iRows )return;chBoardxy = ch; /判斷給定的位置是否在敵人的攻擊范圍內(nèi)public boolean near( char ch, int x, int y ) return isElement( ch,

22、 x-1, y )|isElement( ch, x, y-1 )|isElement( ch, x+1, y )|isElement( ch, x, y+1 );/判斷給定的位置是否可以向某個(gè)方向移動(dòng)2步public boolean near2( char ch, int x, int y ) return ( isElement( ch, x-1, y )&isElement( ch, x-2, y ) )|( isElement( ch, x, y-1 )&isElement( ch, x, y-2 ) )|( isElement( ch, x+1, y )&isElement( ch,

23、 x+2, y ) )|( isElement( ch, x, y+1 )&isElement( ch, x, y+2 ) );2. 游戲的視圖類(lèi)實(shí)現(xiàn)(1) BoardView.javapackage com.mot.j2me.midlets.jbombman;import javax.microedition.lcdui.*;/游戲的畫(huà)布屏幕類(lèi)public class BoardView extends Canvas private Board oBoard;private Player oPlayer;private Enemy oEnemy;/定義背景色private final int

24、 BackgroundColor = 0xffffff; /定義每個(gè)棋盤(pán)格的大小private final int iCellSize = 20; /聲明內(nèi)部邊框距離坐標(biāo)原點(diǎn)的橫坐標(biāo)距離private final int iLeft = 10; /聲明內(nèi)部邊框距離坐標(biāo)原點(diǎn)的縱坐標(biāo)距離private final int iTop = 10;public BoardView( Board board ) oBoard = board;public void setPlayer( Player player ) oPlayer = player;public void setEnemy( Enemy

25、 enemy ) oEnemy = enemy;/繪制游戲屏幕public void paint( Graphics g ) /聲明同步塊,對(duì)Graphics對(duì)象g進(jìn)行同步synchronized( g ) /如果游戲結(jié)束,則繪制游戲結(jié)束的界面if( oBoard.isGameOver )paintGameOver( g ); /如果玩家獲勝,則繪制玩家獲勝的界面else if( oBoard.isWin )paintWin( g ); /否則繪制當(dāng)前游戲運(yùn)行的界面elsepaintBoard( g );/定義繪制游戲結(jié)束的方法private void paintGameOver( Graph

26、ics g ) g.drawImage( Img.imgGameOver, 60, 100, Graphics.LEFT|Graphics.TOP );/定義繪制游戲玩家獲勝的方法private void paintWin( Graphics g ) g.drawImage( Img.imgCongratulation, 60, 100, Graphics.LEFT|Graphics.TOP );/繪制游戲棋盤(pán)邊框的方法private void paintFrame( Graphics g ) g.drawRect( 0, 0, 239, 239 );g.drawRect( 1, 1, 237

27、, 237 );g.drawRect( 2, 2, 235, 235 );g.drawRect( 3, 3, 233, 233 );g.drawRect( 7, 7, 225, 225 );g.drawRect( 8, 8, 223, 223 );/定義繪制棋盤(pán)的方法private void paintBoard( Graphics g ) /判斷畫(huà)布屏幕的工作區(qū)的原點(diǎn)是否在坐標(biāo)軸的原點(diǎn)上,如果是則直接繪制游戲棋盤(pán)的邊框if( g.getClipX() = 0 )paintFrame( g ); /設(shè)置畫(huà)布屏幕的工作區(qū)的左上角坐標(biāo)以及高度和寬度int x = ( g.getClipX() -

28、iLeft ) / iCellSize;int y = ( g.getClipY() - iTop ) / iCellSize;int w = g.getClipWidth() / iCellSize;int h = g.getClipHeight() / iCellSize;System.out.println( paint: x= + x + , y= + y + , w= + w + , h= + h );/如果畫(huà)布屏幕的工作區(qū)的高度超過(guò)了棋盤(pán)的高,則將工作區(qū)的高度設(shè)置為棋盤(pán)的高度if( hoBoard.iRows )h = oBoard.iRows;/根據(jù)工作區(qū)的位置,開(kāi)始繪制棋盤(pán)中的

29、元素for( int i=x; ix+w; i+ )for( int j=y; jy+h; j+ ) /根據(jù)遍歷得到的數(shù)組中的元素類(lèi)型進(jìn)行繪制switch( oBoard.chBoardij ) case N: /當(dāng)前數(shù)組元素中的類(lèi)型表示空白區(qū)域,則繪制空白區(qū)域的圖像g.setColor( BackgroundColor );g.fillRect( iLeft + i*iCellSize, iTop + j*iCellSize, iCellSize, iCellSize );break; case W: /當(dāng)前數(shù)組元素中的類(lèi)型表示磚墻,則繪制磚墻的圖像g.drawImage( Img.imgW

30、all, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break; case L: /當(dāng)前數(shù)組元素中的類(lèi)型表示巖石,則繪制巖石的圖像g.drawImage( Img.imgPillar, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break; case P: /當(dāng)前數(shù)組元素中的類(lèi)型表示游戲主角,則繪制游戲主角的圖像 case U: /當(dāng)前數(shù)組元素中的類(lèi)型表示主角正在放置炸彈,則繪制游戲主角的圖像g.dr

31、awImage( Img.imgPlayer, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break; case E: /當(dāng)前數(shù)組元素中的類(lèi)型表示敵人,則繪制敵人的圖像g.drawImage( Img.imgEnemy, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break; case B: /當(dāng)前數(shù)組元素中的類(lèi)型表示炸彈,則繪制炸彈的圖像g.drawImage( Img.imgBomb, iLeft

32、 + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break; case X: /當(dāng)前數(shù)組元素中的類(lèi)型表示炸彈爆炸,則繪制炸彈爆炸的圖像g.drawImage( Img.imgExploding, iLeft + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );break;/定義響應(yīng)按鍵按下的事件處理方法public void keyPressed( int code ) /如果游戲結(jié)束或者玩家勝利,則調(diào)用keyForInit()方法響應(yīng)按

33、鍵事件if( oBoard.isGameOver|oBoard.isWin )keyForInit( getGameAction(code) ); /否則調(diào)用keyForPlay()方法響應(yīng)按鍵事件elsekeyForPlay( getGameAction(code) ); /定義游戲結(jié)束或者玩家勝利時(shí)的事件處理方法private void keyForInit( int action ) /如果用戶(hù)按下了手機(jī)中的Select按鍵,則游戲進(jìn)行初始化if( action != FIRE )return;/棋盤(pán)初始化oBoard.init(); /敵人初始化oEnemy.init(); /游戲主角

34、初始化oPlayer.init();/初始化完成后重新繪制屏幕repaint(); /定義游戲過(guò)程中的事件處理方法private void keyForPlay( int action ) switch( action ) case FIRE:oPlayer.fire();break; case LEFT:oPlayer.left();break; case RIGHT:oPlayer.right();break; case UP:oPlayer.up();break; case DOWN:oPlayer.down();break;/定義重新繪制棋盤(pán)格的方法public void repain

35、tCells( int x, int y, int w, int h ) if( x = oBoard.iCols )x = oBoard.iCols - 1;if( x + w oBoard.iCols )w = oBoard.iCols - x;if( y = oBoard.iRows )y = oBoard.iRows - 1;if( y + h oBoard.iRows )h = oBoard.iRows - y;repaint( iLeft + x*iCellSize, iTop + y*iCellSize, w*iCellSize, h*iCellSize );3. 游戲的主角類(lèi)實(shí)

36、現(xiàn)(1) Player.javapackage com.mot.j2me.midlets.jbombman;import java.util.*;/游戲中的主角類(lèi)public class Player private Board oBoard;private BoardView oBoardView;private Enemy oEnemy;private Bomb oBomb;private Random random;private int iX, iY;/游戲主角的構(gòu)造函數(shù)public Player( Board board, BoardView boardview ) oBoard =

37、 board;oBoardView = boardview;random = new Random(); /調(diào)用游戲主角的初始化方法init();/游戲主角的初始化方法public void init() while( true ) /獲取游戲主角初始化的隨機(jī)位置iX = Math.abs( random.nextInt() ) % oBoard.iCols;iY = Math.abs( random.nextInt() ) % oBoard.iRows;/如果隨機(jī)位置上不為空,則跳出當(dāng)前本次循環(huán),再重新獲取隨機(jī)位置if( oBoard.chBoardiXiY != N )continue;/

38、如果隨機(jī)位置在敵人的攻擊范圍內(nèi),則跳出當(dāng)前本次循環(huán),再重新獲取隨機(jī)位置if( oBoard.near( E, iX, iY ) )continue;/如果隨機(jī)位置不能夠向任何方向移動(dòng)2步,則跳出當(dāng)前本次循環(huán),再重新獲取隨機(jī)位置if( !oBoard.near2( N, iX, iY ) )continue;/如果獲得一個(gè)合適的隨機(jī)位置,則跳出死循環(huán),繼續(xù)向下執(zhí)行break;/在棋盤(pán)中根據(jù)獲取的隨機(jī)位置設(shè)置對(duì)應(yīng)的棋盤(pán)格中的元素為游戲主角oBoard.chBoardiXiY = P;public void setEnemy( Enemy enemy ) oEnemy = enemy;/清除炸彈對(duì)象

39、的方法public void clearBomb() oBomb = null;System.out.println( delete Bomb );/判斷游戲主角能否移動(dòng)到給定的棋盤(pán)格上private boolean canGo( int x, int y ) /如果要移動(dòng)到的棋盤(pán)格中沒(méi)有元素,則返回trueif( oBoard.isElement( N, x, y ) )return true;/如果要移動(dòng)到的棋盤(pán)格中是敵人,則游戲主角死掉if( oBoard.isElement( E, x, y ) )die();/如果上述條件都不成立,則不能移動(dòng)到給定的單元格中,返回falseretur

40、n false; /定義放置炸彈的方法public void fire() /構(gòu)造一個(gè)炸彈對(duì)象oBomb = new Bomb( oBoard, oBoardView, this, oEnemy, iX, iY ); /啟動(dòng)炸彈對(duì)象中的線(xiàn)程方法體oBomb.start();System.out.println( new Bomb: x= + iX + , y= + iY );/定義游戲主角向左移動(dòng)的方法public void left() /如果不能向左移動(dòng),則返回if( !canGo( iX-1, iY ) )return;/如果移動(dòng)之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格

41、中放置炸彈元素if( oBoard.chBoardiXiY = U )oBoard.chBoardiXiY = B;else /否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空oBoard.chBoardiXiY = N; /游戲主角的列數(shù)減1iX-; /設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角oBoard.chBoardiXiY = P;/在畫(huà)布屏幕上重繪指定的區(qū)域oBoardView.repaintCells( iX, iY, 2, 1 );/定義游戲主角向右移動(dòng)的方法public void right() /如果不能向右移動(dòng),則返回if( !canGo( iX+1, iY ) )return;/如果移動(dòng)

42、之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格中放置炸彈元素if( oBoard.chBoardiXiY = U )oBoard.chBoardiXiY = B;else /否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空oBoard.chBoardiXiY = N; /游戲主角的列數(shù)加1iX+; /設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角oBoard.chBoardiXiY = P;/在畫(huà)布屏幕上重繪指定的區(qū)域oBoardView.repaintCells( iX-1, iY, 2, 1 );/定義游戲主角向上移動(dòng)的方法public void up() /如果不能向上移動(dòng),則返回if( !can

43、Go( iX, iY-1 ) )return;/如果移動(dòng)之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格中放置炸彈元素if( oBoard.chBoardiXiY = U )oBoard.chBoardiXiY = B;else /否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空oBoard.chBoardiXiY = N; /游戲主角的行數(shù)減1iY-; /設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角oBoard.chBoardiXiY = P;/在畫(huà)布屏幕上重繪指定的區(qū)域oBoardView.repaintCells( iX, iY, 1, 2 );/定義游戲主角向下移動(dòng)的方法public void

44、down() /如果不能向上移動(dòng),則返回if( !canGo( iX, iY+1 ) )return;/如果移動(dòng)之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格中放置炸彈元素if( oBoard.chBoardiXiY = U )oBoard.chBoardiXiY = B;else /否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空oBoard.chBoardiXiY = N; /游戲主角的行數(shù)加1iY+; /設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角oBoard.chBoardiXiY = P;/在畫(huà)布屏幕上重繪指定的區(qū)域oBoardView.repaintCells( iX, iY-1, 1,

45、2 );/定義游戲主角死掉的方法public void die() System.out.println( Player die: x= + iX + , y= + iY ); /殺死游戲中搜有的敵人oEnemy.dieAll(); /設(shè)置游戲結(jié)束的標(biāo)識(shí)為trueoBoard.isGameOver = true; /重新繪制畫(huà)布屏幕oBoardView.repaint();4. 游戲的敵人類(lèi)實(shí)現(xiàn)(1) Enemy.javapackage com.mot.j2me.midlets.jbombman;import java.util.*;/游戲中的敵人類(lèi)public class Enemy extends Thread private Board oBoard;private BoardView oBoardView;public Player oPlayer; /設(shè)置敵人每次移動(dòng)的間隔時(shí)間private final int iMoveTime = 500;private Random random; /聲明游戲中敵人的數(shù)量private int iNumbers; /聲明所有敵人所在位置的二維數(shù)組private int arrPo

溫馨提示

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

評(píng)論

0/150

提交評(píng)論