From 6a9ab6b79c7980512a09b95316c99691931de324 Mon Sep 17 00:00:00 2001 From: kn5886348135 <56352848+kn5886348135@users.noreply.github.com> Date: Sat, 19 Nov 2022 17:13:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9D=A6=E5=85=8B=E5=92=8C=E5=AD=90=E5=BC=B9?= =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/tankbattle/Bullet.java | 6 ++- .../java/com/example/tankbattle/Group.java | 5 +++ .../java/com/example/tankbattle/Main.java | 2 +- .../java/com/example/tankbattle/Tank.java | 42 +++++++++++++------ .../com/example/tankbattle/TankFrame.java | 2 +- 5 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/example/tankbattle/Group.java diff --git a/src/main/java/com/example/tankbattle/Bullet.java b/src/main/java/com/example/tankbattle/Bullet.java index 2137bbe..1b42773 100644 --- a/src/main/java/com/example/tankbattle/Bullet.java +++ b/src/main/java/com/example/tankbattle/Bullet.java @@ -13,11 +13,14 @@ public class Bullet { private TankFrame tf; - public Bullet(int x, int y, Dir dir, TankFrame tf) { + private Group group = Group.BAD; + + public Bullet(int x, int y, Dir dir, Group group, TankFrame tf) { this.x = x; this.y = y; this.dir = dir; this.tf = tf; + this.group = group; } public void paint(Graphics g) { @@ -68,6 +71,7 @@ public class Bullet { } public void collideWith(Tank tank){ + if (this.group == tank.getGroup()) return; Rectangle rect1 = new Rectangle(this.x, this.y, WIDTH, HEIGHT); Rectangle rect2 = new Rectangle(tank.getX(), tank.getY(), Tank.WIDTH, Tank.HEIGHT); if (rect1.intersects(rect2)) { diff --git a/src/main/java/com/example/tankbattle/Group.java b/src/main/java/com/example/tankbattle/Group.java new file mode 100644 index 0000000..f5cd9d3 --- /dev/null +++ b/src/main/java/com/example/tankbattle/Group.java @@ -0,0 +1,5 @@ +package com.example.tankbattle; + +public enum Group { + GOOD, BAD +} diff --git a/src/main/java/com/example/tankbattle/Main.java b/src/main/java/com/example/tankbattle/Main.java index 3a4fab6..0c625a7 100644 --- a/src/main/java/com/example/tankbattle/Main.java +++ b/src/main/java/com/example/tankbattle/Main.java @@ -6,7 +6,7 @@ public class Main { // 初始化敌方坦克 for (int i = 0; i < 5; i++) { - tf.tanks.add(new Tank(50 + i * 80, 200, Dir.DOWN, tf)); + tf.tanks.add(new Tank(50 + i * 80, 200, Dir.DOWN, Group.BAD, tf)); } while (true) { diff --git a/src/main/java/com/example/tankbattle/Tank.java b/src/main/java/com/example/tankbattle/Tank.java index 063c534..4d503b0 100644 --- a/src/main/java/com/example/tankbattle/Tank.java +++ b/src/main/java/com/example/tankbattle/Tank.java @@ -1,10 +1,28 @@ package com.example.tankbattle; import java.awt.Graphics; +import java.util.Random; public class Tank { + private static final int SPEED = 5; + + public static int WIDTH = ResourceMgr.tankD.getWidth(); + public static int HEIGHT = ResourceMgr.tankD.getHeight(); + + private Random random = new Random(); + private int x,y; + private Dir dir = Dir.DOWN; + + private boolean moving = false; + + private TankFrame tf = null; + + private boolean living = true; + + private Group group = Group.BAD; + public int getX() { return x; } @@ -21,17 +39,13 @@ public class Tank { this.y = y; } - private Dir dir = Dir.DOWN; - private static final int SPEED = 5; - - public static int WIDTH = ResourceMgr.tankD.getWidth(); - public static int HEIGHT = ResourceMgr.tankD.getHeight(); - - private boolean moving = false; - - private TankFrame tf = null; + public Group getGroup() { + return group; + } - private boolean living = true; + public void setGroup(Group group) { + this.group = group; + } public boolean isMoving() { return moving; @@ -50,13 +64,13 @@ public class Tank { } - - public Tank(int x, int y, Dir dir, TankFrame tf) { + public Tank(int x, int y, Dir dir, Group group, TankFrame tf) { super(); this.x = x; this.y = y; this.dir = dir; this.tf = tf; + this.group = group; } public void paint(Graphics g) { @@ -98,12 +112,14 @@ public class Tank { default: break; } + + if (random.nextInt(10) > 5) this.fire(); } public void fire(){ int bX = this.x + Tank.WIDTH / 2 - Bullet.WIDTH / 2; int bY = this.y + Tank.HEIGHT / 2 - Bullet.HEIGHT / 2; - tf.bullets.add(new Bullet(bX, bY, this.dir, this.tf)); + tf.bullets.add(new Bullet(bX, bY, this.dir, this.group, this.tf)); } public void die() { diff --git a/src/main/java/com/example/tankbattle/TankFrame.java b/src/main/java/com/example/tankbattle/TankFrame.java index 9b93301..de668af 100644 --- a/src/main/java/com/example/tankbattle/TankFrame.java +++ b/src/main/java/com/example/tankbattle/TankFrame.java @@ -13,7 +13,7 @@ import java.util.List; public class TankFrame extends Frame { - Tank myTank = new Tank(200, 400, Dir.DOWN, this); + Tank myTank = new Tank(200, 400, Dir.DOWN, Group.GOOD, this); List tanks = new ArrayList<>(); List bullets = new ArrayList<>();