📄 bosscanvas.java
字号:
package jsky;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;
public class BOSSCanvas extends GameCanvas implements Runnable {
private Display display;// 声明一个显示对象
private Dragon dragonMidlet;// 声明一个主程序的引用
public Random random;// 声明随机数
Image bossIconImage;
Image playerIconImage;
Image backgroundImage;
// ============声明精灵start===============
LayerManager bossCanvasLayer;
GameSprites boss;// boss
static final int CORSAIRCOUNTS = 3;
static final int SPACEBARGECOUNTS = 2;
static final int SUPERVISORCOUNTS = 2;
static final int KILLERSATELLITESCOUNTS = 4;
GameSprites [] corsair; //海盗船3艘
GameSprites [] spaceBarge; //太空驳船2瘦
GameSprites [] supervisor; //监督者2架
GameSprites [] killerSatellites; //杀手卫星4枚
static final int MISSILECOUNTS = 30;
static final int EXPLOSIONCOUNTS = 7;
GameSprites[] missile = new GameSprites[MISSILECOUNTS]; // 导弹
Sprite[] explosion = new Sprite[EXPLOSIONCOUNTS]; // 爆炸
GameSprites playerPlane; // 玩家
// ============声明精灵end=================
// =================需维护的信息start===============
public static Thread bossThread = null;
public static boolean bossCanvasRunning;// 代表程序的状态
public static boolean missionBossGameOver;// 代表游戏结束状态
boolean isWin;// 代表游戏结果状态
int stringShowCounts; // 代表在刚开始很短的时间内可以显示字符
// 玩家的
static final int LIFECOUNTS = 3;
static int playerLifeCounts = LIFECOUNTS;// 玩家生命数
static int playerHP = 70;// 玩家血
static int playerScores = 0;// 玩家分数
static int levels = 1;// 玩家等级
// 敌人的
static int bossHP = 140;//
static int shotDownCounts = 0;
// 状态信息栏的
int infoBarWidth = getWidth();
static final int infoBarHeight = 20;
// =================需维护的信息end=================
public BOSSCanvas(Display d) {
super(true);
setFullScreenMode(true);
display = d;
random = new Random();// 随机数生成器
bossCanvasLayer = new LayerManager();
// =============生成精灵start=============
try {
bossIconImage = Image.createImage("/img/missionBoss/bossIcon.png");
playerIconImage = Image.createImage("/img/system/player.png");
backgroundImage = Image.createImage("/img/background/space.png");
//创建boss
boss = new GameSprites(Image
.createImage("/img/missionBoss/boss.png"), 90, 70,
GameSprites.WRAP, this, false);
boss.setVisible(false);
bossCanvasLayer.append(boss);
//创建海盗船
corsair = new GameSprites[CORSAIRCOUNTS]; //海盗船3艘
for(int i =0; i <CORSAIRCOUNTS; i++){
corsair[i]= new GameSprites(Image
.createImage("/img/missionBoss/corsair.png"),30,15,GameSprites.HIDE,this,false);
corsair[i].setVisible(false);
int corsairSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
corsair[i].setFrameSequence(corsairSequence);
bossCanvasLayer.append(corsair[i]);
}
//创建太空驳船
spaceBarge = new GameSprites[SPACEBARGECOUNTS]; //太空驳船2瘦
for(int i =0; i <SPACEBARGECOUNTS; i++){
spaceBarge[i] = new GameSprites(Image
.createImage("/img/missionBoss/spaceBarge.png"),16,20,GameSprites.HIDE,this,false);
spaceBarge[i].setVisible(false);
int spaceBargeSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
spaceBarge[i].setFrameSequence(spaceBargeSequence);
bossCanvasLayer.append(spaceBarge[i]);
}
//创建监督者
supervisor = new GameSprites[SUPERVISORCOUNTS]; //监督者2架
for(int i =0; i <SUPERVISORCOUNTS; i++){
supervisor[i] = new GameSprites(Image
.createImage("/img/missionBoss/supervisor.png"),16,20,GameSprites.HIDE,this,false);
supervisor[i].setVisible(false);
int supervisorSequence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
supervisor[i].setFrameSequence(supervisorSequence);
bossCanvasLayer.append(supervisor[i]);
}
//创建杀手卫星
killerSatellites = new GameSprites[KILLERSATELLITESCOUNTS]; //杀手卫星4枚
for(int i =0; i <KILLERSATELLITESCOUNTS; i++){
killerSatellites[i] = new GameSprites(Image
.createImage("/img/missionBoss/killerSatellites.png"),16,20,GameSprites.HIDE,this,false);
killerSatellites[i].setVisible(false);
int killerSatellitesSquence[] = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
killerSatellites[i].setFrameSequence(killerSatellitesSquence);
bossCanvasLayer.append(killerSatellites[i]);
}
//创建导弹
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i] = new GameSprites(Image
.createImage("/img/system/missiles.png"), 11, 11,
GameSprites.HIDE, this, false);
missile[i].setVisible(false);
bossCanvasLayer.append(missile[i]);
}
//创建爆炸
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i] = new Sprite(Image
.createImage("/img/system/explosion.png"), 20, 20);// 爆炸在这里用Sprite类来实现。
explosion[i].setVisible(false);
bossCanvasLayer.append(explosion[i]);
}
//创建玩家
playerPlane = new GameSprites(Image
.createImage("/img/system/playerPlane/playerPlane4.png"),
25, 20, GameSprites.STOP, this, false);
playerPlane.setVisible(false);
bossCanvasLayer.append(playerPlane);
} catch (IOException ioe) {
System.err.print("yyyyy");
System.err.println(ioe.getMessage());
System.err.println("pic error!");
System.err.println("BOSS Canvas error pic format");
}
// =============生成精灵end===============
}
public void start() {
init();
bossThread = new Thread(this);
bossThread.start();
}
public void init() {
bossCanvasRunning = false;
missionBossGameOver = false;
//玩家的
playerLifeCounts = LIFECOUNTS;// 玩家生命数
playerHP = 70;// 玩家血
playerScores = 0;// 玩家分数
// 敌人的
bossHP = 140;//
shotDownCounts = 0;
boss.setVisible(true);
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i].setVisible(false);
}
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i].setVisible(false);
}
//=========
for(int i = 0; i < CORSAIRCOUNTS ; i++){
corsair[i].setVisible(false);
}
for(int i = 0; i < KILLERSATELLITESCOUNTS ; i++){
killerSatellites[i].setVisible(false);
}
for(int i = 0; i < SUPERVISORCOUNTS; i ++){
supervisor[i].setVisible(false);
}
for(int i = 0; i < SPACEBARGECOUNTS; i ++){
spaceBarge[i].setVisible(false);
}
//=============
playerPlane.setVisible(true);
playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
getHeight() - 40);
}
public void stop() {
bossCanvasRunning = false;
}
public void run() {
Graphics g = getGraphics();
long startTime = 0, endTime = 0, difTime = 0;
int desertRate = 30;// 刷新速度
Thread currentThread = Thread.currentThread();
while (currentThread == bossThread) {
startTime = System.currentTimeMillis();
gameUpdate();// 游戏状态的修改
drawIt(g);// 绘制游戏
endTime = System.currentTimeMillis();
difTime = endTime - startTime;
if (difTime < desertRate) {
try {
Thread.sleep(desertRate - difTime);
} catch (InterruptedException e) {
stop();
}
}
}
}
protected void gameUpdate() {
stringShowCounts++;
// ============对boss状态的维护start=========
if (!boss.isVisible()) {
addCharacter(boss);
} else if (boss.isVisible()) {
boss.move(3, 0);
boss.nextFrame();
boss.checkBounds();
}
// ============对boss状态的维护end===========
//=================对敌机的维护start===============
//显示海盗船
if(random.nextInt()% 70 == 0){
for(int i= 0; i< CORSAIRCOUNTS; i++){
if(!corsair[i].isVisible()){
corsair[i].setPosition(Math.abs(random.nextInt()%getWidth()),20);
corsair[i].setVisible(true);
}
}
}
//维护海盗船
for(int i= 0; i< CORSAIRCOUNTS; i++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -