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



《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
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入學(xué)習(xí)貫徹中央八項(xiàng)規(guī)定精神交流發(fā)言材料范文(三篇)
- 學(xué)習(xí)中央八項(xiàng)規(guī)定精神心得體會(huì)范文(三篇)
- 2024年度組織生活會(huì)個(gè)人“4個(gè)方面”對(duì)照檢查材料文稿
- 2024年組織生活會(huì)個(gè)人對(duì)照檢查發(fā)言材料(普通黨員)例文
- 2025年旅游業(yè)高質(zhì)量發(fā)展行動(dòng)方案文稿
- 2025年機(jī)關(guān)組織生活會(huì)班子對(duì)照檢查材料范文
- 普通黨員2024年組織生活會(huì)個(gè)人發(fā)言提綱(圍繞“四個(gè)帶頭”方面)文稿
- 鄉(xiāng)班子領(lǐng)導(dǎo)干部2024年度民主生活會(huì)“四個(gè)帶頭”對(duì)照檢查發(fā)言材料文稿
- 2024年度黨員領(lǐng)導(dǎo)干部民主生活會(huì)整改落實(shí)方案例文
- 關(guān)于2024年度民主生活會(huì)個(gè)人問(wèn)題的整改方案例文
- 2025年醫(yī)療保障工作要點(diǎn)范文
- 青年人才“育苗蹲苗”培養(yǎng)實(shí)施方案范文
- 2025駐村第一書(shū)記組織生活會(huì)對(duì)照檢查材料例文
- 國(guó)企公司2025年安全生產(chǎn)工作要點(diǎn)范文
- 2024年度國(guó)企個(gè)人組織生活會(huì)前準(zhǔn)備情況、上年度整改落實(shí)情況范文
相關(guān)資源
更多