📄 dragoncanvas.java
字号:
package jsky;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.io.*;
import java.util.*;
public class DragonCanvas extends GameCanvas implements Runnable {
private Display display; // 定义一个显示引用
// 背景图像
Image backgroundImage;
// ==========游戏精灵变量start=========
// 存储动画帧的图像
Image img;
Image bulletsImg;
Image explosionImg;
Image playerPlaneImg;
Image clayerImg;
Image suicidorImg;
// 动画精灵对象
Sprite dragonMonster;// 龙
Sprite[] missile; // 子弹
Sprite[] explosion;// 爆炸
Sprite playerPlane; // 玩家飞机
Sprite[] suicidor;// 自杀机
Sprite[] clayer;// 粘土怪
// 图层管理器
private LayerManager layer;
// 定义导弹数量
static final int MISSILECOUNT = 20;
// 定义各种敌人数量
static final int CLAYERCOUNTS = 2;// 粘土怪
static int clayerXspeed = 2;
static int clayerYspeed = 0;
static final int SUICIDORCOUNTS = 4;// 自杀机
// 定义爆炸数量
static final int EXPLOSIONCOUNTS = 4;
// 定义精灵动作
static final int WRAP = 1;// 折返
static final int STOP = 2;// 停止
static final int HIDE = 3;// 隐藏
static final int BOUNCE = 4;// 反弹
// =========游戏精灵变量end ===========
int frameWidth = 50;// 每帧图像的宽度
int frameHeight = 25;// 每帧图像的高度
// 如果这里给的参数和图像的不一 会产生这样的错误
// java.lang.IllegalArgumentException
// ================游戏精灵速度变量start=============
int dragonXspeed = 0;// 龙精灵移动速度x方向
int dragonYspeed = 0;// 龙精灵移动速度y方向
int missileXspeed = 0;// 炸弹精灵速度x方向
int missileYspeed = 2;// 炸弹精灵速度y方向
int playerPlaneXspeed = 0;// 玩家精灵速度x方向
int playerPlaneYspeed = 0;// 玩家精灵速度y方向
static final int playerMissileXspeed = 0;// 玩家导弹速度x 方向
static final int playerMissileYspeed = -5;// 玩家导弹速度y 方向
// ===============游戏精灵速度变量end================
// =================需维护的信息start===============
public static Thread dragonThread = null;
public static boolean dragonCanvasRunning;// 代表程序的状态
public static boolean missionOneGameOver;// 代表游戏结束状态
boolean isWin;// 代表游戏结果状态
int stringShowCounts; // 代表在刚开始很短的时间内可以显示字符
// 玩家的
static final int LIFECOUNTS = 3;
int playerLifeCounts = LIFECOUNTS;// 玩家生命数
static int playerHP = 50;// 玩家血
static int playerScores = 0;// 玩家分数
static int levels = 1;// 玩家等级
// 敌人的
static int bossHP = 100;//
static int shotDownCounts = 0;
// 状态信息栏的
int infoBarWidth = getWidth();
static final int infoBarHeight = 20;
// =================需维护的信息end=================
// =============游戏图形变量start=========
Image playerImg;
Image dragonIconImg;
// =============游戏图形变量end===========
private Random random;
Dragon dragon;// midp的主类
GameMenuList menuList;
public Graphics g; //声明画笔
public DragonCanvas(Display d) {
super(true);
//dragon = new Dragon();// 生成Dragon的对象
// menuList = new GameMenuList(dragon);
display = d;
setFullScreenMode(true);
g = getGraphics();
/**
* 装载图片资源
*/
// =========载入图片资源start=============
try {
// system图库
playerImg = Image.createImage("/img/system/player.png");
bulletsImg = Image.createImage("/img/system/missiles.png");
explosionImg = Image.createImage("/img/system/explosion.png");
playerPlaneImg = Image
.createImage("/img/system/playerPlane/playerPlane1.png");
// missionOne图库
img = Image.createImage("/img/missionOne/dragon.png");
clayerImg = Image.createImage("/img/missionOne/clayer.png");
suicidorImg = Image.createImage("/img/missionOne/suicidor.png");
dragonIconImg = Image.createImage("/img/missionOne/dragonIcon.png");
// background图库
backgroundImage = Image.createImage("/img/background/plain.png");
} catch (IOException e) {
System.err.print(e.getMessage());
System.err.print(" error + @@@@@@@@@@@@");
}
// =========载入图片资源end=============
/**
* 生成精灵对象
*/
// =========生成精灵对象start============
layer = new LayerManager();// 生成图层管理器对象
// 生成龙精灵对象 数量1只
// =====================================
dragonMonster = new Sprite(img, frameWidth, frameHeight);
int x = (getWidth() - frameWidth) / 2;
int y = (getHeight() - frameHeight) / 2;
dragonMonster.setPosition(x, y);// 设置初始位置
layer.append(dragonMonster);
// =====================================
// =============生成2个粘土怪start=========
clayer = new Sprite[CLAYERCOUNTS];
for (int i = 0; i < CLAYERCOUNTS; i++) {
clayer[i] = new Sprite(clayerImg, 20, 21);
int[] sequence = { 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 3, 3,
2, 2, 1, 1 };
clayer[i].setFrameSequence(sequence);
clayer[i].setVisible(false);
layer.append(clayer[i]);
}
// =============生成2个粘土怪end===========
// ==============生成4个自杀机start========
suicidor = new Sprite[SUICIDORCOUNTS];
for (int i = 0; i < SUICIDORCOUNTS; i++) {
suicidor[i] = new Sprite(suicidorImg, 14, 18);
suicidor[i].setVisible(false);
layer.append(suicidor[i]);
}
// ==============生成4个自杀机end==========
// 生成20个导弹对象
// =====================================
missile = new Sprite[MISSILECOUNT];
for (int i = 0; i < MISSILECOUNT; i++) {
missile[i] = new Sprite(bulletsImg, 11, 11);
missile[i].setVisible(false);
layer.append(missile[i]);
}
// =====================================
// 生成爆炸精灵对象
// ======================================
explosion = new Sprite[EXPLOSIONCOUNTS];// 数组大小必须给定
for (int i = 0; i < EXPLOSIONCOUNTS; i++) {
explosion[i] = new Sprite(explosionImg, 20, 20);
explosion[i].setVisible(false);
layer.append(explosion[i]);
}
// ======================================
// 生成玩家精灵对象
// ======================================
playerPlane = new Sprite(playerPlaneImg, 17, 20);
playerPlane.setPosition((getWidth() - playerPlane.getWidth()) / 2,
getHeight() - 40);
layer.append(playerPlane);
// =====================================
// =========生成精灵对象end============
random = new Random();// 生成随机计数器
start();// 启动第一关游戏主线程
}
/**
* 启动线程
*
*/
public void start() {
init();
dragonThread = new Thread(this);
dragonThread.start();
}
public void init() {
dragonCanvasRunning = false; // 代表程序的状态
missionOneGameOver = false; // 代表游戏结束状态
isWin = false; // 代表游戏结果状态
stringShowCounts = 0; // 代表在刚开始很短的时间内可以显示字符
// 玩家的
playerLifeCounts = LIFECOUNTS; // 玩家生命数
playerHP = 50; // 玩家血
playerScores = 0; // 玩家分数
// 敌人的
bossHP = 100;//
shotDownCounts = 0;
// 状态信息栏的
dragonMonster.setVisible(true);// 龙
playerPlane.setVisible(true);
for (int i = 0; i < 4; i++) {
suicidor[i].setVisible(false);
clayer[i].setVisible(false);
missile[i].setVisible(false);
explosion[i].setVisible(false);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -