Java实现经典游戏飞机大战

网友投稿 255 2022-08-29


Java实现经典游戏飞机大战

目录前言主要设计功能截图代码实现启动类核心类核心算法总结

前言

《飞机大战-I》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺素爆棚,给你带来全方位震撼感受,体验飞行战斗的无限乐趣。

游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。

主要需求

玩家控制一台战斗机,以消灭所有的敌机为胜利,有些敌机会掉落装备,不可错过哦

主要设计

1、 用Swing库做可视化界面

2、鼠标控制战斗机移动

3、 用线程实现画面刷新。

4、用流实现音乐播放。

5、 创造一个飞机, 并且放在场景下方。

6、管理场景所有的飞机、子弹、道具移动

7、管理场景所有的子弹的发射

8、生成敌方飞机算法

9、分数计算算法

功能截图

游戏开始

战斗效果:

代码实现

启动类

public class Main {

public static void main(String[] args) {

// 创建窗口

JFrame frame = new JFrame("飞机大战");

// 添加 JPanel

Data.canvas = new Canvas(frame);

frame.setContentPane(Data.canvas);

// 初始化 Data

Data.init();

// 设置图标

frame.setIconImage(Load.image("ICON.png"));

// 设置窗口可见

frame.setVisible(true);

// 获取标题栏的高度和宽度

Data.TITLE_BOX_HEIGHT = frame.getInsets().top;

// 设置大小

frame.setSize(Data.WIDTH, Data.HEIGHT + Data.TITLE_BOX_HEIGHT);

// 窗口大小固定

frame.setResizable(false);

// 窗口居中显示

frame.setLocationRelativeTo(frame.getOwner());

// 窗口关闭时结束程序

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 播放背景音乐

Load.sound("background").loop(Clip.LOOP_CONTINUOUSLY);

}

}

核心类

public class Game implements Scenes {

// 玩家 BOSS

Aircraft player, boss;

// 敌人

List enemy;

// 玩家子弹 敌人子弹 道具列表

List bulletPlayer, bulletEnemy, bulletBuff;

// 玩家生命 生命 < 0 时死亡

// int life = Data.LIFE;

// 当前关卡 当前分数

int checkpoint = 1, fraction = 0;

// 飞机的飞行方向, 此处需要注意,监听按键来控制飞机移动时,不应该单纯的按键按下一次就执行一次,因为键盘按下不松开,飞机应该一直向某个方向移动,直到按键被放开

boolean left = false, right = false, down = false, up = false;

// fps, 记录当前帧数

int fps = 0;

// 提示的 x 坐标

int tipsX = -1000;

public Game() {

// 创造一个飞机, 并且放在场景下方, 玩家的角度属性不会使用

player = new Aircraft(Data.playerAircraftImage, Data.playerDeathImage, Data.SPEED, 0, Data.WIDTH / 2 - 40, Data.HEIGHT - 100);

// 设置飞机碰撞点,因为游戏采用的矩形碰撞检测,会出现很多误差,所以手动设置碰撞矩形,不采用图片的大小, 这个碰撞的坐标是相对于图片位置的相对坐标

player.upperLeft = new Point(15, 15);

player.lowerRight = new Point(75, 75);

// 初始化列表

bulletPlayer = new ArrayList<>();

bulletEnemy = new ArrayList<>();

bulletBuff = new ArrayList<>();

enemy = new ArrayList<>();

}

public void onKeyDown(int keyCode) {

if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)

up = true;

if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)

down = true;

if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)

left = true;

if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)

right = true;

}

public void onKeyUp(int keyCode) {

if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)

up = false;

if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)

down = false;

if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)

left = false;

if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)

right = false;

}

public void onMouse(int x, int y, int struts) {

}

public void draw(Graphics g) {

if (fps == 0) {

left = right = up = down = false;

}

// 绘制一次 fps + 1

fps++;

// 飞机移动

move();

// 子弹发射

attack();

// 敌方飞机生成

generate();

// 失效对象销毁

remove();

// 绘制背景

Data.background.show(g);

// 绘制我方飞机

if(player != null)

player.draw(g);

// 绘制BOSS

if (boss != null) boss.draw(g);

// 绘制敌方飞机

for (Aircraft a : enemy)

a.draw(g);

// 绘制我发子弹

for (Bullet b : bulletPlayer)

b.draw(g);

// 绘制敌方子弹

for (Bullet b : bulletEnemy)

b.draw(g);

// 绘制道具

for (Bullet d : bulletBuff)

d.draw(g);

g.drawString("分数 : " + fraction, 200, 200);

if (boss != null) {

g.drawImage(Data.hpBox, 10, -10, null);

g.setColor(Color.orange);

g.fillRect(106, -2, (int) (300 * ((boss.hp * 1.0) / 300)), 15);

}

// 绘制boss出现的图片

if (tipsX > -900 && tipsX < 900) {

g.drawImage(Data.tips, tipsX, 200, null);

}

}

// 管理场景所有的飞机、子弹、道具移动

void move() {

if (player != null) {

// 这里这个坐标,是为了让敌人发射子弹时定位用的

Data.x = player.x;

Data.y = player.y;

// 飞机向上移动, 这里还限制了飞机的范围,不让其飞出屏幕外

if (up) player.move(0, -player.speed);

if (player.y < 0) player.y = 0;

// 飞机向下移动

if (down) player.move(0, player.speed);

if (player.y > Data.HEIGHT - player.height) player.y = Data.HEIGHT - player.height;

// 飞机向左移动

if (left) player.move(-player.speed, 0);

if (player.x < 0) player.x = 0;

// 飞机向右移动

if (right) player.move(player.speed, 0);

if (player.x > Data.WIDTH - player.width) player.x = Data.WIDTH - player.width;

}

// boss 移动

if (boss != null) boss.move();

// 我方子弹的移动

for (Bullet bullet : bulletPlayer)

bullet.move();

// 敌方子弹的移动

for (Bullet bullet : bulletEnemy)

bullet.move();

// 道具的移动

for (Bullet bullet : bulletBuff)

bullet.move();

// 地方飞机的移动,包括BOSS

for (Aircraft air : enemy)

air.move();

// BUFF 移动

for (Bullet b : bulletBuff)

b.move();

}

