📄 dragoncanvas.java
字号:
playerScores = playerScores + 5;
break;
}
}
// =================击中自杀机end=====================
// =================击中粘土怪start===================
for (int k = 0; k < CLAYERCOUNTS; k++) {
if (missile[i].collidesWith(clayer[k], false)) {
for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
if (!explosion[j].isVisible()) {
explosion[j].setFrame(0);
explosion[j].setPosition(
clayer[k].getX() + 10, clayer[k]
.getY() + 15);
explosion[j].setVisible(true);
break;
}
}
//隐藏碰撞后的精灵
missile[i].setVisible(false);
clayer[k].setVisible(false);
// 击中粘土怪后的奖励
playerScores = playerScores + 4;
break;
}
}
// =================击中粘土怪end=====================
}
// ==========================玩家发射的导弹end======================
// =======================dragon发射的炸弹start====================
if (missile[i].getFrame() == 4) {
missile[i].move(missileXspeed, missileYspeed);
if (missile[i].collidesWith(playerPlane, false)) {
// =================对爆炸的处理start=================
for (int j = 0; i < EXPLOSIONCOUNTS; i++) {
if (!explosion[j].isVisible()) {
explosion[j].setFrame(0);
explosion[j].setPosition(
playerPlane.getX() + 1, playerPlane
.getY());
explosion[j].setVisible(true);
break;
}
}
// =================对爆炸的处理end===================
missile[i].setVisible(false);
// =================更新信息start================
playerHP = playerHP - 5;
// ==================更新信息end=================
}
}
// =======================dragon发射的炸弹start====================
// ===================医药箱start=================================
if (missile[i].getFrame() == 9) {
missile[i].move(0, 1);
if (missile[i].collidesWith(playerPlane, true)) {
missile[i].setVisible(false);
playerHP = Math.min(playerHP + 10, 50);
}
if (missile[i].collidesWith(dragonMonster, true)) {
missile[i].setVisible(false);
bossHP = Math.min(bossHP + 5, 100);
}
}
// ===================医药箱end===================================
// =====================红心start========================
if (missile[i].getFrame() == 13) {
missile[i].move(0, 1);
if (missile[i].collidesWith(playerPlane, true)) {
missile[i].setVisible(false);
playerLifeCounts = Math.min(playerLifeCounts + 1, 9);// 游戏最高玩家人数为9个
}
}
// =====================红心end=========================
// ===================粘土怪的炸弹start============================
if (missile[i].getFrame() == 1) {
missile[i].move(0, 4);
if (missile[i].collidesWith(playerPlane, false)) {
missile[i].setVisible(false);
playerHP = playerHP - 3;
}
}
// ===================粘土怪的炸弹end==============================
}
checkBounds(missile[i], HIDE);
}
// =================对各种导弹的处理end=================
// ==============对游戏状态的维护start==================
if (playerHP <= 0) {
playerLifeCounts = playerLifeCounts - 1;
playerHP = 50;
}
if (playerLifeCounts == 0) {
playerHP = 0;
missionOneGameOver = true;
dragonThread = null;
isWin = false;
Dragon.MISSIONCOUNTS = Dragon.MENULIST;
Dragon.showMenu = true;
}
if (bossHP <= 0) {
missionOneGameOver = true;
dragonThread = null;
isWin = true;
Dragon.MISSIONCOUNTS = Dragon.MISSIONTWO;
// Dragon.desertCanvas = new DesertCanvas(Display.getDisplay(dragon));
}
// ==============对游戏状态的维护end====================
}
/**
* 边界检测
*
* @param sprite
* @param action
*/
private void checkBounds(Sprite sprite, int action) {
// 精灵折返
if (action == WRAP) {
// 当精灵穿出左边界时折返到右边界
if (sprite.getX() < -sprite.getWidth()) {
sprite.setPosition(getWidth(), sprite.getY());
}
// 当精灵穿出右边界时折返到左边界
else if (sprite.getX() > getWidth()) {
sprite.setPosition(-sprite.getWidth(), sprite.getY());
}
// 当精灵穿出上边界时折返到下边界
if (sprite.getY() < 20) {
sprite.setPosition(sprite.getX(), getHeight() - 40);
}
// 当精灵穿出下边界时折返到上边界
else if (sprite.getY() > getHeight() - 40) {
sprite.setPosition(sprite.getX(), 20);
}
}
// 精灵停止
if (action == STOP) {
// 当精灵移动到左边界时停止
if (sprite.getX() < 0) {
sprite.setPosition(0, sprite.getY());
sprite.move(0, 0);
}
// 当精灵移动到有边界时停止
if (sprite.getX() > (getWidth() - sprite.getWidth())) {
sprite.setPosition(getWidth() - sprite.getWidth(), sprite
.getY());
sprite.move(0, 0);
}
}
// 精灵隐藏
if (action == HIDE) {
// 当精灵移动到上边界
if (sprite.getY() < 20) {
sprite.setVisible(false);
}
// 当精灵移动到下边界
else if (sprite.getY() > getHeight() - 30) {
sprite.setVisible(false);
}
}
// 精灵反弹
if (action == BOUNCE) {
if (sprite.getX()-10 > getWidth() - sprite.getWidth()) {
clayerXspeed = -clayerXspeed;
} else if (sprite.getX() < 0) {
clayerXspeed = -clayerXspeed;
}
}
}
private void drawIt(Graphics g) {
g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
Font.SIZE_SMALL));
g.drawImage(backgroundImage, 0, 20, Graphics.LEFT | Graphics.TOP);
// ==============绘制顶部状态栏start================
g.setColor(0x999999);// 设定状态栏背景色是浅灰色
g.fillRect(0, 0, infoBarWidth, infoBarHeight);// 设定状态栏大小
g.drawImage(dragonIconImg, 0, 0, Graphics.LEFT | Graphics.TOP);// 绘制Boss头标
g.setColor(0);// 设定字体颜色
g.drawString("HP", 20, 4, Graphics.LEFT | Graphics.TOP);
g.drawRect(35, 4, 100, 8);
g.setColor(0xccff33);
if (bossHP < 40) {
g.setColor(0xff0000);
}
g.fillRect(35, 4, bossHP, 8);// 绘制boss血槽
g.setColor(0);
// ==============绘制顶部状态栏end==================
// ===============绘制底部状态栏start===============
g.setColor(0x999999);// 设定状态栏背景色是浅灰色
g.fillRect(0, getHeight() - 20, infoBarWidth, infoBarHeight);// 设定状态栏大小
g.drawImage(playerImg, 0, getHeight() - 20, Graphics.LEFT
| Graphics.TOP);// 绘制player头标
g.setColor(0);
g.drawString(Integer.toString(playerLifeCounts), 22, getHeight()-12 ,
Graphics.LEFT | Graphics.TOP);// 绘制生命数字符串
g.drawRect(30, getHeight() - 16, 50, 8);
g.setColor(0xccff00);
if (playerHP < 20) {
g.setColor(0xff0000);
}
g.fillRect(30, getHeight() -16, playerHP, 8);// 绘制player血槽
g.setColor(0);// 设定字体颜色
g.drawString("SCORES: ", 90, getHeight() - 16, Graphics.LEFT
| Graphics.TOP);// 绘制SCORES字符串
g.drawString(Integer.toString(playerScores), 140, getHeight() - 16,
Graphics.LEFT | Graphics.TOP);// 绘制SCORES
// ===============绘制底部状态栏end=================
layer.paint(g, 0, 0);//将所有的精灵绘制到屏幕当中
// ===========监测可见弹药数start=============
int missileCount = 0;
for (int i = 0; i < MISSILECOUNT; i++) {
if (missile[i].isVisible())
missileCount++;
}
g.setColor(0);
g.drawString(Integer.toString(missileCount), 0, 25, Graphics.LEFT
| Graphics.TOP);
// ===========监测可见弹药数end===============
// ===============显示游戏刚开始的提示语start===================
if (stringShowCounts <= 38) {// 因为rate=40所以38表示1.5s,50表示2s
g.setColor(0xff0000);
g.drawString("Mission One", getWidth() / 2 - 35,
getHeight() / 2 - 10, Graphics.LEFT | Graphics.TOP);
g.drawString("Fight in the plain!", getWidth() / 2 - 50,
getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
}
// ===============显示游戏刚开始的提示语end=====================
// =================绘制游戏结束字符串start=================
if (missionOneGameOver) {
g.setColor(0xff0000);
g.drawString("Mission One", getWidth() / 2 - 35,
getHeight() / 2 - 10, Graphics.LEFT | Graphics.TOP);
if (isWin) {
g.setColor(0xff0000);
g.drawString("You Win!", getWidth() / 2 - 25,
getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
g.drawString("Loading......",getWidth() / 2 - 28,
getHeight() / 2 + 22, Graphics.LEFT | Graphics.TOP);
System.out.println(playerScores);
System.out.println("win " + Dragon.MISSIONCOUNTS);
} else {
g.setColor(0xff0000);
g.drawString("You Lose!", getWidth() / 2 - 30,
getHeight() / 2 + 10, Graphics.LEFT | Graphics.TOP);
System.out.println(playerScores);
System.out.println("lose " + Dragon.MISSIONCOUNTS);
}
}
// =================绘制游戏结束字符串end===================
flushGraphics();// 这一句很关键,没有将不能实现动画!!!
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -