“This is the 13th day of my participation in the First Challenge 2022. For details: First Challenge 2022”
❤️ Author’s home page: Xiao Xu Zhu
❤️ About the author: Hello everyone, I am Xiao Xu Zhu. Java field quality creator 🏆, CSDN blog expert 🏆, Huawei cloud enjoy expert 🏆, Nuggets of the year popular author 🏆, Ali Cloud expert blogger 🏆
❤️ technology live, the appreciation
❤️ like 👍 collect ⭐ look again, form a habit
preface
“Aircraft war -I” is a fusion of arcade, competitive and other elements of the classic shooting mobile tour. Gorgeous and exquisite game screen, super dazzle with a sense of skill special effects, super hot screen let you adrenaline burst, give you a full range of shock feeling, experience the infinite fun of flying combat.
The game is implemented in Java language, using Swing technology for interface processing, design ideas with object-oriented thought.
The main requirements
Players control a fighter, to eliminate all enemy aircraft for victory, some enemy opportunities to drop equipment, can not miss oh
The main design
1, use Swing library to do visual interface
2, mouse control fighter movement
3, with thread to achieve picture refresh.
4. Use stream to play music.
5. Create an airplane and place it under the scene.
6. Manage the movement of all planes, bullets and props in the scene
7. Manage all shots fired in the scene
8, generate enemy aircraft algorithm
9. Score calculation algorithm
Screenshot function
The game start
Combat Effect:
Code implementation
Start the class
public class Main {
public static void main(String[] args) {
// Create window
JFrame frame = new JFrame("Plane wars.");
/ / add a JPanel
Data.canvas = new Canvas(frame);
frame.setContentPane(Data.canvas);
// Initialize Data
Data.init();
// Set the icon
frame.setIconImage(Load.image("ICON.png"));
// Make the window visible
frame.setVisible(true);
// Get the height and width of the title bar
Data.TITLE_BOX_HEIGHT = frame.getInsets().top;
// Set the size
frame.setSize(Data.WIDTH, Data.HEIGHT + Data.TITLE_BOX_HEIGHT);
// The window size is fixed
frame.setResizable(false);
// The window is centered
frame.setLocationRelativeTo(frame.getOwner());
// End the program when the window closes
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Play background music
Load.sound("background").loop(Clip.LOOP_CONTINUOUSLY); }}Copy the code
Core classes
public class Game implements Scenes {
/ / BOSS
Aircraft player, boss;
/ / the enemy
List<Aircraft> enemy;
// Player bullet enemy bullet item list
List<Bullet> bulletPlayer, bulletEnemy, bulletBuff;
// Player dies when life < 0
// int life = Data.LIFE;
// Current level current score
int checkpoint = 1, fraction = 0;
// The flight direction of the aircraft, it needs to be noted here, when monitoring the button to control the movement of the aircraft, should not simply press the button once, because the keyboard does not release, the aircraft should keep moving in a certain direction until the button is released
boolean left = false, right = false, down = false, up = false;
// FPS, record the current frame number
int fps = 0;
// Indicate the x coordinate
int tipsX = -1000;
public Game(a) {
// Create an airplane and place it below the scene. The player's Angle attribute will not be used
player = new Aircraft(Data.playerAircraftImage, Data.playerDeathImage, Data.SPEED, 0, Data.WIDTH / 2 - 40, Data.HEIGHT - 100);
// Set the plane collision point, because the game uses a rectangular collision detection, there will be a lot of errors, so manually set the collision rectangle, do not use the size of the picture, this collision coordinate is relative to the position of the picture coordinates
player.upperLeft = new Point(15.15);
player.lowerRight = new Point(75.75);
// Initialize the list
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;
}
// Draw a FPS + 1
fps++;
// The plane moves
move();
// The bullet is fired
attack();
// Enemy planes are generated
generate();
// Invalid object is destroyed
remove();
// Draw the background
Data.background.show(g);
// Draw our aircraft
if(player ! =null)
player.draw(g);
/ / draw the BOSS
if(boss ! =null) boss.draw(g);
// Draw enemy aircraft
for (Aircraft a : enemy)
a.draw(g);
// Draw I fire bullets
for (Bullet b : bulletPlayer)
b.draw(g);
// Draw enemy bullets
for (Bullet b : bulletEnemy)
b.draw(g);
// Draw props
for (Bullet d : bulletBuff)
d.draw(g);
g.drawString("Score:" + 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);
}
// Draw a picture of the boss
if (tipsX > -900 && tipsX < 900) {
g.drawImage(Data.tips, tipsX, 200.null); }}// Manage the movement of all planes, bullets and items in the scene
void move(a) {
if(player ! =null) {
// This coordinate is used for positioning enemy bullets
Data.x = player.x;
Data.y = player.y;
// The plane moves up, which also limits the plane's range so that it does not fly off the screen
if (up) player.move(0, -player.speed);
if (player.y < 0) player.y = 0;
// The plane moves down
if (down) player.move(0, player.speed);
if (player.y > Data.HEIGHT - player.height) player.y = Data.HEIGHT - player.height;
// The plane moved to the left
if (left) player.move(-player.speed, 0);
if (player.x < 0) player.x = 0;
// The plane moves to the right
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();
// The movement of our bullets
for (Bullet bullet : bulletPlayer)
bullet.move();
// Enemy bullet movement
for (Bullet bullet : bulletEnemy)
bullet.move();
// Item movement
for (Bullet bullet : bulletBuff)
bullet.move();
// Local aircraft movement, including BOSS
for (Aircraft air : enemy)
air.move();
/ / move BUFF
for (Bullet b : bulletBuff)
b.move();
}
void remove(a) {
Random random = new Random();
// Bullets destroyed
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++;
}
// Enemy destroy
for (int i = 0; i < enemy.size(); ) {
if (enemy.get(i).isRemove()) {
// Generate items
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("Death");
// Kill an enemy for 1 point, not so much bells and whistles
fraction += 10;
if (fraction / 100 == checkpoint) {
boss = new Boss2();
checkpoint += 1;
Load.playSound("Warning");
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) {
// 4 buffs are dropped when bosses die
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;
// Detect our bullet collision
for (int i = 0; i < bulletPlayer.size(); i++) {
Point point = bulletPlayer.get(i).getPoint();
if (bulletPlayer.get(i).buffetIndex > 1) continue;
// Check if the bullet hits the 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("Hit");
}
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("Hit");
}
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;
// Detect enemy bullet collision
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(); }}}}/ / eat 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); }}}// Collisions between aircraft
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("Failure"); death(); }}}}// Manage all shots fired in the scene
void attack(a) {
// Our aircraft fires at 3 frames
if(player ! =null && player.hp > 0) {
if(! player.isRemove() && fps %3= =0)
bulletPlayer.addAll(Arrays.asList(player.attack()));
}
// Enemy planes fired bullets
if (fps % 5= =0)
for (Aircraft em : enemy)
bulletEnemy.addAll(Arrays.asList(em.attack()));
// Boss fires bullets
if(boss ! =null) bulletEnemy.addAll(Arrays.asList(boss.attack()));
}
// Generate enemy aircraft
void generate(a) {
// Bosses do not spawn small planes
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.enemyDeathImages[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(a) {
new Thread(() ->{
try {
player = null;
Thread.sleep(3000);
Data.canvas.switchScenes("Home");
} catch(InterruptedException e) { e.printStackTrace(); } }).start(); }}Copy the code
The core algorithm
@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;// Rotation speed
int movementSpeed=3;// Move speed
int NormalSpeed=3;
int attackSpeed=3;// Attack speed
int activeCounter;
int attackCounter;
int defenceCounter=0;
int perfectDefenceTime=0;// The remaining time to complete a block (starting the block 0.1 seconds before the enemy attacks reduces the energy cost of the block by 1/10)
int defenceCooldown=0;// Block cooldown this prevents the player from frantically starting/stopping blocks
int playerWidth=50;
int playerHeight=50;
int gamePhaseTimeCounter=0;
int gamePhaseTimeCounter2=0;
int endPhase=6*4;// The stage in which the game is completed
/* Level 1 0 * Level 2 6 * */
int gamePhase=0;// Stage at the beginning of the game (normal players should start from level 1, stage should start from 0)
String humanIconContorler;
JPanel viewMap;
// Players have two labels, one above and one below the 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;// The dark scene at the venue change
JLabel placeChangeBlack_1;// Black screen when changing venue (used for property bar)
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;// Queue Pointers 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.length; ++i) proIsUsed[i]=false;
for(int i=0; i<parIsUsed.length; ++i) parIsUsed[i]=false;
playingProfessionID=professionID;
this.playingSave=playingSave;
gamePhase=(partID-1) *6;
this.fatherMenu=fatherMenu;
this.isCheating=isCheating;
//this.isCheating=true; / / test
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);
// It's on the 100th floor
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("");/ / avatar
lblNewLabel.setBounds(0.0.50.50);
lblNewLabel.setIcon(new ImageIcon("resource/HPBarHead.png"));
panel_1.add(lblNewLabel);
lblNewLabel_2B = new JLabel("");/ / HP
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("");/ / physical characters
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("");/ / the blood
lblNewLabel_2.setBounds(50.0.200.25);
lblNewLabel_2.setIcon(new ImageIcon("resource/RedBar.png"));
panel_1.add(lblNewLabel_2);
lblNewLabel_3 = new JLabel("");/ / manual
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("");// Health bar physical bar background
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("Black", 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("Black", 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("");// Player tryingFace indicator (temporarily disabled)
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);
/ / the 99th floor
/ / title
TitleLabelT = new JLabel("");
TitleLabelT.setFont(new Font("Black", Font.PLAIN, 45));
TitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);
TitleLabelT.setBounds(100.50.584.50);
TitleLabelT.setVisible(true);
panel.add(TitleLabelT);
/ / subtitle
SubTitleLabelT = new JLabel("");
SubTitleLabelT.setFont(new Font("Black", Font.PLAIN, 25));
SubTitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);
SubTitleLabelT.setBounds(100.100.584.50);
SubTitleLabelT.setVisible(true);
panel.add(SubTitleLabelT);
// Pre-created particle effect Label, layer 6
for(int i=0; i<maxParCount; ++i) { parLabel[i]=new JLabel("");
panel.add(parLabel[i]);
}
// The player above the boss, tier 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, level 4.5
bossLabel = new JLabel("");
panel.add(bossLabel);
// The player below the boss, tier 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]);
// Player oriented indicator, level 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);
// Pre-create emitter Label, layer 2
for(int i=0; i<maxProCount; ++i) { proLabel[i]=new JLabel("");
panel.add(proLabel[i]);
}
// Create ground arrow, layer 1.5
groundArrayLabel=new JLabel("");
groundArrayLabel.setBounds(709.156.50.50);
groundArrayLabel.setIcon(new ImageIcon("resource/groundArray.png"));
groundArrayLabel.setVisible(false);
panel.add(groundArrayLabel);
// Create ground Label, layer 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();
}
// Emission correlation
public int addProjectile(Projectile pro)
{
existProCount=proHead.getLength();
if(existProCount<maxProCount)
{
proHead.insert(new proLink(pro));
int tempFinder=0;
for(int i=0; i<maxProCount; ++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(a)
{
proLink tempNode=proHead;
while(tempNode.next! =null) { tempNode=tempNode.next; tempNode.data.doFly(); }}// End of emitter correlation
// Particle effects are related
public int addParticle(particle par)
{
existParCount=parHead.getLength();
if(existParCount<maxParCount)
{
parHead.insert(new parLink(par));
int tempFinder=0;
for(int i=0; i<maxParCount; ++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(a)
{
parLink tempNode=parHead;
while(tempNode.next! =null) { tempNode=tempNode.next; tempNode.data.doFly(); }}public void checkPlayerLocation(a)// Check the player's position and pull back to the map if it is off the map
{
if(playerX<playerWidth/2)
playerX=playerWidth/2;
if(playerX>784-playerWidth/2)
playerX=784-playerWidth/2;
if(playerY<playerHeight/2)
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])<part)
{
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(a)// Execute 50 times per second
{
if(attackCounter==0&&defenceCounter==0)
playingRole.regenerate();
if(playingRole.HP>0)
{
// Refresh the health bar
lblNewLabel_3.setBounds(50.25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);
lblNewLabel_3B.setText(""+ (int)playingRole.energy+"/"+ (int)playingRole.MaxEnergy);
// Refresh health bar
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("Start the console...");
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)// Initialize the first level
{
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)// Enter the arrow
{
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);
// Need to modify start
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"));
}
// Need to modify the end
playerX=50;
playerY=200;
// Need to modify start
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);
// Need to modify the end
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);// Need to be modified
placeChangeBlack.setVisible(false);
placeChangeBlack_1.setVisible(false);
gamePhaseTimeCounter=0; ++gamePhase; }}if(gamePhase==20)
{
gamePhaseTimeCounter=0;
boss=new Mob(4,bossLabel,thisMenu);// Need to be modified
bossLabel.setBounds(375.175.100.100);// Need to be modified
boss.reflash();
bossLabel.setVisible(true);
++gamePhase;
}
if(gamePhase==21)
{
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;
// Need to modify start
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);
// It needs to be modifiedstartQuestCompleteBGM(); 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(); }}/ / refresh 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);
}
// The player tries to be oriented
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))// Make a turn
{
double d_angle=(playingRole.facingAngle-playingRole.tryingFace+360) %360;//0-180 is clockwise
if(d_angle<=rotationSpeed||d_angle>=360-rotationSpeed)// Rotate
{
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))// Make a move
{
++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 toggle to move picture once
{
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)// Launch an attack
{
attackCounter=1;
}
if(attackCounter>0&&attackCounter<=8*attackSpeed)// Under attack
{
++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)// Complete the attack
{
playingRole.costEnergy(10);
fatherMenu.startNewSound("sweep"+Calculator.randomInt(1.3) +".wav".false.1);
playingRole.doAttack();
}
if(attackCounter>8*attackSpeed)// End hard straight
{
attackCounter=0;
}
if(defenceCooldown>0)
{
--defenceCooldown;
}
if(perfectDefenceTime>0)
{
--perfectDefenceTime;
}
if(pressingK==1&&attackCounter==0&&defenceCounter==0&&defenceCooldown==0)// Activate the defense
{
perfectDefenceTime=5;
defenceCounter=1;
playingRole.defenceStance=true;
playingRole.isBlocked=false;
}
if(defenceCounter==1)
{
if(pressingK==0)// Unblock
{
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)// The player should have covered the boss, but he didn't
{
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<boss.bossY&&usingPlayerLabel==1)// The boss was supposed to cover the player, but it didn't
{
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(a)
{
if(battleBGM! =null)
battleBGM.endMusic();
}
public void startQuestCompleteBGM(a)
{
if(questCompleteBGM! =null)
questCompleteBGM.endMusic();
questCompleteBGM=new CMusic("QuestComplete.wav".false.1); questCompleteBGM.start(); }}Copy the code
conclusion
Through this “Aircraft War -I” game implementation, let me have a further understanding of swing related knowledge, the Language of Java has a deeper understanding than before.
Basic Java syntax, such as data types, operators, program flow control, and arrays, is better understood. Java is the core of the core object oriented thought, for this concept, finally realized some.
The source code for
After clicking “like” and following the blogger, the private blogger will get it for free