void remove() {

Random random = new Random();

// 子弹销毁

for (int i = 0; i < bulletEnemy.size(); ) {

if (bulletEnemy.get(i).isRemove()) {

bulletEnemy.remove(i);

} else i++;

}

for (int i = 0; i < bulletPlayer.size(); ) {

if (bulletPlayer.get(i).isRemove()) {

bulletPlayer.remove(i);

} else i++;

}

for (int i = 0; i < bulletBuff.size(); ) {

if (bulletBuff.get(i).isRemove()) {

bulletBuff.remove(i);

} else i++;

}

// 敌人销毁

for (int i = 0; i < enemy.size(); ) {

if (enemy.get(i).isRemove()) {

// 生成道具

if (random.nextInt(100) > 80) {

if (random.nextInt(100) > 60)

bulletBuff.add(new Buff(Buff.BUFF2, enemy.get(i).x, enemy.get(i).y));

else

bulletBuff.add(new Buff(Buff.BUFF1, enemy.get(i).x, enemy.get(i).y));

}

Load.playSound("死亡");

// 击杀一个敌人增加 1 分,不整这么多花里胡哨的

fraction += 10;

if (fraction / 100 == checkpoint) {

boss = new Boss2();

checkpoint += 1;

Load.playSound("警告");

new Thread(() -> {

tipsX = -Data.WIDTH;

try {

for (int n = 0; n < Data.WIDTH / 2; n++) {

tipsX += 2;

Thread.sleep(4);

}

Thread.sleep(2000);

for (int n = 0; n < Data.WIDTH / 4; n++) {

tipsX += 4;

Thread.sleep(4);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

tipsX = -1000;

}).start();

}

enemy.remove(i);

} else i++;

}

// boss销毁

if (boss != null) {

// boss 死亡掉落4个buff

if (boss.isRemove()) {

bulletBuff.add(new Buff(Buff.BUFF2, boss.x + boss.width / 2, boss.y + boss.height / 2));

bulletBuff.add(new Buff(Buff.BUFF1, boss.x + boss.width / 2, boss.y + boss.height / 2));

bulletBuff.add(new Buff(Buff.BUFF2, boss.x + boss.width / 2, boss.y + boss.height / 2));

bulletBuff.add(new Buff(Buff.BUFF1, boss.x + boss.width / 2, boss.y + boss.height / 2));

boss = null;

}

}

boolean isPlay = false;

// 检测我方子弹碰撞

for (int i = 0; i < bulletPlayer.size(); i++) {

Point point = bulletPlayer.get(i).getPoint();

if (bulletPlayer.get(i).buffetIndex > 1) continue;

// 检测子弹是否击中boss

if (boss != null && boss.hp > 0) {

Point rect[] = boss.getCollisionRect();

if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {

boss.hp -= bulletPlayer.get(i).struts;

bulletPlayer.get(i).buffetIndex = 1;

bulletPlayer.get(i).speed = 5;

if (boss.hp <= 0) {

boss.imgIndex = 10;

}

if (!isPlay) {

isPlay = true;

Load.playSound("击中");

}

continue;

}

}

for (Aircraft a : enemy) {

Point rect[] = a.getCollisionRect();

if (a.hp < 0) continue;

if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {

if (!isPlay) {

isPlay = true;

Load.playSound("击中");

}

a.hp -= bulletPlayer.get(i).struts;

bulletPlayer.get(i).buffetIndex = 1;

bulletPlayer.get(i).speed = 5;

if (a.hp < 0) {

a.kill();;

a.speed = 1;

}

break;

}

}

}

Point rect[], point;

// 检测敌方子弹碰撞

if(player != null) {

rect = player.getCollisionRect();

if (player != null && player.hp > 0) {

for (Bullet b : bulletEnemy) {

point = b.getPoint();

if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {

player.hp -= b.struts;

player.kill();

death();

}

}

}

}

// 吃BUFF

if (player != null && player.hp > 0) {

rect = player.getCollisionRect();

for (Bullet buff : bulletBuff) {

Point p = buff.getPoint();

if (Rect.isInternal(p.x, p.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {

buff.x = -100;

if (buff.struts == Buff.BUFF1)

player.setBuff(16, 0);

else

player.setBuff(0, 16);

}

}

}

// 飞机之间的碰撞

if(player != null) {

for (Aircraft air : enemy) {

int x = air.x + air.width / 2, y = air.y + air.height / 2;

if(Rect.isInternal(x, y, player.x, player.y, player.width, player.height)) {

player.kill();

air.kill();

Load.playSound("失败");

death();

}

}

}

}

// 管理场景所有的子弹的发射

void attack() {

// 我方飞机3帧发射一次

if (player != null && player.hp > 0) {

if (!player.isRemove() && fps % 3 == 0)

bulletPlayer.addAll(Arrays.asList(player.attack()));

}

// 敌方飞机发射子弹

if (fps % 5 == 0)

for (Aircraft em : enemy)

bulletEnemy.addAll(Arrays.asList(em.attack()));

// boss发射子弹

if (boss != null) bulletEnemy.addAll(Arrays.asList(boss.attack()));

}

// 生成敌方飞机

void generate() {

// BOSS 存在时不生成小飞机

if (boss != null) return;

if (fps % 100 != 0 && fps >= 1) return;

Random random = new Random();

int rn = random.nextInt(100) + 1;

int[] hp = {(fps / 2000) + 1 * checkpoint, (fps / 2000) + 2 * checkpoint, (fps / 2000) + 5 * checkpoint, (fps / 2000) + 8 * checkpoint, (fps / 2000) + 11 * checkpoint};

switch (rn / 10) {

case 1: {

enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemhttp://yDeathImages[4], 2, 90, random.nextInt(300) + 100, -150, hp[4]));

return;

}

case 2: {

enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 100, -150, hp[3]));

enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 380, -150, hp[3]));

return;

}

case 3: {

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 10, -150, hp[2]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 90, 240, -150, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 430 + 100, -150, hp[2]));

return;

}

