📄 war.java
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.GameCanvas;
import java.io.IOException;
public class War extends GameCanvas implements Runnable
{
//********************************全局静态变量
//背景尺寸
public static int WIDTH = 0;
public static int HEIGHT = 0;
//左边框和上边框
public static final int WAR_FIELD_LEFT = 20;
public static final int WAR_FIELD_TOP = 20;
//战斗区域尺寸,应该是主角的尺寸的整数倍
public static final int WAR_FIELD_WIDTH = 120;
public static final int WAR_FIELD_HEIGHT = 160;
//主角的尺寸
public static final int ACTOR_WIDTH = 24;
public static final int ACTOR_HEIGHT = 32;
//战争开始时主角默认显示的帧
public static final int DEFAULT_FRAME = 0;
//水平和垂直数目
public static final int H_NUMBER = WAR_FIELD_WIDTH/ACTOR_WIDTH;
public static final int V_NUMBER = WAR_FIELD_HEIGHT/ACTOR_HEIGHT;
//循环延迟
public static final int DISPLAY_TIME = 100;
//最大墙数目
public static final int MAX_WALL_NUMBER = 10;
//行动过程中的水平及垂直步长
public static final int STEP_WIDTH = 2;
public static final int STEP_HEIGHT = 2;
//子弹尺寸
public static final int BULLET_WIDTH = 20;
public static final int BULLET_HEIGHT = 16;
//最大子弹数目
public static final int MAX_BULLET_NUMBER = 10;
//子弹速度
public static final int BULLET_RATE = 1;
//子弹存活时间
public static final int BULLET_LIVE_TIME = 1000 * 10 / DISPLAY_TIME;
//发射间隔
public static final int BULLET_INTERVAL = 3;
//敌人尺寸
public static final int ENEMY_WIDTH = 24;
public static final int ENEMY_HEIGHT = 32;
//敌人最大数目
public static final int MAX_ENEMY_NUMBER = 10;
//同时显示的敌人的最大数目
public static final int DISPLAY_ENEMY_NUMBER = 10;
//敌人产生的坐标
public static final int ENEMY_DISPLAY_X = 20;
public static final int ENEMY_DISPLAY_Y = 20;
//敌人速度
public static final int ENEMY_MIN_RATE = 1;
public static final int ENEMY_MID_RATE = 2;
public static final int ENEMY_MAX_RATE = 4;
//爆炸动画尺寸
public static final int EXPLODE_FLASH_WIDTH = 24;
public static final int EXPLODE_FLASH_HEIGHT = 18;
//主角死亡下落速度
public static final int ACTOR_DEAD_RATE = 3;
//主角死亡后,屏幕色彩值变化速度
public static final int ACTOR_DEAD_COLOR = 5;
//********************************全局非静态变量
private MainSelect mainSelect = null;
//循环控制器
private boolean stop = false;
//本部分是否正常终止
private boolean terminatedNormally = false;
//主角现在坐标
private int currentX = 0, currentY = 0;
//wall变量
private WallManager wallManager = null;
private Image wallImage = null;
public War(MainSelect ms)
{
super(true);
mainSelect = ms;
setFullScreenMode(true);
WIDTH = getWidth();//240
HEIGHT = getHeight();//309
initSprite();
new Thread(this).start();
}
private void initSprite()
{
try
{
wallImage = Image.createImage("/wall.png");
wallManager = new WallManager(wallImage, MAX_WALL_NUMBER);
}
catch (IOException ie)
{
}
}
public void run()
{
Graphics g = getGraphics();
while(!stop)
{
input();
drawScreen(g);
flushGraphics();
try
{
Thread.sleep(DISPLAY_TIME);
}
catch (InterruptedException ie)
{
}
}
if (!terminatedNormally)
{
WarMidlet.dis.setCurrent(mainSelect);
}
}
private void input()
{
int keyState=getKeyStates();
//UP
if((keyState&GameCanvas.UP_PRESSED)!=0)
{
if (currentY != 0)
{
currentY--;
}
}
//DOWN
if((keyState&GameCanvas.DOWN_PRESSED)!=0)
{
if (currentY != V_NUMBER - 1)
{
currentY++;
}
}
//LEFT
if((keyState&GameCanvas.LEFT_PRESSED)!=0)
{
if (currentX != 0)
{
currentX--;
}
}
//RIGHT
if((keyState&GameCanvas.RIGHT_PRESSED)!=0)
{
if (currentX != H_NUMBER - 1)
{
currentX++;
}
}
//布墙命令
if((keyState&GameCanvas.FIRE_PRESSED)!=0)
{
wallManager.addWall(currentX, currentY);
//System.out.println("布墙完成");
}
//布墙完成,开始战争
if((keyState&GameCanvas.GAME_A_PRESSED)!=0)
{
stop = true;
//System.out.println("布墙完成");
WarMidlet.dis.setCurrent(new WarGame(mainSelect, wallManager));
//System.out.println("布墙完成");
terminatedNormally = true;
}
//将布墙完成时主角的坐标存储起来
wallManager.setActorPosition(currentX, currentY);
/*if (currentX == 4 && currentY == 4)
{
stop = true;
WarMidlet.dis.setCurrent(new WarGame(mainSelect, wallManager));
terminatedNormally = true;
}*/
}
private void drawScreen(Graphics g)
{
//绘制背景
g.setColor(0,0,0);
g.fillRect(0,0,WIDTH,HEIGHT);
//绘制战争区域
g.setColor(0,255,0);
g.fillRect(WAR_FIELD_LEFT, WAR_FIELD_TOP, WAR_FIELD_WIDTH, WAR_FIELD_HEIGHT);
//绘制敌人产生地
g.setColor(255,0,0);
g.fillRect(WAR_FIELD_LEFT, WAR_FIELD_TOP, ENEMY_WIDTH, ENEMY_HEIGHT);
//绘制墙
wallManager.updateWall(g);
//绘制选择标记
g.setColor(0,0,255);
g.drawRect(WAR_FIELD_LEFT + currentX * ACTOR_WIDTH, WAR_FIELD_TOP + currentY * ACTOR_HEIGHT, ACTOR_WIDTH, ACTOR_HEIGHT);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -