From ba22a013c222e6778f3c22691d8a2d066ed443e8 Mon Sep 17 00:00:00 2001 From: terry <724796052@qq.com> Date: Wed, 29 Jun 2022 20:08:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A3=E4=BB=BB=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/坦克大战笔记.docx | Bin 77357 -> 78631 bytes src/com/demo/tank/course8/Bullet.java | 8 +-- .../demo/tank/course8/BulletTankCollider.java | 16 +++++ src/com/demo/tank/course8/Collider.java | 5 ++ src/com/demo/tank/course8/ColliderChain.java | 23 +++++++ src/com/demo/tank/course8/Explode.java | 4 +- src/com/demo/tank/course8/GameModel.java | 56 +++++++----------- src/com/demo/tank/course8/GameObject.java | 8 +++ src/com/demo/tank/course8/Tank.java | 6 +- .../demo/tank/course8/TankTankCollider.java | 23 +++++++ 10 files changed, 104 insertions(+), 45 deletions(-) create mode 100644 src/com/demo/tank/course8/BulletTankCollider.java create mode 100644 src/com/demo/tank/course8/Collider.java create mode 100644 src/com/demo/tank/course8/ColliderChain.java create mode 100644 src/com/demo/tank/course8/GameObject.java create mode 100644 src/com/demo/tank/course8/TankTankCollider.java diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index e1d5c2004bd4491af80c6fcb55ad0e812bb0b89f..e411e9b1ce0c287d2da71c6fcd55b34cf1eb9922 100644 GIT binary patch delta 18444 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 delta 17151 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 Qr~d+)$aY#2c+3I=0FcYkMgRZ+ diff --git a/src/com/demo/tank/course8/Bullet.java b/src/com/demo/tank/course8/Bullet.java index 70372ca..00b1e41 100644 --- a/src/com/demo/tank/course8/Bullet.java +++ b/src/com/demo/tank/course8/Bullet.java @@ -6,7 +6,7 @@ import com.demo.tank.util.ResourceManager; import java.awt.*; -public class Bullet { +public class Bullet extends GameObject{ private int x, y; private Direction direction; private static final int SPEED = 10; @@ -28,12 +28,12 @@ public class Bullet { rect.y = this.y; rect.width = Bullet.WIDTH; rect.height = Bullet.HEIGHT; - gm.bullets.add(this); + gm.add(this); } public void paint(Graphics g){ if(!live){ - gm.bullets.remove(this); + gm.remove(this); } switch (direction){ case UP: @@ -82,7 +82,7 @@ public class Bullet { //爆炸 int ex = tank.getX() + Tank.WIDTH/2 - Explode.WIDTH/2; int ey = tank.getY() + Tank.HEIGHT/2 - Explode.HEIGHT/2; - gm.explodes.add(new Explode(ex, ey , gm)); + gm.add(new Explode(ex, ey , gm)); } } diff --git a/src/com/demo/tank/course8/BulletTankCollider.java b/src/com/demo/tank/course8/BulletTankCollider.java new file mode 100644 index 0000000..adeaec1 --- /dev/null +++ b/src/com/demo/tank/course8/BulletTankCollider.java @@ -0,0 +1,16 @@ +package com.demo.tank.course8; + +public class BulletTankCollider implements Collider{ + @Override + public void collide(GameObject g1, GameObject g2) { + if(g1 instanceof Bullet && g2 instanceof Tank){ + Bullet b = (Bullet) g1; + Tank t = (Tank) g2; + b.collideWith(t); + }else if(g1 instanceof Tank && g2 instanceof Bullet){ + collide(g2, g1); + }else{ + return; + } + } +} diff --git a/src/com/demo/tank/course8/Collider.java b/src/com/demo/tank/course8/Collider.java new file mode 100644 index 0000000..89d454f --- /dev/null +++ b/src/com/demo/tank/course8/Collider.java @@ -0,0 +1,5 @@ +package com.demo.tank.course8; + +public interface Collider { + void collide(GameObject g1, GameObject g2); +} diff --git a/src/com/demo/tank/course8/ColliderChain.java b/src/com/demo/tank/course8/ColliderChain.java new file mode 100644 index 0000000..ed82b23 --- /dev/null +++ b/src/com/demo/tank/course8/ColliderChain.java @@ -0,0 +1,23 @@ +package com.demo.tank.course8; + +import java.util.LinkedList; +import java.util.List; + +public class ColliderChain { + private List colliders = new LinkedList<>(); + + public ColliderChain(){ + add(new BulletTankCollider()); + add(new TankTankCollider()); + } + + public void add(Collider collider){ + colliders.add(collider); + } + + public void collide(GameObject g1, GameObject g2) { + for (Collider c : colliders){ + c.collide(g1, g2); + } + } +} diff --git a/src/com/demo/tank/course8/Explode.java b/src/com/demo/tank/course8/Explode.java index e662896..6ddaafc 100644 --- a/src/com/demo/tank/course8/Explode.java +++ b/src/com/demo/tank/course8/Explode.java @@ -5,7 +5,7 @@ import com.demo.tank.util.ResourceManager; import java.awt.*; -public class Explode { +public class Explode extends GameObject{ private int x, y; public static final int WIDTH = ResourceManager.explodes[0].getWidth(); public static final int HEIGHT = ResourceManager.explodes[0].getHeight(); @@ -24,7 +24,7 @@ public class Explode { g.drawImage(ResourceManager.explodes[step++], x, y, null); if(step >= ResourceManager.explodes.length){ //播放完爆炸效果图片, remove - gm.explodes.remove(this); + gm.remove(this); } } diff --git a/src/com/demo/tank/course8/GameModel.java b/src/com/demo/tank/course8/GameModel.java index 70b3380..4fd42ef 100644 --- a/src/com/demo/tank/course8/GameModel.java +++ b/src/com/demo/tank/course8/GameModel.java @@ -10,57 +10,41 @@ import java.util.List; public class GameModel { Tank tank = new Tank(380, 660, Direction.UP, Group.GOOD,this); - // Bullet bullet = new Bullet(520, 440, Direction.UP); - List bullets = new ArrayList(); - List enemyTanks = new ArrayList<>(); + private List gameObjects = new ArrayList<>(); - List explodes = new ArrayList<>(); +// Collider collider = new BulletTankCollider(); +// Collider collider2 = new TankTankCollider(); + ColliderChain chain = new ColliderChain(); public GameModel(){ int enemyTankNum = PropertyManager.getInt("enemy.tank.number"); for(int i = 0; i < enemyTankNum; i++){ - enemyTanks.add(new Tank(50 + i*80, 200, Direction.DOWN, Group.BAD, this)); + add(new Tank(50 + i*80, 200, Direction.DOWN, Group.BAD, this)); } } - public void paint(Graphics g){ - //打印出子弹数量 - Color color = g.getColor(); - g.setColor(Color.WHITE); - g.drawString("当前子弹数量:" + bullets.size(), 60, 50); - g.drawString("当前敌人数量:" + enemyTanks.size(), 60, 80); - g.drawString("当前爆炸数量:" + explodes.size(), 60, 100); - g.setColor(color); + public void add(GameObject go){ + gameObjects.add(go); + } - tank.paint(g); + public void remove(GameObject go){ + gameObjects.remove(go); + } - for(int i = 0; i< enemyTanks.size(); i++){ - enemyTanks.get(i).paint(g); - } + public void paint(Graphics g){ + tank.paint(g); - for (int i = 0; i< bullets.size(); i++){ - bullets.get(i).paint(g); + for(int i = 0; i< gameObjects.size(); i++){ + gameObjects.get(i).paint(g); } //碰撞检测 - for(int i = 0; i< bullets.size(); i++){ - for(int j=0; j< enemyTanks.size(); j++){ - bullets.get(i).collideWith(enemyTanks.get(j)); + for(int i = 0; i< gameObjects.size(); i++){ + for(int j=i+1; j< gameObjects.size(); j++){ + GameObject g1 = gameObjects.get(i); + GameObject g2 = gameObjects.get(j); + chain.collide(g1, g2); } } - - for (int i = 0; i< explodes.size(); i++){ - explodes.get(i).paint(g); - } -// for(Iterator it = bullets.iterator(); it.hasNext();){ -// Bullet b = it.next(); -// if(!b.isLive()){ -// it.remove(); -// } -// } -// -// for (Bullet b : bullets){ -// b.paint(g); -// } } } diff --git a/src/com/demo/tank/course8/GameObject.java b/src/com/demo/tank/course8/GameObject.java new file mode 100644 index 0000000..b007f7d --- /dev/null +++ b/src/com/demo/tank/course8/GameObject.java @@ -0,0 +1,8 @@ +package com.demo.tank.course8; + +import java.awt.*; + +public abstract class GameObject { + int x, y; + public abstract void paint(Graphics g); +} diff --git a/src/com/demo/tank/course8/Tank.java b/src/com/demo/tank/course8/Tank.java index 30d0533..9a4331b 100644 --- a/src/com/demo/tank/course8/Tank.java +++ b/src/com/demo/tank/course8/Tank.java @@ -7,7 +7,7 @@ import com.demo.tank.util.ResourceManager; import java.awt.*; import java.util.Random; -public class Tank { +public class Tank extends GameObject{ private int x,y; private Direction dir; private static final int SPEED = 8; @@ -38,7 +38,6 @@ public class Tank { // String className = PropertyManager.getString("good.tank.fire.strategy"); try { fireStrategy = (FireStrategy) Class.forName("com.demo.tank.course8.FourDirectionFireStrategy").newInstance(); - System.out.println(fireStrategy); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { @@ -49,8 +48,9 @@ public class Tank { }else if(this.group == Group.BAD) fireStrategy = new DefaultFireStrategy(); } + @Override public void paint(Graphics g) { - if(!living) gm.enemyTanks.remove(this); + if(!living) gm.remove(this); //根据方向绘制坦克 switch (dir){ case UP: diff --git a/src/com/demo/tank/course8/TankTankCollider.java b/src/com/demo/tank/course8/TankTankCollider.java new file mode 100644 index 0000000..33682a8 --- /dev/null +++ b/src/com/demo/tank/course8/TankTankCollider.java @@ -0,0 +1,23 @@ +package com.demo.tank.course8; + +import com.demo.tank.enums.Direction; + +import java.util.Random; + +public class TankTankCollider implements Collider{ + Random random = new Random(); + @Override + public void collide(GameObject g1, GameObject g2) { + if(g1 instanceof Tank && g2 instanceof Tank){ + Tank t1 = (Tank) g1; + Tank t2 = (Tank) g2; + if(t1.rect.intersects(t2.rect)){ + // simple deal + t1.setDir(Direction.values()[random.nextInt(4)]); + t2.setDir(Direction.values()[random.nextInt(4)]); + } + }else{ + return; + } + } +}