case 4: {

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 0, -150, hp[2]));

enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 130, -150, hp[3]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 90, 300, -150, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 90, 450, -150, hp[1]));

return;

}

case 5: {

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 110, 400, random.nextInt(100) - 200, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 480, random.nextInt(100) - 200, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 560, random.nextInt(100) - 200, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 640, random.nextInt(100) - 200, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 110, 720, random.nextInt(100) - 200, hp[0]));

return;

}

case 6: {

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, -440, random.nextInt(100) - 200, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -320, random.nextInt(100) - 200, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -240, random.nextInt(100) - 200, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -170, random.nextInt(100) - 200, hp[0]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, -100, random.nextInt(100) - 200, hp[1]));

return;

}

case 7: {

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, 30, random.nextInt(100) - 200, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 70, 100, random.nextInt(100) - 200, hp[2]));

enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 70, 200, random.nextInt(100) - 200, hp[3]));

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 70, 300, random.nextInt(100) - 200, hp[2]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, 430, random.nextInt(100) - 200, hp[1]));

return;

}

case 8: {

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 30, -100, -150, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 90, 240, -150, hp[1]));

enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 120, 615 + 100, -150, hp[1]));

return;

}

case 9: {

enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemyDeathImages[4], 2, 90, 100 + random.nextInt(100), -150, hp[4]));

enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemyDeathImages[4], 2, 90, 415 - random.nextInt(100), -150, hp[4]));

return;

}

case 10: {

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 120 + random.nextInt(100), -150, hp[2]));

enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 395 - random.nextInt(100), -150, hp[2]));

}

}

}

void death() {

new Thread(() ->{

try {

player = null;

Thread.sleep(3000);

Data.canvas.switchScenes("Home");

} catch (InterruptedException e) {

e.printStackTrace();

}

}).start();

}

}

核心算法

@SuppressWarnings("serial")

