📄 desertcanvas.java
字号:
package jsky;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;
public class DesertCanvas extends GameCanvas implements Runnable{
private Display display;//声明一个显示对象
private Dragon dragonMidlet;//声明一个主程序的引用
public Random random;//声明随机数
Image boss1IconImage;
Image boss2IconImage;
Image playerIconImage;
Image backgroundImage; //背景
//============声明精灵start===============
LayerManager desertCanvasLayer;
GameSprites bigMouthMonster;//大嘴怪boss1
boolean showBigMouthMonster;
GameSprites toLeftMonster; //向左走怪boss2
boolean showToLeftMonster;
static final int AEROCRAFTCOUNTS = 3;
GameSprites []aeroCraft; //飞行器
GameSprites eyeballMonster; //眼球怪
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 desertThread = null;
public static boolean desertCanvasRunning;//代表程序的状态
public static boolean missionTwoGameOver;//代表游戏结束状态
boolean isWin;//代表游戏结果状态
boolean isLose;
int stringShowCounts; //代表在刚开始很短的时间内可以显示字符
//玩家的
static final int LIFECOUNTS = 3;
private int playerLifeCounts = LIFECOUNTS;//玩家生命数
static int playerHP = 70;//玩家血
static int playerScores =0;//玩家分数
static int levels =1;//玩家等级
//敌人的
static int bigMouthMonsterHP = 70;//
static int toLeftMonsterHP = 70;
static int shotDownCounts =0;
//状态信息栏的
int infoBarWidth = getWidth();
static final int infoBarHeight = 20;
//=================需维护的信息end=================
public DesertCanvas(Display d){
super(true);
setFullScreenMode(true);
display = d;
//dragonMidlet = new Dragon();
random = new Random();//随机数生成器
desertCanvasLayer = new LayerManager();
//=============生成精灵start=============
try{
boss1IconImage = Image.createImage("/img/missionTwo/boss1Icon.png");
boss2IconImage = Image.createImage("/img/missionTwo/boss2Icon.png");
playerIconImage = Image.createImage("/img/system/player.png");
backgroundImage = Image.createImage("/img/background/desert.png");
bigMouthMonster = new GameSprites(Image.createImage("/img/missionTwo/bigMouthMonster.png"),
20,25,GameSprites.WRAP,this,false);
toLeftMonster = new GameSprites(Image.createImage("/img/missionTwo/toLeftMonster.png"),
30,25,GameSprites.WRAP,this,false);
aeroCraft = new GameSprites[AEROCRAFTCOUNTS] ;
for(int i =0; i <AEROCRAFTCOUNTS; i++){
aeroCraft[i] = new GameSprites(Image.createImage("/img/missionTwo/aeroCraft.png"),
16,13,GameSprites.HIDE,this,false);
}
eyeballMonster = new GameSprites(Image.createImage("/img/missionTwo/eyeballMonster.png"),
35,20,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/playerPlane2.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("DesertCanvas pic error");
}
int []bigMouthMonsterSequence = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1};
bigMouthMonster.setFrameSequence(bigMouthMonsterSequence);
bigMouthMonster.setVisible(false);
desertCanvasLayer.append(bigMouthMonster);
int []toLeftMonsterSequence = {0,0,0,0,0,0,0,0,1,1,1,1,1,1};
toLeftMonster.setFrameSequence(toLeftMonsterSequence);
toLeftMonster.setVisible(false);
desertCanvasLayer.append(toLeftMonster);
for(int i =0; i <AEROCRAFTCOUNTS; i++){
int []aeroCraftSequence = {0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};
aeroCraft[i].setFrameSequence(aeroCraftSequence);
aeroCraft[i].setVisible(false);
desertCanvasLayer.append(aeroCraft[i]);
}
int []eyeballMonsterSequence = {0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1};
eyeballMonster.setFrameSequence(eyeballMonsterSequence);
eyeballMonster.setVisible(false);
desertCanvasLayer.append(eyeballMonster);
for(int i=0; i<MISSILECOUNTS; i++){
missile[i].setVisible(false);
desertCanvasLayer.append(missile[i]);
}
for(int i=0; i<EXPLOSIONCOUNTS; i++){
explosion[i].setVisible(false);
desertCanvasLayer.append(explosion[i]);
}
playerPlane.setVisible(false);
desertCanvasLayer.append(playerPlane);
//=============生成精灵end===============
}
public synchronized void start(){
init();
desertThread = new Thread(this);
desertThread.start();
}
public void init(){
desertCanvasRunning = false;//代表程序的状态
missionTwoGameOver = false;//代表游戏结束状态
isWin = false;//代表游戏结果状态
stringShowCounts = 0; //代表在刚开始很短的时间内可以显示字符
//玩家的
playerLifeCounts = LIFECOUNTS;
playerHP = 70;//玩家血
playerScores =0;//玩家分数
//敌人的
showBigMouthMonster = false;
showToLeftMonster = false;
bigMouthMonsterHP = 70;//
toLeftMonsterHP = 70;
shotDownCounts =0;
bigMouthMonster.setVisible(false);//大嘴怪boss1
toLeftMonster.setVisible(false); //向左走怪boss2
for(int i =0; i <AEROCRAFTCOUNTS; i++){
aeroCraft[i].setVisible(false); //飞行器
}
eyeballMonster.setVisible(false); //眼球怪
playerPlane.setVisible(true);
for (int i = 0; i < MISSILECOUNTS; i++) {
missile[i].setVisible(false);
break;
}
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i].setVisible(false);
break;
}
}
public void stop(){
desertThread = null;
System.out.println("game stoping >>>>");
}
public void run(){
Graphics g = getGraphics();
long startTime = 0, endTime = 0, difTime = 0;
int desertRate =30;//刷新速度
Thread currentThread = Thread.currentThread();
while(currentThread == desertThread){
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++;
//============ 大嘴怪==========
if(!showBigMouthMonster){
if(!bigMouthMonster.isVisible()){
addCharacter(bigMouthMonster);
}
showBigMouthMonster = true;
}
if(bigMouthMonster.isVisible()){
bigMouthMonster.move(1,0);
bigMouthMonster.nextFrame();
bigMouthMonster.checkBounds();
}
//==============向左走=============
if(!showToLeftMonster){
if(!toLeftMonster.isVisible()){
addCharacter(toLeftMonster);
}
showToLeftMonster = true;
}
if(toLeftMonster.isVisible()){
toLeftMonster.move(-1,0);
toLeftMonster.nextFrame();
toLeftMonster.checkBounds();
}
for(int i =0; i <AEROCRAFTCOUNTS; i++){
//显示飞行器
if(!aeroCraft[i].isVisible()){
if(random.nextInt()%40==0){
addCharacter(aeroCraft[i]);
}
}
}
for(int i =0; i <AEROCRAFTCOUNTS; i++){
//维护飞行器
if(aeroCraft[i].isVisible()){
aeroCraft[i].move(0,5);
aeroCraft[i].nextFrame();
aeroCraft[i].checkBounds();
}
}
//显示眼球怪
if(!eyeballMonster.isVisible()){
if(random.nextInt()%35 == 0){
addCharacter(eyeballMonster);
}
}
//维护眼球怪
if(eyeballMonster.isVisible()){
eyeballMonster.move(2,0);
eyeballMonster.nextFrame();
eyeballMonster.checkBounds();
}
//===================玩家=================
if(!playerPlane.isVisible()){
addCharacter(playerPlane);
} else if(playerPlane.isVisible()){
int keyStates = getKeyStates();
if((keyStates & LEFT_PRESSED)!= 0){
playerPlane.move(-4,0);
playerPlane.nextFrame();
} else if((keyStates & RIGHT_PRESSED)!= 0){
playerPlane.move(4,0);
playerPlane.nextFrame();
}
//返回菜单
else if((keyStates & UP_PRESSED) != 0){
System.out.println(" 2.game interrupted! back to menu!");
missionTwoGameOver = false;
desertThread = 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()) {
missile[i].setFrame(16);
missile[i].setPosition(playerPlane.getX() + 3, playerPlane
.getY() - 1);
missile[i].setVisible(true);
break;
}
}
}
}
playerPlane.checkBounds();
}
//===============随机增加导弹start==============
//增加大嘴怪的导弹
if(random.nextInt()% 25 == 0){
for(int i =0; i<MISSILECOUNTS; i++ ){
if(!missile[i].isVisible()){
addMissile(bigMouthMonster);
break;
}
}
}
//增加向左走的导弹
if(random.nextInt()% 30 == 0){
for(int i =0; i<MISSILECOUNTS; i++ ){
if(!missile[i].isVisible()){
addMissile(toLeftMonster);
break;
}
}
}
//增加眼球怪的导弹
if(random.nextInt()% 26 == 0){
for(int i =0; i<MISSILECOUNTS; i++ ){
if(eyeballMonster.isVisible()){
if(!missile[i].isVisible()){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -