📄 oceancanvas.java
字号:
package jsky;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;
public class OceanCanvas extends GameCanvas implements
Runnable {
private Display display;// 声明一个显示对象
private Dragon dragonMidlet;// 声明一个主程序的引用
public Random random;// 声明随机数
Image backgroundImage; // 背景
Image acalephIconImage;
Image playerIconImage;
// ============声明精灵start===============
LayerManager oceanCanvasLayer;
GameSprites submarine;// 潜水艇
GameSprites acaleph1; // 水母1
boolean showAcaleph1;
GameSprites acaleph2; // 水母2
boolean showAcaleph2;
GameSprites mine; // 水雷
GameSprites waterBoy; // 水娃
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 oceanThread = null;
public static boolean oceanCanvasRunning;// 代表程序的状态
public static boolean missionThreeGameOver;// 代表游戏结束状态
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 acaleph1HP = 70;//
static int acaleph2HP = 70;
static int shotDownCounts = 0;
// 状态信息栏的
int infoBarWidth = getWidth();
static final int infoBarHeight = 20;
// =================需维护的信息end=================
public OceanCanvas(Display d) {
super(true);
setFullScreenMode(true);
display = d;
random = new Random();// 随机数生成器
oceanCanvasLayer = new LayerManager();
// =============生成精灵start=============
try {
acalephIconImage = Image
.createImage("/img/missionThree/acalephIcon.png");
playerIconImage = Image.createImage("/img/system/player.png");
backgroundImage = Image.createImage("/img/background/ocean.png");
submarine = new GameSprites(Image
.createImage("/img/missionThree/submarine.png"), 48, 23,
GameSprites.WRAP, this, false);
acaleph1 = new GameSprites(Image
.createImage("/img/missionThree/acaleph.png"), 30, 43,
GameSprites.WRAP, this, false);
acaleph2 = new GameSprites(Image
.createImage("/img/missionThree/acaleph.png"), 30, 43,
GameSprites.WRAP, this, false);
mine = new GameSprites(Image
.createImage("/img/missionThree/mine.png"), 16, 16,
GameSprites.HIDE, this, false);
waterBoy = new GameSprites(Image
.createImage("/img/missionThree/waterBoy.png"), 39, 45,
GameSprites.HIDE, this, false);
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i] = new GameSprites(Image
.createImage("/img/system/missiles.png"), 11, 11,
GameSprites.HIDE, this, false);
}
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i] = new Sprite(Image
.createImage("/img/system/explosion.png"), 20, 20);// 爆炸在这里用Sprite类来实现。
}
playerPlane = new GameSprites(Image
.createImage("/img/system/playerPlane/playerPlane3.png"),
17, 20, GameSprites.STOP, this, false);
playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
getHeight() - 40);
} catch (IOException ioe) {
System.err.print("yyyyy");
System.err.println("OceanCanvas pic error");
}
int[] submarineSequence = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 };
submarine.setFrameSequence(submarineSequence);
submarine.setVisible(false);
oceanCanvasLayer.append(submarine);
int[] acaleph1Sequence = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 };
acaleph1.setFrameSequence(acaleph1Sequence);
acaleph1.setVisible(false);
oceanCanvasLayer.append(acaleph1);
int[] acaleph2Sequence = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0 };
acaleph2.setFrameSequence(acaleph2Sequence);
acaleph2.setVisible(false);
oceanCanvasLayer.append(acaleph2);
int[] mineSequence = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1 };
mine.setFrameSequence(mineSequence);
mine.setVisible(false);
oceanCanvasLayer.append(mine);
int[] waterBoySequence = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1 };
waterBoy.setFrameSequence(waterBoySequence);
waterBoy.setVisible(false);
oceanCanvasLayer.append(waterBoy);
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i].setVisible(false);
oceanCanvasLayer.append(missile[i]);
}
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i].setVisible(false);
oceanCanvasLayer.append(explosion[i]);
}
playerPlane.setVisible(false);
oceanCanvasLayer.append(playerPlane);
// =============生成精灵end===============
}
public void start() {
init();
oceanThread = new Thread(this);
oceanThread.start();
}
public void init() {
oceanCanvasRunning = false;// 代表程序的状态
missionThreeGameOver = false;// 代表游戏结束状态
isWin = false;// 代表游戏结果状态
stringShowCounts = 0; // 代表在刚开始很短的时间内可以显示字符
// 玩家的
playerLifeCounts = LIFECOUNTS;// 玩家生命数
playerHP = 70;// 玩家血
playerScores = 0;// 玩家分数
// 敌人的
showAcaleph1 = false;
showAcaleph2 = false;
acaleph1HP = 70;
acaleph2HP = 70;
shotDownCounts = 0;
submarine.setVisible(false);// 潜水艇
acaleph1.setVisible(false); // 水母1
acaleph2.setVisible(false); // 水母2
mine.setVisible(false); // 水雷
waterBoy.setVisible(false); // 水娃
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i].setVisible(false);
}
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i].setVisible(false);
}
}
public void stop() {
oceanCanvasRunning = false;
}
public void run() {
Graphics g = getGraphics();
long startTime = 0, endTime = 0, difTime = 0;
int desertRate =30;// 刷新速度
Thread currentThread = Thread.currentThread();
while (currentThread == oceanThread) {
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================
//水母1
if(!showAcaleph1){
if (!acaleph1.isVisible()) {
addCharacter(acaleph1);
}
showAcaleph1 = true;
}
//水母2
if(!showAcaleph2){
if (!acaleph2.isVisible()) {
addCharacter(acaleph2);
}
showAcaleph2 = true;
}
//================显示boss=================
//===========维护boss的状态start==============
//水母1
if (acaleph1.isVisible()){
acaleph1.move(-1, 0);
acaleph1.nextFrame();
acaleph1.checkBounds();
}
//随机变换水母1和水母2的位置
if(random.nextInt()%150 == 0){
randomPlace(acaleph1);
randomPlace(acaleph2);
}
//水母2
if (acaleph2.isVisible()){
acaleph2.move(1, 0);
acaleph2.nextFrame();
acaleph2.checkBounds();
}
//===========维护boss的状态end================
//=============随机增加怪物start================
//潜水艇
if(random.nextInt()%26 == 0){
if(!submarine.isVisible()) {
addCharacter(submarine);
}
}
//水雷
if(random.nextInt()%28 == 0){
if (!mine.isVisible()) {
addCharacter(mine);
}
}
//水娃
if(random.nextInt()%30 == 0){
if(!waterBoy.isVisible()) {
addCharacter(waterBoy);
}
}
//=============随机增加怪物start================
//=============维护怪物状态start================
//潜水艇
if (submarine.isVisible()){
submarine.move(-1, 0);
submarine.nextFrame();
submarine.checkBounds();
}
//水雷
if(mine.isVisible()){
mine.move(0, 6);
mine.nextFrame();
mine.checkBounds();
}
//水娃
if (waterBoy.isVisible()){
waterBoy.move(-2, 0);
waterBoy.nextFrame();
waterBoy.checkBounds();
}
//=============维护怪物状态end================
//================对玩家状态的维护start==============
if (!playerPlane.isVisible()) {
addCharacter(playerPlane);
} else if (playerPlane.isVisible()) {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0) {
playerPlane.move(-2, 0);
playerPlane.nextFrame();
} else if ((keyStates & RIGHT_PRESSED) != 0) {
playerPlane.move(2, 0);
playerPlane.nextFrame();
}
//返回菜单
else if((keyStates & UP_PRESSED) != 0){
System.out.println(" 3.game interrupted! back to menu!");
missionThreeGameOver = false;
oceanThread = null;
isWin = false;
Dragon.MISSIONCOUNTS = Dragon.MENULIST;
Dragon.showMenu = true;
} else if ((keyStates & FIRE_PRESSED) != 0) {
if(random.nextInt()%2 == 0){
for (int i = 0; i < MISSILECOUNTS; i++) {
if (!missile[i].isVisible()) {
addMissile(playerPlane);
break;
}
}
}
}
playerPlane.checkBounds();
}
//================对玩家状态的维护end==============
for (int i = 0; i < MISSILECOUNTS; i++) {
if(!missile[i].isVisible()){
if(random.nextInt()% 20==0){
if (acaleph1.isVisible()) {
addMissile(acaleph1);
break;
}
}else if(random.nextInt()% 25==0){
if (acaleph2.isVisible()) {
addMissile(acaleph2);
break;
}
}else if(random.nextInt()% 30 == 0){
if (submarine.isVisible()) {
addMissile(submarine);
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -