world.java
来自「基于J2ME的手机游戏软件。可以控制游戏人物在地图上上下左右行走;可以在地图上放」· Java 代码 · 共 1,063 行 · 第 1/2 页
JAVA
1,063 行
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import java.util.Random;
public class World
{
public static final int TILE0 = 0; //none
public static final int TILE1 = 1; //metal
public static final int TILE2 = 2; //brick
public static final int ACTOR = 3; //actor
public static final int ENEMY1 = 4; //enemy1
public static final int ENEMY2 = 5; //enemy2
public static final int ENEMY3 = 6;
public static final int ENEMY4 = 7;
public static final int BOSS = 8; //boss
public static final int GATE = 9;
public static final int KEY = 10;
public static final int VIEW_WIDTH = 200;
public static final int VIEW_HEIGHT = 200;
public static final int PLAYER_LIFE = 3;
public static final int DRAW_STATE_GAME = 1;
public static final int DRAW_STATE_MESSAGE = 2;
public static final int DRAW_STATE_OVER = 3;
public static final int ACTOR_PER_CYC_TIME = 200;
public static final int ENEMY_PER_CYC_TIME = 300;
public static final int BLAST_PER_CYC_TIME = 500;
public static final int BOMB_PER_CYC_TIME = 1000;
public static final int DESTROY_PER_CYC_TIME = 2000;
public static int ACTOR_RUN_UP;
public static int ACTOR_RUN_DOWN;
public static int ACTOR_RUN_LEFT;
public static int ACTOR_RUN_RIGHT;
public static int ACTOR_STATIC;
public static int ACTOR_DEAD;
public static int ENEMY1_RUN_UP;
public static int ENEMY1_RUN_DOWN;
public static int ENEMY1_RUN_LEFT;
public static int ENEMY1_RUN_RIGHT;
public static int ENEMY1_STATIC;
public static int ENEMY_DEAD;
public static int TILE_1; //metal
public static int TILE_2; //brick
public static int TILE_3; //none
public static int PROP_GATE;
public static int PROP_STAR;
public static int PROP_LIGHTING;
public static int PROP_LIFE;
public static int PROP_MONEY;
public static int BOMB_STATIC;
public static int BRICK_DESTROY;
public static int BLAST_MID;
public static int BLAST_LEFT;
public static int BLAST_UP;
public static int BLAST_DOWN;
public static int BLAST_RIGHT;
public static int BLAST_H;
public static int BLAST_V;
public static int NUMBER;
public static int NUMBER_RED;
public static int GAMEOVER;
public static int STAGE;
public static int LIFE;
public static int HEART;
public static int MONEY;
public static int CLOCK;
public static final int PROP_TYPE_STAR = 1;
public static final int PROP_TYPE_LIGHTING = 2;
public static final int PROP_TYPE_LIFE = 3;
public static final int PROP_TYPE_MONEY = 4;
public static final int MAX_BOMB_NUM = 10;
public static final int MAX_PROP_NUM = 10;
public static final int MAX_SCORE = 99999;
public static final int MAX_LIFE = 9;
private GameScreen gameScreen;
private int worldWidth;
private int worldHeight;
private int viewX;
private int viewY;
private int viewWidth;
private int viewHeight;
private int tileWidth;
private int tileHeight;
private Actor actor;
private Enemy[] enemyArray;
private GameMap gameMap;
private ImageSet imageSet;
private boolean isPause;
private Bomb[] bombArray;
private Sprite destroyBrick;
private int[] destroyBrickX;
private int[] destroyBrickY;
private int destroyBrickNum;
private boolean hasDestroy;
private int destroy_remainCyc;
private int enemyNum;
private int drawState;
private Image stageChangeImage;
private int stopCyc;
private int gateX;
private int gateY;
private int bombNum;
private Prop[] propArray;
private int baseNum;
private int line;
private int clock;
private int playerLife;
private int score;
private Blast[] blastArray;
private int[][] map;
public World(GameScreen gs)
{
gameScreen = gs;
imageSet = new ImageSet(10);
initImageSet(imageSet);
gameMap = new GameMap();
startNewGame();
viewWidth = VIEW_WIDTH;
viewHeight = VIEW_HEIGHT;
destroyBrick = new Sprite(imageSet, BRICK_DESTROY, 0);
stageChangeImage = Image.createImage(VIEW_WIDTH, VIEW_HEIGHT);
}
private void initStage(int stage)
{
stopCyc = 0;
drawState = DRAW_STATE_MESSAGE;
map = gameMap.getMap(stage);
gateX = gameMap.getGateX(stage);
gateY = gameMap.getGateY(stage);
tileWidth = gameMap.getTileWidth(stage);
tileHeight = gameMap.getTileHeight(stage);
clock = gameMap.getTime(stage);
worldWidth = map[0].length * tileWidth;
worldHeight = map.length * tileHeight;
viewX = 0;
viewY = 0;
enemyNum = GameMap.getEnemyNum(map);
initDestroyBrickArray();
initEnemyArray();
initPropArray();
initActor();
initBombArray();
initBlastArray();
isPause = false;
bombNum = 0;
baseNum = 100;
line = 0;
}
private void initPropArray()
{
propArray = new Prop[MAX_PROP_NUM];
}
private void initBombArray()
{
bombArray = new Bomb[MAX_BOMB_NUM];
}
private void initBlastArray()
{
blastArray = new Blast[MAX_BOMB_NUM];
}
private void initActor()
{
int x = gameMap.getActorPosX(map, tileWidth);
int y = gameMap.getActorPosY(map, tileHeight);
if (actor == null)
{
actor = new Actor(this, x, y);
actor.start();
}
else
{
actor.init(x, y);
actor.start();
}
}
public void startNewGame()
{
startNewGame(1);
}
public void startNewGame(int stage)
{
initStage(stage);
score = 0;
playerLife = PLAYER_LIFE;
}
private void initEnemyArray()
{
enemyArray = new Enemy[enemyNum];
int[][] bufArray = GameMap.getEnemyPos(map, tileWidth, tileHeight);
for (int i = 0; i < bufArray.length; i++)
{
enemyArray[i] = new Enemy(this, bufArray[i][0], bufArray[i][1],
bufArray[i][2]);
}
}
private void initImageSet(ImageSet bufImageSet)
{
Image image = null;
Image[] array = null;
//初始化玩家图像集
image = ImageSet.loadClippedImage("/game_actor1.png", 0, 0, 72, 128);
array = ImageSet.extractFrames(image, 0, 0, 3, 1, 24, 32);
ACTOR_RUN_UP = bufImageSet.addState(array, ACTOR_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 32, 3, 1, 24, 32);
ACTOR_RUN_RIGHT = bufImageSet.addState(array, ACTOR_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 64, 3, 1, 24, 32);
ACTOR_RUN_DOWN = bufImageSet.addState(array, ACTOR_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 96, 3, 1, 24, 32);
ACTOR_RUN_LEFT = bufImageSet.addState(array, ACTOR_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 24, 64, 1, 1, 24, 32);
ACTOR_STATIC = bufImageSet.addState(array, 0);
image = ImageSet.loadClippedImage("/game_actor1.png", 216, 0, 24, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 24, 32);
ACTOR_DEAD = imageSet.addState(array, 0);
//初始化敌人图像集
image = ImageSet.loadClippedImage("/game_actor2.png", 0, 0, 72, 128);
array = ImageSet.extractFrames(image, 0, 0, 3, 1, 24, 32);
ENEMY1_RUN_UP = bufImageSet.addState(array, ENEMY_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 32, 3, 1, 24, 32);
ENEMY1_RUN_RIGHT = bufImageSet.addState(array, ENEMY_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 64, 3, 1, 24, 32);
ENEMY1_RUN_DOWN = bufImageSet.addState(array, ENEMY_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 96, 3, 1, 24, 32);
ENEMY1_RUN_LEFT = bufImageSet.addState(array, ENEMY_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 24, 64, 1, 1, 24, 32);
ENEMY1_STATIC = bufImageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/game_tile_metal.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
TILE_1 = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/game_tile_brick.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
TILE_2 = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/game_bomb.png", 0, 0, 160, 32);
array = ImageSet.extractFrames(image, 0, 0, 5, 1, 32, 32);
BOMB_STATIC = imageSet.addState(array, BOMB_PER_CYC_TIME);
//
image = ImageSet.loadClippedImage("/game_blast.png", 0, 0, 160, 224);
array = ImageSet.extractFrames(image, 0, 0, 5, 1, 32, 32);
BLAST_MID = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 32, 5, 1, 32, 32);
BLAST_V = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 64, 5, 1, 32, 32);
BLAST_H = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 96, 5, 1, 32, 32);
BLAST_LEFT = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 128, 5, 1, 32, 32);
BLAST_UP = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 160, 5, 1, 32, 32);
BLAST_RIGHT = imageSet.addState(array, BLAST_PER_CYC_TIME);
array = ImageSet.extractFrames(image, 0, 192, 5, 1, 32, 32);
BLAST_DOWN = imageSet.addState(array, BLAST_PER_CYC_TIME);
//
image = ImageSet.loadClippedImage("/game_dead.png", 0, 0, 24, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 24, 32);
ENEMY_DEAD = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/game_brick_destroy.png", 0, 0, 160, 32);
array = ImageSet.extractFrames(image, 0, 0, 5, 1, 32, 32);
BRICK_DESTROY = imageSet.addState(array, DESTROY_PER_CYC_TIME);
//
image = ImageSet.loadClippedImage("/stage.png", 0, 0, 56, 13);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 56, 13);
STAGE = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/life.png", 0, 0, 50, 29);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 50, 29);
LIFE = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/number.png", 0, 0, 90, 12);
array = ImageSet.extractFrames(image, 0, 0, 10, 1, 9, 12);
NUMBER = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/number_red.png", 0, 0, 90, 12);
array = ImageSet.extractFrames(image, 0, 0, 10, 1, 9, 12);
NUMBER_RED = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/gameover.png", 0, 0, 135, 18);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 135, 18);
GAMEOVER = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/gate.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
PROP_GATE = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/heart.png", 0, 0, 12, 12);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 12, 12);
HEART = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/prop_add_life.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
PROP_LIFE = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/prop_add_score.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
PROP_MONEY = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/prop_add_power.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
PROP_LIGHTING = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/prop_add_bomb.png", 0, 0, 32, 32);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 32, 32);
PROP_STAR = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/money.png", 0, 0, 12, 12);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 12, 12);
MONEY = imageSet.addState(array, 0);
//
image = ImageSet.loadClippedImage("/clock.png", 0, 0, 12, 12);
array = ImageSet.extractFrames(image, 0, 0, 1, 1, 12, 12);
CLOCK = imageSet.addState(array, 0);
//
}
public void addDestroyBrick(int x, int y)
{
hasDestroy = true;
destroyBrickNum++;
if (destroyBrickNum <= 4)
{
destroyBrickX[destroyBrickNum - 1] = x;
destroyBrickY[destroyBrickNum - 1] = y;
}
}
public void initDestroyBrickArray()
{
hasDestroy = false;
destroyBrickX = new int[4];
destroyBrickY = new int[4];
for (int i = 0; i < 4; i++)
{
destroyBrickX[i] = -1;
destroyBrickY[i] = -1;
}
destroyBrickNum = 0;
destroy_remainCyc = 40;
}
private void checkDestroyBrick()
{
if (destroy_remainCyc < 0)
{
initDestroyBrickArray();
destroyBrick.reset();
}
if (hasDestroy)
{
destroyBrick.cycle();
}
destroy_remainCyc--;
}
public void destroy(int tileX, int tileY)
{
int x = tileY * tileWidth;
int y = tileX * tileHeight;
map[tileX][tileY] = TILE0;
addDestroyBrick(x, y);
addProp(x, y);
}
private void addProp(int x, int y)
{
if (propArray != null)
{
int type = 0;
Random r = new Random();
int num = (r.nextInt() % baseNum);
if (num < 0)
{
num = -num;
}
// System.out.println(num+" "+baseNum);
if (num == 1)
{
type = PROP_TYPE_LIFE;
baseNum = 100;
}
else if (num == 2 || num == 3)
{
type = PROP_TYPE_LIGHTING;
baseNum = 100;
}
else if (num >= 4 && num <= 6)
{
type = PROP_TYPE_STAR;
baseNum = 100;
}
else if (num >= 7 && num <= 11)
{
type = PROP_TYPE_MONEY;
baseNum = 100;
}
else {
baseNum = baseNum - 10;
if (baseNum <= 0)
{
baseNum = 10;
}
}
for (int i = 0; i < propArray.length; i++)
{
if (propArray[i] == null)
{
propArray[i] = new Prop(this, x, y, type);
break;
}
}
}
}
public ImageSet getImageSet()
{
return imageSet;
}
public int getViewX()
{
return viewX;
}
public int getViewY()
{
return viewY;
}
public int getViewWidth()
{
return viewWidth;
}
public int getViewHeight()
{
return viewHeight;
}
public int[][] getMap()
{
return map;
}
public int getTileWidth()
{
return tileWidth;
}
public int getTileHeight()
{
return tileHeight;
}
public int getTileX(int x, int y)
{
return y / tileHeight;
}
public int getTileY(int x, int y)
{
return x / tileWidth;
}
public void cycle()
{
if (drawState == DRAW_STATE_GAME)
{
checkViewPoint();
checkBombAndBlastArray();
checkEnemyArray();
checkDestroyBrick();
checkPropArray();
if (actor != null)
{
actor.cycle();
if (!actor.isLive() && actor.isDisuse())
{
stageOver();
}
}
if (clock <= 0)
{
actor.dead();
clock = 0;
}
else
{
clock--;
}
}
else if (drawState == DRAW_STATE_MESSAGE)
{
stopCyc++;
if (stopCyc > 60)
{
drawState = DRAW_STATE_GAME;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?