diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index e64e0ad..5877f80 100644 Binary files a/docs/坦克大战笔记.docx and b/docs/坦克大战笔记.docx differ 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;