From 3c11abca269a19c889f0271af0217b26b83fce9d Mon Sep 17 00:00:00 2001 From: terry <724796052@qq.com> Date: Fri, 1 Jul 2022 18:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=82=E5=AF=9F=E8=80=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/坦克大战笔记.docx | Bin 80112 -> 80490 bytes .../tank/course9/DefaultFireStrategy.java | 12 +++++----- src/com/demo/tank/course9/Tank.java | 11 +++++++++ src/com/demo/tank/course9/TankEvent.java | 21 ++++++++++++++++++ .../demo/tank/course9/TankFireHandler.java | 10 +++++++++ .../demo/tank/course9/TankFireObserver.java | 5 +++++ src/com/demo/tank/course9/TankFrameV9.java | 2 +- 7 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 src/com/demo/tank/course9/TankEvent.java create mode 100644 src/com/demo/tank/course9/TankFireHandler.java create mode 100644 src/com/demo/tank/course9/TankFireObserver.java diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index 447d4abfbd191b0c2aa4adc4dec9f80b5f8d9b0b..f569b2f66fb674099c61b803f50ab4e3f5483ce6 100644 GIT binary patch delta 18509 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 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;