J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告

上傳人:zhan****gclb 文檔編號(hào):179541936 上傳時(shí)間:2023-01-01 格式:DOC 頁(yè)數(shù):40 大?。?93.39KB
收藏 版權(quán)申訴 舉報(bào) 下載
J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告_第1頁(yè)
第1頁(yè) / 共40頁(yè)
J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告_第2頁(yè)
第2頁(yè) / 共40頁(yè)
J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告_第3頁(yè)
第3頁(yè) / 共40頁(yè)

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《J2ME手機(jī)開(kāi)發(fā)游戲報(bào)告(40頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、《J2ME手機(jī)游戲開(kāi)發(fā)技術(shù)》實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱(chēng):益智類(lèi)游戲——炸彈人 一. 實(shí)驗(yàn)?zāi)康? 利用J2ME有關(guān)知識(shí),設(shè)計(jì)一款益智類(lèi)(PUZ)炸彈人(Bombman)游戲程序,是我們能夠掌握J(rèn)avaME游戲開(kāi)發(fā)的基本技巧。 二. 實(shí)驗(yàn)環(huán)境 Windows 7操作系統(tǒng),Eclipse,WTK2.5.1,JDK1.6 三. 實(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),而且在地圖中還存在不同的障礙物

2、,用來(lái)阻擋游戲主角和敵人的移動(dòng)。游戲主角可以在沒(méi)有障礙物的地方防止炸彈來(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)

3、,可以放置炸彈。 四. 實(shí)驗(yàn)步驟(代碼分析) 該游戲是一個(gè)11*11的棋盤(pán),用一個(gè)char型的二維數(shù)組來(lái)表示該棋盤(pán),二維數(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)

4、 行畫(huà)面的方法。 3. Bomb類(lèi):該類(lèi)表示游戲中的炸彈,定義了如何顯示炸彈的爆炸效果以及炸 彈爆炸后對(duì)其他相關(guān)元素的影響的方法。 4.Enemy類(lèi):該類(lèi)表示游戲中的敵人,具體定義了敵人如何移動(dòng)以及判斷敵 人是否死亡的方法。 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.

5、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)的二維數(shù)組 public char[ ][ ] chBoard; /* N - None 表示什么也沒(méi)有 W - Wall 表示磚墻 L - Pillar

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

7、c 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)格中的元素

8、 public void setElement( char ch, int x, int 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.java private Board oBoard; private Player oPlayer; private Enemy oEnemy; //定義背景

9、色 private final int 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 ) public void setPlayer( Player player ) public void setEnemy(

10、Enemy enemy ) //繪制游戲屏幕 public void paint( Graphics g ) //定義繪制游戲結(jié)束的方法 private void paintGameOver( Graphics g ) //定義繪制游戲玩家獲勝的方法 private void paintWin( Graphics g ) //繪制游戲棋盤(pán)邊框的方法 private void paintFrame( Graphics g ) //定義繪制棋盤(pán)的方法 private void paintBoard( Graphics g ) //定義響應(yīng)按鍵按下的事件處理方法 public

11、 void keyPressed( int code ) //定義游戲結(jié)束或者玩家勝利時(shí)的事件處理方法 private void keyForInit( int action ) //定義游戲過(guò)程中的事件處理方法 private void keyForPlay( int action ) //定義重新繪制棋盤(pán)格的方法 public void repaintCells( int x, int y, int w, int h ) (4)Player.java private Board oBoard; private BoardView oBoardView; pri

12、vate Enemy oEnemy; private Bomb oBomb; private Random random; private int iX, iY; //游戲主角的構(gòu)造函數(shù) public Player( Board board, BoardView boardview ) //游戲主角的初始化方法 public void init() public void setEnemy( Enemy enemy ) //清除炸彈對(duì)象的方法 public void clearBomb() //判斷游戲主角能否移動(dòng)到給定的棋盤(pán)格上 private boolean ca

13、nGo( 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() //定義游戲主角死掉的方法 public void die() (5)Enemy.java private Board oBoard; private BoardView

14、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; //初始化敵人對(duì)象的構(gòu)造函數(shù) public Enemy( Boa

15、rd 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 ) //定義給定位置上的敵人死亡的方法 publi

16、c void 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 iD

17、isapearTime = 1000; private int iX, iY; private 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 ) //清空給定的單元格中的元

18、素 private void clear( int x, int y ) //定義線(xiàn)程的方法體,在該方法中將定義炸彈爆炸的效果 public void run() (7) img.java //創(chuàng)建游戲中炸彈圖像的方法,其余圖像方法一樣 public static Image imgBomb = Image.createImage(new byte[] {{...}, (int)0, (int)163} ); 五. 實(shí)驗(yàn)結(jié)果與分析(包括代碼和實(shí)驗(yàn)總結(jié)) 程序代碼: 1. 游戲的模型類(lèi)實(shí)現(xiàn) (1) Board.java package com.mot.j2me.

19、midlets.jbombman; import java.util.*; //定義游戲的模型的類(lèi),可以將其看做一個(gè)棋盤(pán) public class Board { //定義棋盤(pán)的二維數(shù)組 public char[][] chBoard; /* N - None 表示什么也沒(méi)有 W - Wall 表示磚墻 L - Pillar 表示巖石 P - Player 表示游戲主角 E - Enemy 表示敵人 B - Bomb 表示炸彈 U - Bomb under player 表示主角正在放置炸彈 X - Expl

20、oding 表示炸彈爆炸 */ //聲明一個(gè)隨機(jī)數(shù)對(duì)象 private Random random; //聲明棋盤(pán)的行和列數(shù) public int iCols, iRows; //聲明判斷游戲是否結(jié)束的標(biāo)識(shí) public volatile boolean isGameOver; //聲明判斷是否玩家勝利的標(biāo)識(shí) public volatile boolean isWin; //構(gòu)造函數(shù),初始化棋盤(pán)的行數(shù)和列數(shù),并構(gòu)造隨機(jī)數(shù)對(duì)象 public Board( int cols, int rows )