public class GameMenu extends JFrame {

GameMenu thisMenu;

private JPanel contentPane;

TestWindowBuilder fatherMenu;

boolean isCheating;

CMusic battleBGM,questCompleteBGM;

int pressingW;

int pressingS;

int pressingA;

int pressingD;

int pressingJ;

int pressingK;

int playingSave;

int playingProfessionID;

int g_int1;

Role playingRole;

double playerX;//0-734

double playerY;//0-312

int rotationSpeed=15;//旋转速度

int movementSpeed=3;//移动速度

int NormalSpeed=3;

int attackSpeed=3;//攻击速度

int activeCounter;

int attackCounter;

int defenceCounter=0;

int perfectDefenceTime=0;//完美格挡剩余时间(在敌人发动攻击前0.1秒启动的格挡能让格挡所需体力消耗减少到原来的十分之一)

int defenceCooldown=0;//格挡冷却 这样阻止了玩家疯狂地启动/停止格挡

int playerWidth=50;

int playerHeight=50;

int gamePhaseTimeCounter=0;

int gamePhaseTimeCounter2=0;

int endPhase=6*4;//游戏通关的阶段

/*第一关 0

* 第二关 6

* */

int gamePhase=0;//游戏开始时的阶段(正常玩家从第一关开始打,阶段应当从0开始)

String humanIconContorler;

JPanel viewMap;

//玩家有两个Label 一个在boss上方 一个在boss下方

int usingPlayerLabel=0;

JLabel[] playerLabel=new JLabel[2];

JLabel lblNewLabel_6;

JLabel lblNewLabel_7;

JLabel[] GiantBackGround=new JLabel[400];

JLabel bossLabel;

JLabel lblNewLabel_2;

JLabel lblNewLabel_3;

JLabel lblNewLabel_2B;

JLabel lblNewLabel_3B;

JLabel MobHead;

JLabel MobName;

JLabel MobHPBar;

JLabel MobHPText;

JLabel TitleLabelT;

JLabel SubTitleLabelT;

JLabel TitleLabel;

JLabel SubTitleLabel;

JPanel Titles;

JLabel placeNameLabel;

JLabel groundArrayLabel;

JLabel placeChangeBlack;//换场地时的黑幕

JLabel placeChangeBlack_1;//换场地时的黑幕(用于属性条)

int maxProCount=5000;

JLabel[] proLabel=new JLabel[maxProCount];

boolean[] proIsUsed=new boolean[maxProCount];

proLink proHead=new proLink();

int existProCount;

int maxParCount=5000;

JLabel[] parLabel=new JLabel[maxParCount];

boolean[] parIsUsed=new boolean[maxParCount];

parLink parHead=new parLink();

int existParCount;

int existPro=0;

int proTeamPointer=0;//队列指针 0-499

int existPar=0;

int parTeamPointer=0;

JPanel panel;

Mob boss;

int allPhaseCount=1;

int gameTime=0;

Map map;

/**

* Create the frame.

*/

public GameMenu(TestWindowBuilder fatherMenu,boolean isCheating,int professionID,int partID,int playingSave)

{

this.setTitle("CARROT MAN II");

this.setIconImage(new ImageIcon("resource/down4.png").getImage());

for(int i=0;i

proIsUsed[i]=false;

for(int i=0;i

parIsUsed[i]=false;

playingProfessionID=professionID;

this.playingSave=playingSave;

gamePhase=(partID-1)*6;

this.fatherMenu=fatherMenu;

this.isCheating=isCheating;

//this.isCheating=true;//测试用

g_int1=0;

playerX=50;

playerY=200;

thisMenu=this;

activeCounter=0;

attackCounter=0;

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(fatherMenu.getBounds());

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

contentPane.setLayout(null);

//转场黑幕 第100层

placeChangeBlack=new JLabel("");

placeChangeBlack.setIcon(new ImageIcon("resource/black.png"));

placeChangeBlack.setVisible(true);

placeChangeBlack_1=new JLabel("");

placeChangeBlack_1.setIcon(new ImageIcon("resource/black.png"));

placeChangeBlack_1.setVisible(true);

placeChangeBlack.setBounds(0, 0, 784, 362);

placeChangeBlack_1.setBounds(0, 0, 784, 362);

//contentPane.add(placeChangeBlack);

JPanel panel_1 = new JPanel();

panel_1.setBounds(0, 0, 784, 50);

contentPane.add(panel_1);

panel_1.setLayout(null);

panel_1.add(placeChangeBlack_1);

JLabel lblNewLabel = new JLabel("");//头像

lblNewLabel.setBounds(0, 0, 50, 50);

lblNewLabel.setIcon(new ImageIcon("resource/HPBarHead.png"));

panel_1.add(lblNewLabel);

lblNewLabel_2B = new JLabel("");//血量字

lblNewLabel_2B.setForeground(Color.WHITE);

lblNewLabel_2B.setHorizontalAlignment(SwingConstants.CENTER);

lblNewLabel_2B.setBounds(50, 0, 200, 25);

panel_1.add(lblNewLabel_2B);

lblNewLabel_3B = new JLabel("");//体力字

lblNewLabel_3B.setForeground(Color.WHITE);

lblNewLabel_3B.setHorizontalAlignment(SwingConstants.CENTER);

lblNewLabel_3B.setBounds(50, 25, 200, 25);

panel_1.add(lblNewLabel_3B);

lblNewLabel_2 = new JLabel("");//血条

lblNewLabel_2.setBounds(50, 0, 200, 25);

lblNewLabel_2.setIcon(new ImageIcon("resource/RedBar.png"));

panel_1.add(lblNewLabel_2);

lblNewLabel_3 = new JLabel("");//体力条

lblNewLabel_3.setBounds(50, 25, 200, 25);

lblNewLabel_3.setIcon(new ImageIcon("resource/GreenBar.png"));

panel_1.add(lblNewLabel_3);

JLabel lblNewLabel_1 = new JLabel("");//血条体力条背景

lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);

lblNewLabel_1.setBounds(50, 0, 200, 50);

lblNewLabel_1.setIcon(new ImageIcon("resource/HPBarBG.png"));

panel_1.add(lblNewLabel_1);

JLabel lblNewLabel_4 = new JLabel("J");

lblNewLabel_4.setForeground(Color.GRAY);

lblNewLabel_4.setFont(new Font("黑体", Font.BOLD, 30));

lblNewLabel_4.setHorizontalAlignment(SwingConstants.CENTER);

lblNewLabel_4.setBounds(250, 0, 50, 50);

panel_1.add(lblNewLabel_4);

JLabel lblNewLabel_5 = new JLabel("");

lblNewLabel_5.setFont(new Font("宋体", Font.PLAIN, 20));

lblNewLabel_5.setHorizontalAlignment(SwingConstants.CENTER);

lblNewLabel_5.setBounds(250, 0, 50, 50);

lblNewLabel_5.setIcon(new ImageIcon("resource/skillJ.png"));

panel_1.add(lblNewLabel_5);

JLabel skillKLabel = new JLabel("K");

skillKLabel.setForeground(Color.GRAY);

skillKLabel.setFont(new Font("黑体", Font.BOLD, 30));

skillKLabel.setHorizontalAlignment(SwingConstants.CENTER);

skillKLabel.setBounds(300, 0, 50, 50);

panel_1.add(skillKLabel);

JLabel skillKLabel2 = new JLabel("");

skillKLabel2.setFont(new Font("宋体", Font.PLAIN, 20));

skillKLabel2.setHorizontalAlignment(SwingConstants.CENTER);

skillKLabel2.setBounds(300, 0, 50, 50);

skillKLabel2.setIcon(new ImageIcon("resource/skillK.png"));

panel_1.add(skillKLabel2);

placeNameLabel = new JLabel("");

placeNameLabel.setFont(new Font("宋体", Font.PLAIN, 30));

placeNameLabel.setHorizontalAlignment(SwingConstants.CENTER);

placeNameLabel.setBounds(350, 0, 200, 50);

panel_1.add(placeNameLabel);

JLabel placeNameLabel2 = new JLabel("");

placeNameLabel2.setHorizontalAlignment(SwingConstants.CENTER);

placeNameLabel2.setBounds(350, 0, 200, 50);

placeNameLabel2.setIcon(new ImageIcon("resource/placeNameBackGround.png"));

panel_1.add(placeNameLabel2);

MobHead = new JLabel("");

MobHead.setHorizontalAlignment(SwingConstants.CENTER);

MobHead.setBounds(550, 0, 50, 50);

MobHead.setIcon(new ImageIcon("resource/MobHead_0.png"));

panel_1.add(MobHead);

MobName = new JLabel("");

MobName.setHorizontalAlignment(SwingConstants.CENTER);

MobName.setBounds(600, 0, 184, 25);

panel_1.add(MobName);

MobHPText = new JLabel("");

MobHPText.setForeground(Color.WHITE);

MobHPText.setHorizontalAlignment(SwingConstants.CENTER);

MobHPText.setBounds(600, 25, 184, 25);

panel_1.add(MobHPText);

MobHPBar = new JLabel("");

MobHPBar.setHorizontalAlignment(SwingConstants.CENTER);

MobHPBar.setBounds(600, 25, 184, 25);

MobHPBar.setIcon(new ImageIcon("resource/RedBar.png"));

panel_1.add(MobHPBar);

JLabel MobNameBG = new JLabel("");

MobNameBG.setHorizontalAlignment(SwingConstants.CENTER);

MobNameBG.setBounds(600, 0, 184, 50);

MobNameBG.setIcon(new ImageIcon("resource/MobNameBG.png"));

panel_1.add(MobNameBG);

panel = new JPanel();

panel.setBounds(0, 50, 784, 362);

contentPane.add(panel);

viewMap=panel;

panel.setLayout(null);

panel.add(placeChangeBlack);

lblNewLabel_7 = new JLabel("");//玩家tryingFace指示器(暂时停用)

lblNewLabel_7.setBounds((int)playerX, (int)playerY, 5, 5);

lblNewLabel_7.setIcon(new ImageIcon("resource/moveDeraction2.png"));

lblNewLabel_7.setVisible(false);

panel.add(lblNewLabel_7);

//第99层

//标题

TitleLabelT = new JLabel("");

TitleLabelT.setFont(new Font("黑体", Font.PLAIN, 45));

TitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);

TitleLabelT.setBounds(100, 50, 584, 50);

TitleLabelT.setVisible(true);

panel.add(TitleLabelT);

//副标题

SubTitleLabelT = new JLabel("");

SubTitleLabelT.setFont(new Font("黑体", Font.PLAIN, 25));

SubTitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);

SubTitleLabelT.setBounds(100, 100, 584, 50);

SubTitleLabelT.setVisible(true);

panel.add(SubTitleLabelT);

//预先创建粒子效果的Label,第6层

for(int i=0;i

{

parLabel[i]=new JLabel("");

panel.add(parLabel[i]);

}

//boss上方的玩家,第5层

playerLabel[1]=new JLabel("");

playerLabel[1].setHorizontalAlignment(SwingConstants.CENTER);

playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);

playerLabel[1].setIcon(new ImageIcon("resource/HumanRight_0.png"));

playerLabel[1].setVisible(false);

panel.add(playerLabel[1]);

//bossLabel,第4.5层

bossLabel = new JLabel("");

panel.add(bossLabel);

//boss下方的玩家,第4层

playerLabel[0]=new JLabel("");

playerLabel[0].setHorizontalAlignment(SwingConstants.CENTER);

playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);

