From 927effc67d434d16cc58b2b8a3aa61b7ca4b7e3d Mon Sep 17 00:00:00 2001 From: terry <724796052@qq.com> Date: Sun, 26 Jun 2022 17:29:48 +0800 Subject: [PATCH] strategy for tank fire and folder refactor --- docs/坦克大战笔记.docx | Bin 75731 -> 75864 bytes src/com/demo/tank/coruse2/Bullet.java | 2 + src/com/demo/tank/coruse2/Tank.java | 2 + src/com/demo/tank/coruse2/TankFrame.java | 2 + src/com/demo/tank/course3/Bullet.java | 4 + src/com/demo/tank/course3/Direction.java | 5 - src/com/demo/tank/course3/Explode.java | 2 + src/com/demo/tank/course3/Group.java | 5 - src/com/demo/tank/course3/MainV3.java | 3 + .../demo/tank/course3/ResourceManager.java | 31 ---- src/com/demo/tank/course3/Tank.java | 4 + src/com/demo/tank/course3/TankFrameV3.java | 3 + src/com/demo/tank/course4/Bullet.java | 4 + src/com/demo/tank/course4/Direction.java | 5 - src/com/demo/tank/course4/Explode.java | 1 + src/com/demo/tank/course4/MainV4.java | 2 + src/com/demo/tank/course4/Tank.java | 4 + src/com/demo/tank/course4/TankFrameV4.java | 3 + src/com/demo/tank/course6/Bullet.java | 132 +++++++++++++ src/com/demo/tank/course6/Explode.java | 47 +++++ src/com/demo/tank/course6/MainV6.java | 24 +++ src/com/demo/tank/course6/Tank.java | 174 ++++++++++++++++++ src/com/demo/tank/course6/TankFrameV6.java | 159 ++++++++++++++++ .../course6/strategy/DefaultFireStrategy.java | 16 ++ .../tank/course6/strategy/FireStrategy.java | 7 + .../strategy/FourDirectionFireStrategy.java | 19 ++ .../tank/{coruse2 => enums}/Direction.java | 2 +- .../demo/tank/{course4 => enums}/Group.java | 2 +- .../{course4 => util}/ResourceManager.java | 4 +- 29 files changed, 617 insertions(+), 51 deletions(-) delete mode 100644 src/com/demo/tank/course3/Direction.java delete mode 100644 src/com/demo/tank/course3/Group.java delete mode 100644 src/com/demo/tank/course3/ResourceManager.java delete mode 100644 src/com/demo/tank/course4/Direction.java create mode 100644 src/com/demo/tank/course6/Bullet.java create mode 100644 src/com/demo/tank/course6/Explode.java create mode 100644 src/com/demo/tank/course6/MainV6.java create mode 100644 src/com/demo/tank/course6/Tank.java create mode 100644 src/com/demo/tank/course6/TankFrameV6.java create mode 100644 src/com/demo/tank/course6/strategy/DefaultFireStrategy.java create mode 100644 src/com/demo/tank/course6/strategy/FireStrategy.java create mode 100644 src/com/demo/tank/course6/strategy/FourDirectionFireStrategy.java rename src/com/demo/tank/{coruse2 => enums}/Direction.java (63%) rename src/com/demo/tank/{course4 => enums}/Group.java (54%) rename src/com/demo/tank/{course4 => util}/ResourceManager.java (96%) diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index e64e0ad61c118e4d1ffaf5c5a959522d424b2a29..5877f805b1cb14b4ede5e7f88da5ad2ae2a4eb72 100644 GIT binary patch delta 11105 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 delta 11004 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 diff --git a/src/com/demo/tank/coruse2/Bullet.java b/src/com/demo/tank/coruse2/Bullet.java index 3913f84..0e0be18 100644 --- a/src/com/demo/tank/coruse2/Bullet.java +++ b/src/com/demo/tank/coruse2/Bullet.java @@ -1,5 +1,7 @@ package com.demo.tank.coruse2; +import com.demo.tank.enums.Direction; + import java.awt.*; public class Bullet { diff --git a/src/com/demo/tank/coruse2/Tank.java b/src/com/demo/tank/coruse2/Tank.java index 6291594..e276ad2 100644 --- a/src/com/demo/tank/coruse2/Tank.java +++ b/src/com/demo/tank/coruse2/Tank.java @@ -1,5 +1,7 @@ package com.demo.tank.coruse2; +import com.demo.tank.enums.Direction; + import java.awt.*; public class Tank { private int x,y; diff --git a/src/com/demo/tank/coruse2/TankFrame.java b/src/com/demo/tank/coruse2/TankFrame.java index 0caff8f..a7bd5e0 100644 --- a/src/com/demo/tank/coruse2/TankFrame.java +++ b/src/com/demo/tank/coruse2/TankFrame.java @@ -1,5 +1,7 @@ package com.demo.tank.coruse2; +import com.demo.tank.enums.Direction; + import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; diff --git a/src/com/demo/tank/course3/Bullet.java b/src/com/demo/tank/course3/Bullet.java index f8de131..7c67b3e 100644 --- a/src/com/demo/tank/course3/Bullet.java +++ b/src/com/demo/tank/course3/Bullet.java @@ -1,5 +1,9 @@ package com.demo.tank.course3; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + import java.awt.*; public class Bullet { diff --git a/src/com/demo/tank/course3/Direction.java b/src/com/demo/tank/course3/Direction.java deleted file mode 100644 index 54ddc50..0000000 --- a/src/com/demo/tank/course3/Direction.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.demo.tank.course3; - -public enum Direction { - LEFT, RIGHT, UP, DOWN; -} diff --git a/src/com/demo/tank/course3/Explode.java b/src/com/demo/tank/course3/Explode.java index af3c32f..23a649c 100644 --- a/src/com/demo/tank/course3/Explode.java +++ b/src/com/demo/tank/course3/Explode.java @@ -1,5 +1,7 @@ package com.demo.tank.course3; +import com.demo.tank.util.ResourceManager; + import java.awt.*; public class Explode { diff --git a/src/com/demo/tank/course3/Group.java b/src/com/demo/tank/course3/Group.java deleted file mode 100644 index e37c523..0000000 --- a/src/com/demo/tank/course3/Group.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.demo.tank.course3; - -public enum Group { - GOOD, BAD -} diff --git a/src/com/demo/tank/course3/MainV3.java b/src/com/demo/tank/course3/MainV3.java index 97edf45..74c7822 100644 --- a/src/com/demo/tank/course3/MainV3.java +++ b/src/com/demo/tank/course3/MainV3.java @@ -1,5 +1,8 @@ package com.demo.tank.course3; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; + import java.io.IOException; public class MainV3 { diff --git a/src/com/demo/tank/course3/ResourceManager.java b/src/com/demo/tank/course3/ResourceManager.java deleted file mode 100644 index 288ef1a..0000000 --- a/src/com/demo/tank/course3/ResourceManager.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.demo.tank.course3; - -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; -import java.io.IOException; - -public class ResourceManager { - public static BufferedImage tankL, tankR, tankU, tankD; - public static BufferedImage bulletL, bulletR, bulletU, bulletD; - public static BufferedImage[] explodes = new BufferedImage[16]; - - static { - try { - tankL = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankL.gif")); - tankR = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankR.gif")); - tankU = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankU.gif")); - tankD = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankD.gif")); - - bulletL = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/bulletL.gif")); - bulletR = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/bulletR.gif")); - bulletU = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/bulletU.gif")); - bulletD = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/bulletD.gif")); - - for (int i= 0; i<16; i++){ - explodes[i] = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/e"+ (i+1)+".gif")); - } - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/src/com/demo/tank/course3/Tank.java b/src/com/demo/tank/course3/Tank.java index b18d1ee..756f23d 100644 --- a/src/com/demo/tank/course3/Tank.java +++ b/src/com/demo/tank/course3/Tank.java @@ -1,5 +1,9 @@ package com.demo.tank.course3; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + import java.awt.*; import java.util.Random; diff --git a/src/com/demo/tank/course3/TankFrameV3.java b/src/com/demo/tank/course3/TankFrameV3.java index 5c136cf..b755d8f 100644 --- a/src/com/demo/tank/course3/TankFrameV3.java +++ b/src/com/demo/tank/course3/TankFrameV3.java @@ -1,5 +1,8 @@ package com.demo.tank.course3; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; + import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; diff --git a/src/com/demo/tank/course4/Bullet.java b/src/com/demo/tank/course4/Bullet.java index cda1cdc..c17fb79 100644 --- a/src/com/demo/tank/course4/Bullet.java +++ b/src/com/demo/tank/course4/Bullet.java @@ -1,5 +1,9 @@ package com.demo.tank.course4; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + import java.awt.*; public class Bullet { diff --git a/src/com/demo/tank/course4/Direction.java b/src/com/demo/tank/course4/Direction.java deleted file mode 100644 index 5427a9b..0000000 --- a/src/com/demo/tank/course4/Direction.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.demo.tank.course4; - -public enum Direction { - LEFT, RIGHT, UP, DOWN; -} diff --git a/src/com/demo/tank/course4/Explode.java b/src/com/demo/tank/course4/Explode.java index 39d57b1..7833e21 100644 --- a/src/com/demo/tank/course4/Explode.java +++ b/src/com/demo/tank/course4/Explode.java @@ -1,6 +1,7 @@ package com.demo.tank.course4; import com.demo.tank.util.Audio; +import com.demo.tank.util.ResourceManager; import java.awt.*; diff --git a/src/com/demo/tank/course4/MainV4.java b/src/com/demo/tank/course4/MainV4.java index 1d10fd2..cdb17e8 100644 --- a/src/com/demo/tank/course4/MainV4.java +++ b/src/com/demo/tank/course4/MainV4.java @@ -1,5 +1,7 @@ package com.demo.tank.course4; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; import com.demo.tank.util.Audio; import com.demo.tank.util.PropertyManager; diff --git a/src/com/demo/tank/course4/Tank.java b/src/com/demo/tank/course4/Tank.java index a845e23..bc7df66 100644 --- a/src/com/demo/tank/course4/Tank.java +++ b/src/com/demo/tank/course4/Tank.java @@ -1,5 +1,9 @@ package com.demo.tank.course4; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + import java.awt.*; import java.util.Random; diff --git a/src/com/demo/tank/course4/TankFrameV4.java b/src/com/demo/tank/course4/TankFrameV4.java index e6f2109..438459b 100644 --- a/src/com/demo/tank/course4/TankFrameV4.java +++ b/src/com/demo/tank/course4/TankFrameV4.java @@ -1,5 +1,8 @@ package com.demo.tank.course4; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; + import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; diff --git a/src/com/demo/tank/course6/Bullet.java b/src/com/demo/tank/course6/Bullet.java new file mode 100644 index 0000000..62e6f0c --- /dev/null +++ b/src/com/demo/tank/course6/Bullet.java @@ -0,0 +1,132 @@ +package com.demo.tank.course6; + +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + +import java.awt.*; + +public class Bullet { + private int x, y; + private Direction direction; + private static final int SPEED = 10; + public static final int WIDTH = ResourceManager.bulletD.getWidth(); + public static final int HEIGHT = ResourceManager.bulletD.getHeight(); + private boolean live = true; + private Group group = Group.BAD; + private TankFrameV6 tf; + Rectangle rect = new Rectangle(); + + public Bullet(int x, int y, Direction direction, Group group, TankFrameV6 tf) { + this.x = x; + this.y = y; + this.direction = direction; + this.group = group; + this.tf = tf; + + rect.x = this.x; + rect.y = this.y; + rect.width = Bullet.WIDTH; + rect.height = Bullet.HEIGHT; + tf.bullets.add(this); + } + + public void paint(Graphics g){ + if(!live){ + tf.bullets.remove(this); + } + switch (direction){ + case UP: + g.drawImage(ResourceManager.bulletU, x, y, null); + break; + case DOWN: + g.drawImage(ResourceManager.bulletD, x, y, null); + break; + case LEFT: + g.drawImage(ResourceManager.bulletL, x, y, null); + break; + case RIGHT: + g.drawImage(ResourceManager.bulletR, x, y, null); + break; + } + move(); + } + + private void move() { + switch (direction){ + case UP: y -= SPEED; + break; + case DOWN: y += SPEED; + break; + case LEFT: x -= SPEED; + break; + case RIGHT: x += SPEED; + break; + default: + break; + } + if(x < 0 || y < 0 || x > TankFrameV6.GAME_WIDTH || y > TankFrameV6.GAME_HEIGHT){ + live = false; + } + rect.x = this.x; + rect.y = this.y; + } + + //检测是否跟坦克碰撞 + public void collideWith(Tank tank){ + //关闭队友伤害 + if(this.group == tank.getGroup()) return; + if(rect.intersects(tank.rect)){ + tank.die(); + this.die(); + //爆炸 + int ex = tank.getX() + Tank.WIDTH/2 - Explode.WIDTH/2; + int ey = tank.getY() + Tank.HEIGHT/2 - Explode.HEIGHT/2; + tf.explodes.add(new Explode(ex, ey , tf)); + } + } + + private void die() { + this.live = false; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + public Direction getDirection() { + return direction; + } + + public void setDirection(Direction direction) { + this.direction = direction; + } + + public boolean isLive() { + return live; + } + + public void setLive(boolean live) { + this.live = live; + } + + public Group getGroup() { + return group; + } + + public void setGroup(Group group) { + this.group = group; + } +} diff --git a/src/com/demo/tank/course6/Explode.java b/src/com/demo/tank/course6/Explode.java new file mode 100644 index 0000000..ea6340e --- /dev/null +++ b/src/com/demo/tank/course6/Explode.java @@ -0,0 +1,47 @@ +package com.demo.tank.course6; + +import com.demo.tank.util.Audio; +import com.demo.tank.util.ResourceManager; + +import java.awt.*; + +public class Explode { + private int x, y; + public static final int WIDTH = ResourceManager.explodes[0].getWidth(); + public static final int HEIGHT = ResourceManager.explodes[0].getHeight(); + private TankFrameV6 tf; + + private int step = 0; + + public Explode(int x, int y, TankFrameV6 tf) { + this.x = x; + this.y = y; + this.tf = tf; + new Thread(() -> new Audio("audio/explode.wav").play()).start(); + } + + public void paint(Graphics g){ + g.drawImage(ResourceManager.explodes[step++], x, y, null); + if(step >= ResourceManager.explodes.length){ + //播放完爆炸效果图片, remove + tf.explodes.remove(this); + } + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + +} diff --git a/src/com/demo/tank/course6/MainV6.java b/src/com/demo/tank/course6/MainV6.java new file mode 100644 index 0000000..cd8f48a --- /dev/null +++ b/src/com/demo/tank/course6/MainV6.java @@ -0,0 +1,24 @@ +package com.demo.tank.course6; + +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.PropertyManager; + +import java.io.IOException; + +public class MainV6 { + public static void main(String[] args) throws InterruptedException, IOException { + TankFrameV6 tf = new TankFrameV6(); + int enemyTankNum = PropertyManager.getInt("enemy.tank.number"); + for(int i = 0; i < enemyTankNum; i++){ + tf.enemyTanks.add(new Tank(50 + i*80, 200, Direction.DOWN, Group.BAD, tf)); + } + +// new Thread(() -> new Audio("audio/war1.wav").loop()).start(); + + while (true){ + Thread.sleep(50); + tf.repaint(); + } + } +} diff --git a/src/com/demo/tank/course6/Tank.java b/src/com/demo/tank/course6/Tank.java new file mode 100644 index 0000000..74ca8a6 --- /dev/null +++ b/src/com/demo/tank/course6/Tank.java @@ -0,0 +1,174 @@ +package com.demo.tank.course6; + +import com.demo.tank.course6.strategy.FireStrategy; +import com.demo.tank.course6.strategy.FourDirectionFireStrategy; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.util.ResourceManager; + +import java.awt.*; +import java.util.Random; + +public class Tank { + private int x,y; + private Direction dir; + private static final int SPEED = 8; + private boolean moving = true; + private boolean living = true; + private Group group = Group.BAD; + TankFrameV6 tankFrame = null; + public static final int WIDTH = ResourceManager.tankD.getWidth(); + public static final int HEIGHT = ResourceManager.tankD.getHeight(); + private Random random = new Random(); + Rectangle rect = new Rectangle(); +// FireStrategy fireStrategy = new DefaultFireStrategy(); + FireStrategy fireStrategy = new FourDirectionFireStrategy(); + + + public Tank(int x, int y, Direction dir, Group group, TankFrameV6 tankFrame) { + this.x = x; + this.y = y; + this.dir = dir; + this.group = group; + this.tankFrame = tankFrame; + + rect.x = this.x; + rect.y = this.y; + rect.width = Tank.WIDTH; + rect.height = Tank.HEIGHT; + } + + public void paint(Graphics g) { + if(!living) tankFrame.enemyTanks.remove(this); + //根据方向绘制坦克 + switch (dir){ + case UP: + g.drawImage(this.group == Group.GOOD ? ResourceManager.tankU : ResourceManager.badTankU, x, y, null); + break; + case DOWN: + g.drawImage(this.group == Group.GOOD ? ResourceManager.tankD : ResourceManager.badTankD, x, y, null); + break; + case LEFT: + g.drawImage(this.group == Group.GOOD ? ResourceManager.tankL: ResourceManager.badTankL, x, y, null); + break; + case RIGHT: + g.drawImage(this.group == Group.GOOD ? ResourceManager.tankR : ResourceManager.badTankR, x, y, null); + break; + } + move(); + } + + public void move(){ + //如果没有移动 return + if(!moving) return; + switch (dir){ + case UP: y -= SPEED; + break; + case DOWN: y += SPEED; + break; + case LEFT: x -= SPEED; + break; + case RIGHT: x += SPEED; + break; + default: + break; + } + if(this.group == Group.BAD) { + if(random.nextInt(10) == 5){ + this.fire(); + } + if(random.nextInt(100) > 95){ + this.randomDirection(); + } + } + + //边界检测 + boundsCheck(); + + rect.x = this.x; + rect.y = this.y; + } + + private void boundsCheck() { + if(x < 0) x = 0; + if(x > TankFrameV6.GAME_WIDTH - Tank.WIDTH) x = TankFrameV6.GAME_WIDTH - Tank.WIDTH; + if(y < 30) y = 30; //算上菜单条 + if(y > TankFrameV6.GAME_HEIGHT - Tank.HEIGHT) y = TankFrameV6.GAME_HEIGHT - Tank.HEIGHT; + } + + private void randomDirection() { + this.dir = Direction.values()[random.nextInt(4)]; + } + + public void fire() { + fireStrategy.fire(this); + } + + public void die(){ + this.living = false; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + public Direction getDir() { + return dir; + } + + public void setDir(Direction dir) { + this.dir = dir; + } + + public boolean isMoving() { + return moving; + } + + public void setMoving(boolean moving) { + this.moving = moving; + } + + public boolean isLiving() { + return living; + } + + public void setLiving(boolean living) { + this.living = living; + } + + public Group getGroup() { + return group; + } + + public void setGroup(Group group) { + this.group = group; + } + + public TankFrameV6 getTankFrame() { + return tankFrame; + } + + public void setTankFrame(TankFrameV6 tankFrame) { + this.tankFrame = tankFrame; + } + + public Rectangle getRect() { + return rect; + } + + public void setRect(Rectangle rect) { + this.rect = rect; + } +} diff --git a/src/com/demo/tank/course6/TankFrameV6.java b/src/com/demo/tank/course6/TankFrameV6.java new file mode 100644 index 0000000..a2a6080 --- /dev/null +++ b/src/com/demo/tank/course6/TankFrameV6.java @@ -0,0 +1,159 @@ +package com.demo.tank.course6; + +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; + +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.ArrayList; +import java.util.List; + +public class TankFrameV6 extends Frame { + public static final int GAME_WIDTH = 1080; + public static final int GAME_HEIGHT = 800; + Image image = null; + + 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<>(); + + List explodes = new ArrayList<>(); + + public TankFrameV6(){ + setVisible(true); + setBounds(400, 100 , GAME_WIDTH, GAME_HEIGHT); + setResizable(false); + setTitle("tank war"); + this.addKeyListener(new MyKeyListener()); + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + } + + @Override + public void update(Graphics g) { + if(image == null){ + image = this.createImage(GAME_WIDTH, GAME_HEIGHT); + } + Graphics imgGraphic = image.getGraphics(); + Color color = g.getColor(); + imgGraphic.setColor(Color.BLACK); + imgGraphic.fillRect(0,0, GAME_WIDTH, GAME_HEIGHT); + imgGraphic.setColor(color); + paint(imgGraphic); + g.drawImage(image, 0, 0, null); + } + + @Override + 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); + + tank.paint(g); + + for(int i = 0; i< enemyTanks.size(); i++){ + enemyTanks.get(i).paint(g); + } + + for (int i = 0; i< bullets.size(); i++){ + bullets.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< 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); +// } + } + + class MyKeyListener extends KeyAdapter{ + boolean bL = false; + boolean bR = false; + boolean bU = false; + boolean bD = false; + + @Override + public void keyPressed(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_A: + bL = true; + break; + case KeyEvent.VK_D: + bR = true; + break; + case KeyEvent.VK_W: + bU = true; + break; + case KeyEvent.VK_S: + bD = true; + break; + default: + break; + } + setTankDirection(); + } + + @Override + public void keyReleased(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_A: + bL = false; + break; + case KeyEvent.VK_D: + bR = false; + break; + case KeyEvent.VK_W: + bU = false; + break; + case KeyEvent.VK_S: + bD = false; + break; + case KeyEvent.VK_SPACE: + tank.fire(); + break; + default: + break; + } + setTankDirection(); + } + + public void setTankDirection(){ + if(!bL && !bR && !bU && !bD){ + tank.setMoving(false); + }else{ + tank.setMoving(true); + if(bL) tank.setDir(Direction.LEFT); + if(bR) tank.setDir(Direction.RIGHT); + if(bU) tank.setDir(Direction.UP); + if(bD) tank.setDir(Direction.DOWN); + } + } + } +} diff --git a/src/com/demo/tank/course6/strategy/DefaultFireStrategy.java b/src/com/demo/tank/course6/strategy/DefaultFireStrategy.java new file mode 100644 index 0000000..7413b97 --- /dev/null +++ b/src/com/demo/tank/course6/strategy/DefaultFireStrategy.java @@ -0,0 +1,16 @@ +package com.demo.tank.course6.strategy; + +import com.demo.tank.course6.Bullet; +import com.demo.tank.enums.Group; +import com.demo.tank.course6.Tank; +import com.demo.tank.util.Audio; + +public class DefaultFireStrategy implements FireStrategy{ + @Override + 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(),tank.getTankFrame()); + if (tank.getGroup() == Group.GOOD) new Thread(() -> new Audio("audio/tank_fire.wav").play()).start(); + } +} diff --git a/src/com/demo/tank/course6/strategy/FireStrategy.java b/src/com/demo/tank/course6/strategy/FireStrategy.java new file mode 100644 index 0000000..4548cb4 --- /dev/null +++ b/src/com/demo/tank/course6/strategy/FireStrategy.java @@ -0,0 +1,7 @@ +package com.demo.tank.course6.strategy; + +import com.demo.tank.course6.Tank; + +public interface FireStrategy { + void fire(Tank tank); +} diff --git a/src/com/demo/tank/course6/strategy/FourDirectionFireStrategy.java b/src/com/demo/tank/course6/strategy/FourDirectionFireStrategy.java new file mode 100644 index 0000000..0d0cdeb --- /dev/null +++ b/src/com/demo/tank/course6/strategy/FourDirectionFireStrategy.java @@ -0,0 +1,19 @@ +package com.demo.tank.course6.strategy; + +import com.demo.tank.course6.Bullet; +import com.demo.tank.enums.Direction; +import com.demo.tank.enums.Group; +import com.demo.tank.course6.Tank; +import com.demo.tank.util.Audio; + +public class FourDirectionFireStrategy implements FireStrategy{ + @Override + 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; + for(Direction direction : Direction.values()){ + new Bullet(bx, by, direction, tank.getGroup(),tank.getTankFrame()); + } + if (tank.getGroup() == Group.GOOD) new Thread(() -> new Audio("audio/tank_fire.wav").play()).start(); + } +} diff --git a/src/com/demo/tank/coruse2/Direction.java b/src/com/demo/tank/enums/Direction.java similarity index 63% rename from src/com/demo/tank/coruse2/Direction.java rename to src/com/demo/tank/enums/Direction.java index a8a2526..912e2cb 100644 --- a/src/com/demo/tank/coruse2/Direction.java +++ b/src/com/demo/tank/enums/Direction.java @@ -1,4 +1,4 @@ -package com.demo.tank.coruse2; +package com.demo.tank.enums; public enum Direction { LEFT, RIGHT, UP, DOWN; diff --git a/src/com/demo/tank/course4/Group.java b/src/com/demo/tank/enums/Group.java similarity index 54% rename from src/com/demo/tank/course4/Group.java rename to src/com/demo/tank/enums/Group.java index 07b5304..61dfa5a 100644 --- a/src/com/demo/tank/course4/Group.java +++ b/src/com/demo/tank/enums/Group.java @@ -1,4 +1,4 @@ -package com.demo.tank.course4; +package com.demo.tank.enums; public enum Group { GOOD, BAD diff --git a/src/com/demo/tank/course4/ResourceManager.java b/src/com/demo/tank/util/ResourceManager.java similarity index 96% rename from src/com/demo/tank/course4/ResourceManager.java rename to src/com/demo/tank/util/ResourceManager.java index a64cfab..914ed1d 100644 --- a/src/com/demo/tank/course4/ResourceManager.java +++ b/src/com/demo/tank/util/ResourceManager.java @@ -1,6 +1,4 @@ -package com.demo.tank.course4; - -import com.demo.tank.util.ImageUtil; +package com.demo.tank.util; import javax.imageio.ImageIO; import java.awt.image.BufferedImage;