21、{ //構(gòu)造隨機(jī)數(shù)對(duì)象 random = new Random(); iCols = cols; iRows = rows; //構(gòu)造表示棋盤(pán)的二維數(shù)組 chBoard = new char[iCols][iRows]; //調(diào)用棋盤(pán)的初始化方法 init(); } //定義棋盤(pán)的初始化方法 public void init() { //表示游戲結(jié)束的標(biāo)識(shí)設(shè)置為false isGameOver

22、= false; //表示玩家獲勝的標(biāo)識(shí)設(shè)置為false isWin = false; //遍歷二維數(shù)組,為數(shù)組的每個(gè)元素設(shè)置值為'N',表示游戲中每個(gè)棋盤(pán)格上都為空 for( int i=0; i

23、 j=1; j

24、來(lái)判斷是否放置磚墻 if( Math.abs( random.nextInt() ) % 2 == 0 ) chBoard[i][j] = 'W'; } //判斷某個(gè)棋盤(pán)格中是否是給定的元素 public boolean isElement( char ch, int x, int y ) { if( x < 0 ) return false; if( x >= iCols ) return false; if( y < 0 ) return false; if( y >= iRows )

25、 return false; return( chBoard[x][y] == ch ); } //獲取指定的某個(gè)棋盤(pán)格中的元素 public char getElement( int x, int y ) { if( x < 0 ) return '?'; if( x >= iCols ) return '?'; if( y < 0 ) return '?'; if( y >= iRows ) return '?'; return chBoard[x][y]; } //設(shè)置指定的某個(gè)棋

26、盤(pán)格中的元素 public void setElement( char ch, int x, int y ) { if( ch == '?' ) return; if( x < 0 ) return; if( x >= iCols ) return; if( y < 0 ) return; if( y >= iRows ) return; chBoard[x][y] = ch; } //判斷給定的位置是否在敵人的攻擊范圍內(nèi) public boolean near( c

27、har ch, int x, int y ) { return isElement( ch, 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 ) ) ||( isElemen

28、t( ch, x, y-1 )&&isElement( ch, x, y-2 ) ) ||( isElement( ch, x+1, y )&&isElement( ch, x+2, y ) ) ||( isElement( ch, x, y+1 )&&isElement( ch, x, y+2 ) ); } } 2. 游戲的視圖類(lèi)實(shí)現(xiàn) (1) BoardView.java package com.mot.j2me.midlets.jbombman; import javax.microedition.lcdui.*; //游戲的畫(huà)布屏幕類(lèi) public

29、class BoardView extends Canvas { private Board oBoard; private Player oPlayer; private Enemy oEnemy; //定義背景色 private final int 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)部

30、邊框距離坐標(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 enemy ) { oEnemy = enemy; } //繪制游戲屏幕 public void paint( Graphics g ) {

31、 //聲明同步塊,對(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)行的界面 else

32、 paintBoard( g ); } } //定義繪制游戲結(jié)束的方法 private void paintGameOver( Graphics 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 )

33、; } //繪制游戲棋盤(pán)邊框的方法 private void paintFrame( Graphics g ) { g.drawRect( 0, 0, 239, 239 ); g.drawRect( 1, 1, 237, 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 pai

34、ntBoard( 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() - iLeft ) / iCellSize; int y = ( g.getClipY() - iTop ) / iCellSize; int w = g.getClipWidth() / iCellS

35、ize; 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( h>oBoard.iRows ) h = oBoard.iRows; //根據(jù)工作區(qū)的位置,開(kāi)始繪制棋盤(pán)中的元素 for( int i=x; i