playerLabel[0].setIcon(new ImageIcon("resource/HumanRight_0.png"));

playerLabel[0].setVisible(true);

panel.add(playerLabel[0]);

//玩家面向方向指示器,第3层

lblNewLabel_6 = new JLabel("");

lblNewLabel_6.setBounds((int)playerX, (int)playerY, 5, 5);

lblNewLabel_6.setIcon(new ImageIcon("resource/moveDeraction.png"));

panel.add(lblNewLabel_6);

//预先创建发射物的Label,第2层

for(int i=0;i

{

proLabel[i]=new JLabel("");

panel.add(proLabel[i]);

}

//创建地面箭头,第1.5层

groundArrayLabel=new JLabel("");

groundArrayLabel.setBounds(709,156, 50, 50);

groundArrayLabel.setIcon(new ImageIcon("resource/groundArray.png"));

groundArrayLabel.setVisible(false);

panel.add(groundArrayLabel);

//创建地面Label,第1层

for(int i=0;i<400;++i)

{

GiantBackGround[i]=new JLabel("");

GiantBackGround[i].setVisible(true);

panel.add(GiantBackGround[i]);

}

playingRole=new Role(professionID,thisMenu);

KeyLininter kl=new KeyLininter(thisMenu);

this.addKeyListener(kl);

map=new Map(thisMenu);

map.start();

}

//发射物相关

public int addProjectile(Projectile pro)

{

existProCount=proHead.getLength();

if(existProCount

{

proHead.insert(new proLink(pro));

int tempFinder=0;

for(int i=0;i

{

if(proIsUsed[i]==false)

{

proIsUsed[i]=true;

tempFinder=i;

break;

}

}

return tempFinder;

}

return -1;

}

public void removeProjectile(int id)

{

proLabel[id].setVisible(false);

proIsUsed[id]=false;

}

public void allProjectilesFly()

{

proLink tempNode=proHead;

while(tempNode.next!=null)

{

tempNode=tempNode.next;

tempNode.data.doFly();

}

}

//发射物相关结束

//粒子效果相关

public int addParticle(particle par)

{

existParCount=parHead.getLength();

if(existParCount

{

parHead.insert(new parLink(par));

int tempFinder=0;

for(int i=0;i

{

if(parIsUsed[i]==false)

{

parIsUsed[i]=true;

tempFinder=i;

break;

}

}

return tempFinder;

}

return -1;

}

public void removeParticle(int id)

{

parLabel[id].setVisible(false);

parIsUsed[id]=false;

}

public void allParticlesFly()

{

parLink tempNode=parHead;

while(tempNode.next!=null)

{

tempNode=tempNode.next;

tempNode.data.doFly();

}

}

public void checkPlayerLocation()//检测玩家位置 如果超出地图 则拉回地图

{

if(playerX

playerX=playerWidth/2;

if(playerX>784-playerWidth/2)

playerX=784-playerWidth/2;

if(playerY

playerY=playerHeight/2;

if(playerY>362-playerHeight/2)

playerY=362-playerHeight/2;

}

@SuppressWarnings("unused")

public void saveData(int part)

{

if(Integer.parseInt(fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1])

{

String[] temp= {

fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[0],

fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1]

};

fatherMenu.saveSelectMenu.savedData[playingSave]=""+playingProfessionID+" "+part;

fatherMenu.saveSelectMenu.saveSaves();

}

}

@SuppressWarnings({ "deprecation" })

public void modTick()//每秒执行50次

{

if(attackCounter==0&&defenceCounter==0)

playingRole.regenerate();

if(playingRole.HP>0)

{

//刷新体力条

lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);

lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);

//刷新血条

lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);

lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);

}

else if(gamePhase!=-1)

{

boss.target=null;

gamePhaseTimeCounter=0;

gamePhase=-1;

movementSpeed=0;

TitleLabelT.setText("YOU DIED");

TitleLabelT.setVisible(true);

playerLabel[usingPlayerLabel].setVisible(false);

lblNewLabel_6.setVisible(false);

lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);

lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);

lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);

lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);

}

++gameTime;

allProjectilesFly();

allParticlesFly();

if(gamePhase==0)

{

if(gamePhaseTimeCounter<50)

gamePhaseTimeCounter=50;

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter==51)

{

System.out.println("启动控制台...");

movementSpeed=0;

placeChangeBlack.setBounds(0, 0, 784, 362);

placeChangeBlack_1.setBounds(0, 0, 784, 362);

placeChangeBlack.setVisible(true);

placeChangeBlack_1.setVisible(true);

TitleLabelT.setVisible(false);

SubTitleLabelT.setVisible(false);

groundArrayLabel.setVisible(false);

for(int i=0;i<128;++i)//初始化第一关地面

{

String backGroundContorler="resource/ground";

GiantBackGround[i].setBounds(50*(i%16),50*(int)(i/16), 50, 50);

if(Math.random()<0.9)

backGroundContorler=backGroundContorler+"1.png";

else

backGroundContorler=backGroundContorler+"2.png";

GiantBackGround[i].setIcon(new ImageIcon(backGroundContorler));

}

playerX=50;

playerY=200;

placeNameLabel.setText(fatherMenu.textLib.textData[13]);

TitleLabelT.setText(fatherMenu.textLib.textData[13]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[37]);

SubTitleLabelT.setVisible(true);

}

if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)

{

placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

}

if(gamePhaseTimeCounter==151)

{

startNewBattleBGM(1);

placeChangeBlack.setVisible(false);

placeChangeBlack_1.setVisible(false);

gamePhaseTimeCounter=0;

++gamePhase;

}

}

if(gamePhase%6==1)

{

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter>=200)

{

++gamePhase;

TitleLabelT.setVisible(false);

SubTitleLabelT.setVisible(false);

movementSpeed=NormalSpeed;

}

}

if(gamePhase==2)

{

gamePhaseTimeCounter=0;

boss=new Mob(1,bossLabel,thisMenu);

boss.reflash();

bossLabel.setVisible(true);

++gamePhase;

}

if(gamePhase==3)

{

if(boss.HP>0)

boss.reflash();

else

{

bossLabel.setVisible(false);

MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);

MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);

++gamePhase;

gamePhaseTimeCounter=0;

TitleLabelT.setText(fatherMenu.textLib.textData[38]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);

SubTitleLabelT.setVisible(true);

saveData(2);

startQuestCompleteBGM();

endBattleBGM();

}

}

if(gamePhase%6==4)

{

playingRole.percentReHP(0.005);

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter>200)

{

gamePhaseTimeCounter=0;

++gamePhase;

TitleLabelT.setText(fatherMenu.textLib.textData[40]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[41]);

SubTitleLabelT.setVisible(true);

gamePhaseTimeCounter2=0;

}

}

if(gamePhase%6==5)

{

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter2==0)

{

if(gamePhaseTimeCounter>50)

{

groundArrayLabel.setVisible(true);

if(playerX>709&&playerX<759&&playerY>156&&playerY<206)//进入箭头

{

gamePhaseTimeCounter=0;

gamePhaseTimeCounter2=1;

movementSpeed=0;

placeChangeBlack.setBounds(-784,0,784,362);

placeChangeBlack.setVisible(true);

placeChangeBlack_1.setBounds(-784,0,784,362);

placeChangeBlack_1.setVisible(true);

}

}

}

if(gamePhaseTimeCounter2==1)

{

if(gamePhaseTimeCounter>=0&&gamePhaseTimeCounter<=50)

{

placeChangeBlack.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);

placeChangeBlack_1.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);

}

if(gamePhaseTimeCounter==51)

{

++gamePhase;

gamePhaseTimeCounter=0;

}

}

}

if(gamePhase==6)

{

movementSpeed=0;

if(gamePhaseTimeCounter<50)

gamePhaseTimeCounter=50;

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter==51)

{

placeChangeBlack.setBounds(0, 0, 784, 362);

placeChangeBlack.setVisible(true);

placeChangeBlack_1.setBounds(0, 0, 784, 362);

placeChangeBlack_1.setVisible(true);

TitleLabelT.setVisible(false);

SubTitleLabelT.setVisible(false);

groundArrayLabel.setVisible(false);

for(int i=0;i<325;++i)

{

GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);

GiantBackGround[i].setIcon(new ImageIcon("resource/ground6.png"));

}

playerX=50;

playerY=200;

placeNameLabel.setText(fatherMenu.textLib.textData[14]);

TitleLabelT.setText(fatherMenu.textLib.textData[14]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[42]);

SubTitleLabelT.setVisible(true);

}

if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)

{

placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

}

if(gamePhaseTimeCounter==151)

{

startNewBattleBGM(2);

placeChangeBlack.setVisible(false);

placeChangeBlack_1.setVisible(false);

gamePhaseTimeCounter=0;

++gamePhase;

}

}

if(gamePhase==8)

