diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index 447d4ab..f569b2f 100644 Binary files a/docs/坦克大战笔记.docx and b/docs/坦克大战笔记.docx differ diff --git a/src/com/demo/tank/course9/DefaultFireStrategy.java b/src/com/demo/tank/course9/DefaultFireStrategy.java index 6e6eb4f..49169f2 100644 --- a/src/com/demo/tank/course9/DefaultFireStrategy.java +++ b/src/com/demo/tank/course9/DefaultFireStrategy.java @@ -8,13 +8,13 @@ public class DefaultFireStrategy implements FireStrategy { public void fire(Tank tank) { int bx = tank.getX() + Tank.WIDTH / 2 - Bullet.WIDTH / 2; int by = tank.getY() + Tank.HEIGHT / 2 - Bullet.HEIGHT / 2; -// new Bullet(bx, by, tank.getDir(), tank.getGroup()); + new Bullet(bx, by, tank.getDir(), tank.getGroup()); // GameModel.getInstance().add(new RectDecorator(new Bullet(bx, by, tank.getDir(), tank.getGroup()))); - GameModel.getInstance().add(new RectDecorator( - new TailDecorator( - new Bullet(bx, by, tank.getDir(), tank.getGroup()) - ) - )); +// GameModel.getInstance().add(new RectDecorator( +// new TailDecorator( +// new Bullet(bx, by, tank.getDir(), tank.getGroup()) +// ) +// )); if (tank.getGroup() == Group.GOOD) new Thread(() -> new Audio("audio/tank_fire.wav").play()).start(); } } diff --git a/src/com/demo/tank/course9/Tank.java b/src/com/demo/tank/course9/Tank.java index 0ba0019..412886d 100644 --- a/src/com/demo/tank/course9/Tank.java +++ b/src/com/demo/tank/course9/Tank.java @@ -5,6 +5,9 @@ import com.demo.tank.enums.Group; import com.demo.tank.util.ResourceManager; import java.awt.*; +import java.sql.Timestamp; +import java.time.Instant; +import java.util.Arrays; import java.util.Random; public class Tank extends GameObject { @@ -124,6 +127,14 @@ public class Tank extends GameObject { fireStrategy.fire(this); } + public void handleFireKey(){ + java.util.List observers = Arrays.asList(new TankFireHandler()); + TankEvent event = new TankEvent(Timestamp.from(Instant.now()), this); + for (TankFireObserver o : observers){ + o.actionOnFire(event); + } + } + public void die() { this.living = false; } diff --git a/src/com/demo/tank/course9/TankEvent.java b/src/com/demo/tank/course9/TankEvent.java new file mode 100644 index 0000000..da23fc9 --- /dev/null +++ b/src/com/demo/tank/course9/TankEvent.java @@ -0,0 +1,21 @@ +package com.demo.tank.course9; + +import java.sql.Timestamp; + +public class TankEvent { + private Timestamp timestamp; + private Tank source; + + public TankEvent(Timestamp timestamp, Tank source) { + this.timestamp = timestamp; + this.source = source; + } + + public Timestamp getTimestamp() { + return timestamp; + } + + public Tank getSource() { + return source; + } +} diff --git a/src/com/demo/tank/course9/TankFireHandler.java b/src/com/demo/tank/course9/TankFireHandler.java new file mode 100644 index 0000000..331d69d --- /dev/null +++ b/src/com/demo/tank/course9/TankFireHandler.java @@ -0,0 +1,10 @@ +package com.demo.tank.course9; + +public class TankFireHandler implements TankFireObserver{ + @Override + public void actionOnFire(TankEvent event) { + Tank tank = event.getSource(); + System.out.println("my tank fire time: " + event.getTimestamp()); + tank.fire(); + } +} diff --git a/src/com/demo/tank/course9/TankFireObserver.java b/src/com/demo/tank/course9/TankFireObserver.java new file mode 100644 index 0000000..c5a164a --- /dev/null +++ b/src/com/demo/tank/course9/TankFireObserver.java @@ -0,0 +1,5 @@ +package com.demo.tank.course9; + +public interface TankFireObserver { + void actionOnFire(TankEvent event); +} diff --git a/src/com/demo/tank/course9/TankFrameV9.java b/src/com/demo/tank/course9/TankFrameV9.java index 29d4a9f..1ff669e 100644 --- a/src/com/demo/tank/course9/TankFrameV9.java +++ b/src/com/demo/tank/course9/TankFrameV9.java @@ -90,7 +90,7 @@ public class TankFrameV9 extends Frame { bD = false; break; case KeyEvent.VK_SPACE: - gm.tank.fire(); + gm.tank.handleFireKey(); break; default: break;