36、; j

37、 case 'W': //當(dāng)前數(shù)組元素中的類(lèi)型表示磚墻,則繪制磚墻的圖像 g.drawImage( Img.imgWall, 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, Gr

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

39、人,則繪制敵人的圖像 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 + i*iCellSize, iTop + j*iCellSize, Graphics.LEFT|Graphics.TOP );

40、 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)用keyForI

41、nit()方法響應(yīng)按鍵事件 if( oBoard.isGameOver||oBoard.isWin ) keyForInit( getGameAction(code) ); //否則調(diào)用keyForPlay()方法響應(yīng)按鍵事件 else keyForPlay( getGameAction(code) ); } //定義游戲結(jié)束或者玩家勝利時(shí)的事件處理方法 private void keyForInit( int action ) { //如果用戶(hù)按下了手機(jī)中的Select按

42、鍵,則游戲進(jìn)行初始化 if( action != FIRE ) return; //棋盤(pán)初始化 oBoard.init(); //敵人初始化 oEnemy.init(); //游戲主角初始化 oPlayer.init(); //初始化完成后重新繪制屏幕 repaint(); } //定義游戲過(guò)程中的事件處理方法 private void keyForPlay( int action ) { switch( action ){ case

43、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 repaintCells( int x, int y, int w, in

44、t h ) { if( x < 0 ) x = 0; if( x >= oBoard.iCols ) x = oBoard.iCols - 1; if( x + w > oBoard.iCols ) w = oBoard.iCols - x; if( y < 0 ) y = 0; if( y >= oBoard.iRows ) y = oBoard.iRows - 1; if( y + h > oBoard.iRows ) h = oBoard.iRows - y;

45、 repaint( iLeft + x*iCellSize, iTop + y*iCellSize, w*iCellSize, h*iCellSize ); } } 3. 游戲的主角類(lèi)實(shí)現(xiàn) (1) Player.java package com.mot.j2me.midlets.jbombman; import java.util.*; //游戲中的主角類(lèi) public class Player { private Board oBoard; private BoardView oBoardView; private Enemy oEnemy;

46、 private Bomb oBomb; private Random random; private int iX, iY; //游戲主角的構(gòu)造函數(shù) public Player( Board board, BoardView boardview ) { oBoard = board; oBoardView = boardview; random = new Random(); //調(diào)用游戲主角的初始化方法 init(); } //游戲主角的初始化方法 public void init() {

47、 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.chBoard[iX][iY] != 'N' ) continue; //如果隨機(jī)位置在敵人的攻擊范圍內(nèi),則跳出當(dāng)前本次循環(huán),再重新獲取隨機(jī)位

48、置 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.chBoard[iX][iY] = 'P'; } public void setE

49、nemy( Enemy enemy ) { oEnemy = enemy; } //清除炸彈對(duì)象的方法 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)有元素,則返回true if( oBoard.isElement( 'N', x, y ) ) r

50、eturn true; //如果要移動(dòng)到的棋盤(pán)格中是敵人,則游戲主角死掉 if( oBoard.isElement( 'E', x, y ) ) die(); //如果上述條件都不成立,則不能移動(dòng)到給定的單元格中,返回false return false; } //定義放置炸彈的方法 public void fire() { //構(gòu)造一個(gè)炸彈對(duì)象 oBomb = new Bomb( oBoard, oBoardView, this, oEnemy, iX, iY );

51、 //啟動(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)格中放置炸彈元素 if( oBoard.chBoard[iX][iY] ==

52、'U' ) oBoard.chBoard[iX][iY] = 'B'; else //否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空 oBoard.chBoard[iX][iY] = 'N'; //游戲主角的列數(shù)減1 iX--; //設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角 oBoard.chBoard[iX][iY] = 'P'; //在畫(huà)布屏幕上重繪指定的區(qū)域 oBoardView.repaintCells( iX, iY, 2, 1 ); } //定義游戲主角向右移動(dòng)的方法 p

53、ublic void right() { //如果不能向右移動(dòng),則返回 if( !canGo( iX+1, iY ) ) return; //如果移動(dòng)之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格中放置炸彈元素 if( oBoard.chBoard[iX][iY] == 'U' ) oBoard.chBoard[iX][iY] = 'B'; else //否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空 oBoard.chBoard[iX][iY] = 'N'; //游戲主角的

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

55、棋盤(pán)格中放置炸彈元素 if( oBoard.chBoard[iX][iY] == 'U' ) oBoard.chBoard[iX][iY] = 'B'; else //否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空 oBoard.chBoard[iX][iY] = 'N'; //游戲主角的行數(shù)減1 iY--; //設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角 oBoard.chBoard[iX][iY] = 'P'; //在畫(huà)布屏幕上重繪指定的區(qū)域 oBoardView.repaintCel

56、ls( iX, iY, 1, 2 ); } //定義游戲主角向下移動(dòng)的方法 public void down() { //如果不能向上移動(dòng),則返回 if( !canGo( iX, iY+1 ) ) return; //如果移動(dòng)之前的棋盤(pán)格中的元素是游戲主角放置炸彈,則移動(dòng)之前的棋盤(pán)格中放置炸彈元素 if( oBoard.chBoard[iX][iY] == 'U' ) oBoard.chBoard[iX][iY] = 'B'; else //否則的話(huà),移動(dòng)之前的棋盤(pán)格中設(shè)置為空 oBoard.ch

