diff --git a/src/main/java/com/example/tankbattle/Bullet.java b/src/main/java/com/example/tankbattle/Bullet.java index c219a7d..1f68e51 100644 --- a/src/main/java/com/example/tankbattle/Bullet.java +++ b/src/main/java/com/example/tankbattle/Bullet.java @@ -11,7 +11,7 @@ public class Bullet extends BaseBullet { public static int WIDTH = ResourceMgr.bulletD.getWidth(); public static int HEIGHT = ResourceMgr.bulletD.getHeight(); - private Rectangle rect = new Rectangle(); + Rectangle rect = new Rectangle(); private int x, y; private Dir dir; diff --git a/src/main/java/com/example/tankbattle/DefaultFireStrategy.java b/src/main/java/com/example/tankbattle/DefaultFireStrategy.java index 43ec7a0..aed7746 100644 --- a/src/main/java/com/example/tankbattle/DefaultFireStrategy.java +++ b/src/main/java/com/example/tankbattle/DefaultFireStrategy.java @@ -7,7 +7,7 @@ public class DefaultFireStrategy implements FireStrategy { int bX = t.x + Tank.WIDTH/2 - Bullet.WIDTH/2; int bY = t.y + Tank.HEIGHT/2 - Bullet.HEIGHT/2; - t.tf.bullets.add(new Bullet(bX, bY, t.dir, t.group, t.tf)); + new Bullet(bX, bY, t.dir, t.group, t.tf); if(t.group == Group.GOOD) new Thread(()->new Audio("audio/tank_fire.wav").play()).start(); } diff --git a/src/main/java/com/example/tankbattle/Explode.java b/src/main/java/com/example/tankbattle/Explode.java index 2b3f37d..fd54258 100644 --- a/src/main/java/com/example/tankbattle/Explode.java +++ b/src/main/java/com/example/tankbattle/Explode.java @@ -2,7 +2,7 @@ package com.example.tankbattle; import com.example.tankbattle.abstractfactory.BaseExplode; -import java.awt.*; +import java.awt.Graphics; public class Explode extends BaseExplode { public static int WIDTH = ResourceMgr.explodes[0].getWidth(); @@ -18,6 +18,8 @@ public class Explode extends BaseExplode { this.x = x; this.y = y; this.tf = tf; + + new Thread(()->new Audio("audio/explode.wav").play()).start(); } @Override diff --git a/src/main/java/com/example/tankbattle/FourDirFireStrategy.java b/src/main/java/com/example/tankbattle/FourDirFireStrategy.java index 3839859..136a5f0 100644 --- a/src/main/java/com/example/tankbattle/FourDirFireStrategy.java +++ b/src/main/java/com/example/tankbattle/FourDirFireStrategy.java @@ -9,7 +9,7 @@ public class FourDirFireStrategy implements FireStrategy { Dir[] dirs = Dir.values(); for(Dir dir : dirs) { - new Bullet(bX, bY, dir, t.group, t.tf); + t.tf.gf.createBullet(bX, bY, dir, t.group, t.tf); } if(t.group == Group.GOOD) new Thread(()->new Audio("audio/tank_fire.wav").play()).start(); diff --git a/src/main/java/com/example/tankbattle/Main.java b/src/main/java/com/example/tankbattle/Main.java index 72ac5d9..8699bb6 100644 --- a/src/main/java/com/example/tankbattle/Main.java +++ b/src/main/java/com/example/tankbattle/Main.java @@ -8,9 +8,11 @@ public class Main { // 初始化敌方坦克 for (int i = 0; i < initTankCount; i++) { - tf.tanks.add(new Tank(50 + i * 80, 200, Dir.DOWN, Group.BAD, tf)); + tf.tanks.add(tf.gf.createTank(50 + i * 80, 200, Dir.DOWN, Group.BAD, tf)); } + new Thread(() -> new Audio("audio/war1.wav").loop()).start(); + while (true) { Thread.sleep(50); tf.repaint(); diff --git a/src/main/java/com/example/tankbattle/Tank.java b/src/main/java/com/example/tankbattle/Tank.java index 6468b38..876b4fa 100644 --- a/src/main/java/com/example/tankbattle/Tank.java +++ b/src/main/java/com/example/tankbattle/Tank.java @@ -2,7 +2,7 @@ package com.example.tankbattle; import com.example.tankbattle.abstractfactory.BaseTank; -import java.awt.*; +import java.awt.Graphics; import java.util.Random; public class Tank extends BaseTank { @@ -11,22 +11,18 @@ public class Tank extends BaseTank { public static int WIDTH = ResourceMgr.goodTankU.getWidth(); public static int HEIGHT = ResourceMgr.goodTankU.getHeight(); - Rectangle rect = new Rectangle(); - private Random random = new Random(); - public int x,y; + int x,y; - public Dir dir = Dir.DOWN; + Dir dir = Dir.DOWN; private boolean moving = true; - public TankFrame tf = null; + TankFrame tf = null; private boolean living = true; - public Group group = Group.BAD; - FireStrategy fs; public Tank(int x, int y, Dir dir, Group group, TankFrame tf) { @@ -57,7 +53,16 @@ public class Tank extends BaseTank { } public void fire(){ - fs.fire(this); + // fs.fire(this); + int bX = this.x + Tank.WIDTH/2 - Bullet.WIDTH/2; + int bY = this.y + Tank.HEIGHT/2 - Bullet.HEIGHT/2; + + Dir[] dirs = Dir.values(); + for(Dir dir : dirs) { + tf.gf.createBullet(bX, bY, dir, group, tf); + } + + if(group == Group.GOOD) new Thread(()->new Audio("audio/tank_fire.wav").play()).start(); } public Dir getDir() { @@ -103,31 +108,24 @@ public class Tank extends BaseTank { break; } - rect.x = this.x; - rect.y = this.y; - if (this.group == Group.BAD && random.nextInt(100) > 95) this.fire(); + if (this.group == Group.BAD && random.nextInt(100) > 95) + this.fire(); - if (this.group == Group.BAD && random.nextInt(100) > 95) { + if (this.group == Group.BAD && random.nextInt(100) > 95) randomDir(); - } boundsCheck(); + //update rect + rect.x = this.x; + rect.y = this.y; } private void boundsCheck() { - if (this.x < 0) { - this.x = 2; - } - if (this.y < 28) { - this.y = 28; - } + if (this.x < 2) x = 2; + if (this.y < 28) y = 28; - if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH) { - this.x = TankFrame.GAME_WIDTH - Tank.WIDTH; - } - if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT) { - this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT; - } + if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH-2) this.x = TankFrame.GAME_WIDTH - Tank.WIDTH - 2; + if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT-2) this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT-2; } private void randomDir() { diff --git a/src/main/java/com/example/tankbattle/abstractfactory/RectTank.java b/src/main/java/com/example/tankbattle/abstractfactory/RectTank.java index 90ef8ef..2844bf5 100644 --- a/src/main/java/com/example/tankbattle/abstractfactory/RectTank.java +++ b/src/main/java/com/example/tankbattle/abstractfactory/RectTank.java @@ -8,7 +8,6 @@ import com.example.tankbattle.FireStrategy; import com.example.tankbattle.Group; import com.example.tankbattle.PropertyMgr; import com.example.tankbattle.ResourceMgr; -import com.example.tankbattle.Tank; import com.example.tankbattle.TankFrame; import java.awt.Color; @@ -138,6 +137,9 @@ public class RectTank extends BaseTank{ randomDir(); boundsCheck(); + // update rect + rect.x = this.x; + rect.y = this.y; } private void boundsCheck() { @@ -146,10 +148,10 @@ public class RectTank extends BaseTank{ if (this.y < 28) y = 28; - if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH) - x = TankFrame.GAME_WIDTH - Tank.WIDTH; - if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT) - y = TankFrame.GAME_HEIGHT - Tank.HEIGHT; + if (this.x > TankFrame.GAME_WIDTH - RectTank.WIDTH-2) + x = TankFrame.GAME_WIDTH - RectTank.WIDTH; + if (this.y > TankFrame.GAME_HEIGHT - RectTank.HEIGHT-2) + y = TankFrame.GAME_HEIGHT - RectTank.HEIGHT; } private void randomDir() {