{

gamePhaseTimeCounter=0;

boss=new Mob(2,bossLabel,thisMenu);

bossLabel.setBounds(375, 175, 100, 100);

boss.reflash();

bossLabel.setVisible(true);

++gamePhase;

}

if(gamePhase==9)

{

if(boss.HP>0)

boss.reflash();

else

{

bossLabel.setVisible(false);

MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);

MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);

++gamePhase;

gamePhaseTimeCounter=0;

TitleLabelT.setText(fatherMenu.textLib.textData[43]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);

SubTitleLabelT.setVisible(true);

saveData(3);

startQuestCompleteBGM();

endBattleBGM();

}

}

if(gamePhase==12)

{

movementSpeed=0;

if(gamePhaseTimeCounter<50)

gamePhaseTimeCounter=50;

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter==51)

{

placeChangeBlack.setBounds(0, 0, 784, 362);

placeChangeBlack.setVisible(true);

placeChangeBlack_1.setBounds(0, 0, 784, 362);

placeChangeBlack_1.setVisible(true);

TitleLabelT.setVisible(false);

SubTitleLabelT.setVisible(false);

groundArrayLabel.setVisible(false);

for(int i=0;i<325;++i)

{

GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);

GiantBackGround[i].setIcon(new ImageIcon("resource/ground7.png"));

}

playerX=50;

playerY=200;

placeNameLabel.setText(fatherMenu.textLib.textData[15]);

TitleLabelT.setText(fatherMenu.textLib.textData[15]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[44]);

SubTitleLabelT.setVisible(true);

}

if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)

{

placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

}

if(gamePhaseTimeCounter==151)

{

startNewBattleBGM(3);

placeChangeBlack.setVisible(false);

placeChangeBlack_1.setVisible(false);

gamePhaseTimeCounter=0;

++gamePhase;

}

}

if(gamePhase==14)

{

gamePhaseTimeCounter=0;

boss=new Mob(3,bossLabel,thisMenu);

bossLabel.setBounds(375, 175, 100, 100);

boss.reflash();

bossLabel.setVisible(true);

++gamePhase;

}

if(gamePhase==15)

{

if(boss.HP>0)

boss.reflash();

else

{

bossLabel.setVisible(false);

MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);

MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);

++gamePhase;

gamePhaseTimeCounter=0;

TitleLabelT.setText(fatherMenu.textLib.textData[45]);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);

SubTitleLabelT.setVisible(true);

saveData(4);

startQuestCompleteBGM();

endBattleBGM();

}

}

if(gamePhase==18)

{

movementSpeed=0;

if(gamePhaseTimeCounter<50)

gamePhaseTimeCounter=50;

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter==51)

{

placeChangeBlack.setBounds(0, 0, 784, 362);

placeChangeBlack.setVisible(true);

placeChangeBlack_1.setBounds(0, 0, 784, 362);

placeChangeBlack_1.setVisible(true);

TitleLabelT.setVisible(false);

SubTitleLabelT.setVisible(false);

groundArrayLabel.setVisible(false);

//需要修改开始

for(int i=0;i<325;++i)

{

GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);

GiantBackGround[i].setIcon(new ImageIcon("resource/ground8.png"));

}

//需要修改结束

playerX=50;

playerY=200;

//需要修改开始

placeNameLabel.setText(fatherMenu.textLib.textData[70]);

TitleLabelT.setText(fatherMenu.textLib.textData[70]);

TitleLabelT.setForeground(Color.LIGHT_GRAY);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[71]);

SubTitleLabelT.setForeground(Color.LIGHT_GRAY);

//需要修改结束

SubTitleLabelT.setVisible(true);

}

if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150)

{

placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);

}

if(gamePhaseTimeCounter==151)

{

startNewBattleBGM(4);//需要修改

placeChangeBlack.setVisible(false);

placeChangeBlack_1.setVisible(false);

gamePhaseTimeCounter=0;

++gamePhase;

}

}

if(gamePhase==20)

{

gamePhaseTimeCounter=0;

boss=new Mob(4,bossLabel,thisMenu);//需要修改

bossLabel.setBounds(375, 175, 100, 100);//需要修改

boss.reflash();

bossLabel.setVisible(true);

++gamePhase;

}

if(gamePhase==21)

{

if(boss.HP>0)

boss.reflash();

else

{

bossLabel.setVisible(false);

MobHPBar.setBounds(60http://0, 25, 184*boss.HP/boss.MaxHP, 25);

MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);

++gamePhase;

gamePhaseTimeCounter=0;

//需要修改开始

TitleLabelT.setText(fatherMenu.textLib.textData[72]);

TitleLabelT.setForeground(Color.LIGHT_GRAY);

TitleLabelT.setVisible(true);

SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);

TitleLabelT.setForeground(Color.LIGHT_GRAY);

SubTitleLabelT.setVisible(true);

//saveData(4);

//需要修改完成

startQuestCompleteBGM();

endBattleBGM();

}

}

if(gamePhase==endPhase)

{

endBattleBGM();

winMenu WM=new winMenu(thisMenu);

WM.setVisible(true);

thisMenu.setVisible(false);

map.stop();

}

if(gamePhase==-1)

{

if(boss.HP>0)

boss.reflash();

++gamePhaseTimeCounter;

if(gamePhaseTimeCounter>250)

{

endBattleBGM();

loseMenu LM=new loseMenu(thisMenu);

LM.setVisible(true);

thisMenu.setVisible(false);

map.stop();

}

}

//刷新bossBar

if(boss!=null&&gamePhase%6==3)

{

MobHead.setIcon(new ImageIcon("resource/MobHead_"+boss.MobId+".png"));

MobName.setText(""+boss.Name);

MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);

MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);

}

//玩家试图面向方向

if(attackCounter==0&&defenceCounter==0)