57、Board[iX][iY] = 'N'; //游戲主角的行數(shù)加1 iY++; //設(shè)置移動(dòng)后的棋盤(pán)格中的元素為游戲主角 oBoard.chBoard[iX][iY] = 'P'; //在畫(huà)布屏幕上重繪指定的區(qū)域 oBoardView.repaintCells( iX, iY-1, 1, 2 ); } //定義游戲主角死掉的方法 public void die() { System.out.println( "Player die: x=" + iX + ", y=" + iY );

58、 //殺死游戲中搜有的敵人 oEnemy.dieAll(); //設(shè)置游戲結(jié)束的標(biāo)識(shí)為true oBoard.isGameOver = true; //重新繪制畫(huà)布屏幕 oBoardView.repaint();}} 4. 游戲的敵人類(lèi)實(shí)現(xiàn) (1) Enemy.java package com.mot.j2me.midlets.jbombman; import java.util.*; //游戲中的敵人類(lèi) public class Enemy extends Thre

59、ad { 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 boo

60、lean stopThread = false; //初始化敵人對(duì)象的構(gòu)造函數(shù) public Enemy( Board board, BoardView boardview, Player player, int numbers ) { oBoard = board; oBoardView = boardview; oPlayer = player; iNumbers = numbers; arrPositions = new int[iNumbers][2]; random = new Random(); //調(diào)用敵人對(duì)象的初始化方法

61、 init(); } //敵人對(duì)象的初始化方法 public void init() { int x, y; //隨機(jī)將游戲中的敵人放置在棋盤(pán)中 for( int i=0; i

62、的隨機(jī)位置上已經(jīng)有其他元素了,則跳出本次循環(huán) if( oBoard.chBoard[x][y] != 'N' ) continue; //如果得到的隨機(jī)位置上為空,則將敵人元素放置在該單元格中 oBoard.chBoard[x][y] = 'E'; //將敵人對(duì)象所處的單元格位置保存在數(shù)組中 arrPositions[i][0] = x; arrPositions[i][1] = y; //繼續(xù)本次循環(huán) i++; } } public void sto

63、pThread() { stopThread = true; } //定義線(xiàn)程的方法體,在該方法中將定義敵人如何進(jìn)行移動(dòng) public void run() { while (!stopThread) { try { //敵人對(duì)象靜止一段時(shí)間 sleep(iMoveTime); //依次循環(huán)設(shè)置每個(gè)敵人對(duì)象是如何在期盼中進(jìn)行移動(dòng)的 for( int i=0; i

64、) //如果該敵人對(duì)象沒(méi)有被消滅,則調(diào)用move()方法進(jìn)行移動(dòng) if( arrPositions[i][0] != -1 ) move( i ); } catch (InterruptedException ie) { } } } //定義敵人的移動(dòng)方法 private void move( int i ) { int x, y; //隨

65、機(jī)獲得敵人移動(dòng)的方向 switch( random.nextInt() % 4 ) { case 0://向左移動(dòng) //當(dāng)前的棋盤(pán)格行不變,列減1 x = arrPositions[i][0] - 1; y = arrPositions[i][1]; //判斷能否移動(dòng)到給定的棋盤(pán)格位置 if( canGo( x, y ) ) { System.out.println( "Enemy " + i + " Left: x=" + x + ", y=" + y ); /

66、/設(shè)置移動(dòng)前的位置沒(méi)有任何元素,移動(dòng)后的位置為敵人元素 oBoard.chBoard[x+1][y] = 'N'; oBoard.chBoard[x][y] = 'E'; //修改二維數(shù)組中表示該敵人對(duì)象的位置的值 arrPositions[i][0] = x; //在畫(huà)布屏幕上重繪指定的區(qū)域 oBoardView.repaintCells( x, y, 2, 1); } break; case 1://向右移動(dòng) //當(dāng)前的棋盤(pán)格行不變,列加1 x = arrPositions[i][0] + 1; y = arrPositions[i][1]; //判斷能否移動(dòng)到給定的棋盤(pán)格位置 if( canGo( x, y ) ) { System.out.println( "Enemy " + i + " R

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