diff --git a/src/com/demo/tank/course6/Tank.java b/src/com/demo/tank/course6/Tank.java index a0604e9..1623fb7 100644 --- a/src/com/demo/tank/course6/Tank.java +++ b/src/com/demo/tank/course6/Tank.java @@ -2,7 +2,6 @@ package com.demo.tank.course6; import com.demo.tank.enums.Direction; import com.demo.tank.enums.Group; -import com.demo.tank.util.PropertyManager; import com.demo.tank.util.ResourceManager; import java.awt.*; @@ -36,9 +35,9 @@ public class Tank { rect.height = Tank.HEIGHT; if(this.group == Group.GOOD) { - String className = PropertyManager.getString("good.tank.fire.strategy"); +// String className = PropertyManager.getString("good.tank.fire.strategy"); try { - fireStrategy = (FireStrategy) Class.forName(className).newInstance(); + fireStrategy = (FireStrategy) Class.forName("com.demo.tank.course6.FourDirectionFireStrategy").newInstance(); System.out.println(fireStrategy); } catch (ClassNotFoundException e) { e.printStackTrace(); diff --git a/src/com/demo/tank/course7/Bullet.java b/src/com/demo/tank/course7/Bullet.java index 10bd485..81f27ef 100644 --- a/src/com/demo/tank/course7/Bullet.java +++ b/src/com/demo/tank/course7/Bullet.java @@ -1,12 +1,13 @@ package com.demo.tank.course7; +import com.demo.tank.course7.abstractFactory.BaseBullet; import com.demo.tank.enums.Direction; import com.demo.tank.enums.Group; import com.demo.tank.util.ResourceManager; import java.awt.*; -public class Bullet { +public class Bullet extends BaseBullet { private int x, y; private Direction direction; private static final int SPEED = 10; @@ -14,10 +15,10 @@ public class Bullet { public static final int HEIGHT = ResourceManager.bulletD.getHeight(); private boolean live = true; private Group group = Group.BAD; - private TankFrameV6 tf; + private TankFrameV7 tf; Rectangle rect = new Rectangle(); - public Bullet(int x, int y, Direction direction, Group group, TankFrameV6 tf) { + public Bullet(int x, int y, Direction direction, Group group, TankFrameV7 tf) { this.x = x; this.y = y; this.direction = direction; @@ -31,6 +32,7 @@ public class Bullet { tf.bullets.add(this); } + @Override public void paint(Graphics g){ if(!live){ tf.bullets.remove(this); @@ -65,7 +67,7 @@ public class Bullet { default: break; } - if(x < 0 || y < 0 || x > TankFrameV6.GAME_WIDTH || y > TankFrameV6.GAME_HEIGHT){ + if(x < 0 || y < 0 || x > TankFrameV7.GAME_WIDTH || y > TankFrameV7.GAME_HEIGHT){ live = false; } rect.x = this.x; @@ -82,7 +84,7 @@ public class Bullet { //爆炸 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)); + tf.explodes.add(tf.gameFactory.createExplode(ex, ey , tf)); } } diff --git a/src/com/demo/tank/course7/Explode.java b/src/com/demo/tank/course7/Explode.java index c63c76b..fd54348 100644 --- a/src/com/demo/tank/course7/Explode.java +++ b/src/com/demo/tank/course7/Explode.java @@ -1,25 +1,27 @@ package com.demo.tank.course7; +import com.demo.tank.course7.abstractFactory.BaseExplode; import com.demo.tank.util.Audio; import com.demo.tank.util.ResourceManager; import java.awt.*; -public class Explode { +public class Explode extends BaseExplode { 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 TankFrameV7 tf; private int step = 0; - public Explode(int x, int y, TankFrameV6 tf) { + public Explode(int x, int y, TankFrameV7 tf) { this.x = x; this.y = y; this.tf = tf; new Thread(() -> new Audio("audio/explode.wav").play()).start(); } + @Override public void paint(Graphics g){ g.drawImage(ResourceManager.explodes[step++], x, y, null); if(step >= ResourceManager.explodes.length){ diff --git a/src/com/demo/tank/course7/MainV6.java b/src/com/demo/tank/course7/MainV7.java similarity index 90% rename from src/com/demo/tank/course7/MainV6.java rename to src/com/demo/tank/course7/MainV7.java index a997a2b..fe18beb 100644 --- a/src/com/demo/tank/course7/MainV6.java +++ b/src/com/demo/tank/course7/MainV7.java @@ -6,9 +6,9 @@ import com.demo.tank.util.PropertyManager; import java.io.IOException; -public class MainV6 { +public class MainV7 { public static void main(String[] args) throws InterruptedException, IOException { - TankFrameV6 tf = new TankFrameV6(); + TankFrameV7 tf = new TankFrameV7(); 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)); diff --git a/src/com/demo/tank/course7/Tank.java b/src/com/demo/tank/course7/Tank.java index cbdd1d4..8430ee2 100644 --- a/src/com/demo/tank/course7/Tank.java +++ b/src/com/demo/tank/course7/Tank.java @@ -1,21 +1,21 @@ package com.demo.tank.course7; +import com.demo.tank.course7.abstractFactory.BaseTank; import com.demo.tank.enums.Direction; import com.demo.tank.enums.Group; -import com.demo.tank.util.PropertyManager; import com.demo.tank.util.ResourceManager; import java.awt.*; import java.util.Random; -public class Tank { +public class Tank extends BaseTank { 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; + TankFrameV7 tankFrame = null; public static final int WIDTH = ResourceManager.tankD.getWidth(); public static final int HEIGHT = ResourceManager.tankD.getHeight(); private Random random = new Random(); @@ -23,7 +23,7 @@ public class Tank { FireStrategy fireStrategy; - public Tank(int x, int y, Direction dir, Group group, TankFrameV6 tankFrame) { + public Tank(int x, int y, Direction dir, Group group, TankFrameV7 tankFrame) { this.x = x; this.y = y; this.dir = dir; @@ -36,9 +36,9 @@ public class Tank { rect.height = Tank.HEIGHT; if(this.group == Group.GOOD) { - String className = PropertyManager.getString("good.tank.fire.strategy"); +// String className = PropertyManager.getString("good.tank.fire.strategy"); try { - fireStrategy = (FireStrategy) Class.forName(className).newInstance(); + fireStrategy = (FireStrategy) Class.forName("com.demo.tank.course7.FourDirectionFireStrategy").newInstance(); System.out.println(fireStrategy); } catch (ClassNotFoundException e) { e.printStackTrace(); @@ -50,6 +50,7 @@ public class Tank { }else if(this.group == Group.BAD) fireStrategy = new DefaultFireStrategy(); } + @Override public void paint(Graphics g) { if(!living) tankFrame.enemyTanks.remove(this); //根据方向绘制坦克 @@ -103,9 +104,9 @@ public class Tank { private void boundsCheck() { if(x < 0) x = 0; - if(x > TankFrameV6.GAME_WIDTH - Tank.WIDTH) x = TankFrameV6.GAME_WIDTH - Tank.WIDTH; + if(x > TankFrameV7.GAME_WIDTH - Tank.WIDTH) x = TankFrameV7.GAME_WIDTH - Tank.WIDTH; if(y < 30) y = 30; //算上菜单条 - if(y > TankFrameV6.GAME_HEIGHT - Tank.HEIGHT) y = TankFrameV6.GAME_HEIGHT - Tank.HEIGHT; + if(y > TankFrameV7.GAME_HEIGHT - Tank.HEIGHT) y = TankFrameV7.GAME_HEIGHT - Tank.HEIGHT; } private void randomDirection() { @@ -168,11 +169,11 @@ public class Tank { this.group = group; } - public TankFrameV6 getTankFrame() { + public TankFrameV7 getTankFrame() { return tankFrame; } - public void setTankFrame(TankFrameV6 tankFrame) { + public void setTankFrame(TankFrameV7 tankFrame) { this.tankFrame = tankFrame; } diff --git a/src/com/demo/tank/course7/TankFrameV6.java b/src/com/demo/tank/course7/TankFrameV7.java similarity index 92% rename from src/com/demo/tank/course7/TankFrameV6.java rename to src/com/demo/tank/course7/TankFrameV7.java index 62cc714..ddcebe3 100644 --- a/src/com/demo/tank/course7/TankFrameV6.java +++ b/src/com/demo/tank/course7/TankFrameV7.java @@ -1,5 +1,8 @@ package com.demo.tank.course7; +import com.demo.tank.course7.abstractFactory.BaseExplode; +import com.demo.tank.course7.abstractFactory.DefaultFactory; +import com.demo.tank.course7.abstractFactory.GameFactory; import com.demo.tank.enums.Direction; import com.demo.tank.enums.Group; @@ -11,7 +14,7 @@ import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; -public class TankFrameV6 extends Frame { +public class TankFrameV7 extends Frame { public static final int GAME_WIDTH = 1080; public static final int GAME_HEIGHT = 800; Image image = null; @@ -21,9 +24,11 @@ public class TankFrameV6 extends Frame { List bullets = new ArrayList(); List enemyTanks = new ArrayList<>(); - List explodes = new ArrayList<>(); + List explodes = new ArrayList<>(); - public TankFrameV6(){ + GameFactory gameFactory = new DefaultFactory(); + + public TankFrameV7(){ setVisible(true); setBounds(400, 100 , GAME_WIDTH, GAME_HEIGHT); setResizable(false); diff --git a/src/config b/src/config index 2f65c27..00285eb 100644 --- a/src/config +++ b/src/config @@ -2,6 +2,4 @@ enemy.tank.number=8 tank.speed=5 bullet.speed=5 game.width=1080 -game.height=720 -good.tank.fire.strategy=com.demo.tank.course6.FourDirectionFireStrategy -bad.tank.fire.strategy=com.demo.tank.course6.DefaultFireStrategy \ No newline at end of file +game.height=720 \ No newline at end of file