{

if(pressingD==1&&pressingW==0&&pressingS==0)

{

playingRole.tryingFace=0;

}

else if(pressingD==1&&pressingW==1)

{

playingRole.tryingFace=45;

}

else if(pressingW==1&&pressingA==0&&pressingD==0)

{

playingRole.tryingFace=90;

}

else if(pressingW==1&&pressingA==1)

{

playingRole.tryingFace=135;

}

else if(pressingA==1&&pressingW==0&&pressingS==0)

{

playingRole.tryingFace=180;

}

else if(pressingA==1&&pressingS==1)

{

playingRole.tryingFace=225;

}

else if(pressingS==1&&pressingA==0&&pressingD==0)

{

playingRole.tryingFace=270;

}

else if(pressingS==1&&pressingD==1)

{

playingRole.tryingFace=315;

}

}

playingRole.setFace();

humanIconContorler="resource/human_"+playingRole.face;

if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行转向

{

double d_angle=(playingRole.facingAngle-playingRole.tryingFace+360)%360;//0-180为顺时针

if(d_angle<=rotationSpeed||d_angle>=360-rotationSpeed)//旋转功能

{

playingRole.facingAngle=playingRole.tryingFace;

}

else

{

if(d_angle>0&&d_angle<=180)

{

playingRole.facingAngle-=rotationSpeed;

}

else

{

playingRole.facingAngle+=rotationSpeed;

}

}

}

if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行移动

{

++activeCounter;

playerX+=(int)(movementSpeed*Math.cos(playingRole.facingAngle*Math.PI/180));

playerY-=(int)(movementSpeed*Math.sin(playingRole.facingAngle*Math.PI/180));

checkPlayerLocation();

if(activeCounter>=10)//10Tick一次 切换移动图片

{

activeCounter=0;

playingRole.lastMoveActive=(playingRole.lastMoveActive+1)%4;

}

if(playingRole.lastMoveActive==2)

humanIconContorler=humanIconContorler+'_'+0;

else if(playingRole.lastMoveActive==3)

humanIconContorler=humanIconContorler+'_'+2;

else

humanIconContorler=humanIconContorler+'_'+playingRole.lastMoveActive;

}

if(pressingJ==1&&attackCounter==0&&defenceCounter==0&&playingRole.HP>0)//发动攻击

{

attackCounter=1;

}

if(attackCounter>0&&attackCounter<=8*attackSpeed)//正在攻击

{

++attackCounter;

if(attackCounter>0&&attackCounter<=attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+3;

}

else if(attackCounter<=2*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+4;

}

else if(attackCounter<=3*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+5;

}

else if(attackCounter<=4*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+6;

}

else if(attackCounter<=5*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+7;

}

else if(attackCounter<=6*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+8;

}

else if(attackCounter<=7*attackSpeed)

{

humanIconContorler=humanIconContorler+'_'+9;

}

}

if(attackCounter==3*attackSpeed)//完成攻击

{

playingRole.costEnergy(10);

fatherMenu.startNewSound("sweep"+Calculator.randomInt(1,3)+".wav",false,1);

playingRole.doAttack();

}

if(attackCounter>8*attackSpeed)//结束硬直

{

attackCounter=0;

}

if(defenceCooldown>0)

{

--defenceCooldown;

}

if(perfectDefenceTime>0)

{

--perfectDefenceTime;

}

if(pressingK==1&&attackCounter==0&&defenceCounter==0&&defenceCooldown==0)//发动防御

{

perfectDefenceTime=5;

defenceCounter=1;

playingRole.defenceStance=true;

playingRole.isBlocked=false;

}

if(defenceCounter==1)

{

if(pressingK==0)//解除格挡

{

defenceCounter=0;

playingRole.defenceStance=false;

if(playingRole.isBlocked==true)

defenceCooldown=0;

else

defenceCooldown=30;

}

else

{

humanIconContorler=humanIconContorler+'_'+10;

}

}

humanIconContorler=humanIconContorler+".png";

if(boss!=null&&playingRole.HP>0)

{

if(playerY>=boss.bossY&&usingPlayerLabel==0)//玩家应当盖住boss,但是却没盖住

{

usingPlayerLabel=1;

playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);

playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);

playerLabel[0].setVisible(false);

playerLabel[1].setVisible(true);

}

if(playerY

{

usingPlayerLabel=0;

playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);

playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);

playerLabel[0].setVisible(true);

playerLabel[1].setVisible(false);

}

}

playerLabel[usingPlayerLabel].setIcon(new ImageIcon(humanIconContorler));

playerLabel[usingPlayerLabel].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);

lblNewLabel_6.setBounds((int)playerX+(int)(25*Math.cos(playingRole.facingAngle*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.facingAngle*Math.PI/180))-2, 4,4);

lblNewLabel_7.setBounds((int)playerX+(int)(25*Math.cos(playingRole.tryingFace*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.tryingFace*Math.PI/180))-2, 4,4);

}

public void startNewBattleBGM(int bossID)

{

if(fatherMenu.settingLib.settings[1].equals("1"))

{

if(battleBGM!=null)

battleBGM.endMusic();

battleBGM=new CMusic("boss"+bossID+".wav",true,1);

battleBGM.start();

}

}

public void endBattleBGM()

{

if(battleBGM!=null)

battleBGM.endMusic();

}

public void startQuestCompleteBGM()

{

if(questCompleteBGM!=null)

questCompleteBGM.endMusic();

questCompleteBGM=new CMusic("QuestComplete.wav",false,1);

questCompleteBGM.start();

}

}

总结

通过此次的《飞机大战-I》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是Java实现经典游戏飞机大战-I的示例代码的详细内容,更多关于Java飞机大战的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python3 操作oralce的类(连接、查询、调用存储过程)
下一篇:linux环境使用pip下载python包(Linux安装pip)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~