commit 99a61ede8e08b9f442cf812d8dfde28c6157ee97
Author: msb_64243 <940710867@qq.com>
Date: Wed Aug 10 21:25:14 2022 +0800
坦克抽象工厂类代码提交
diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..21c30ab
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..bbdf205
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ Javatank
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3a21537
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bin/audio/explode.wav b/bin/audio/explode.wav
new file mode 100644
index 0000000..dc72ab1
Binary files /dev/null and b/bin/audio/explode.wav differ
diff --git a/bin/audio/tank_fire.wav b/bin/audio/tank_fire.wav
new file mode 100644
index 0000000..85279eb
Binary files /dev/null and b/bin/audio/tank_fire.wav differ
diff --git a/bin/audio/tank_move.wav b/bin/audio/tank_move.wav
new file mode 100644
index 0000000..959b998
Binary files /dev/null and b/bin/audio/tank_move.wav differ
diff --git a/bin/audio/war1.wav b/bin/audio/war1.wav
new file mode 100644
index 0000000..099a31e
Binary files /dev/null and b/bin/audio/war1.wav differ
diff --git a/bin/com/tank/Audio.class b/bin/com/tank/Audio.class
new file mode 100644
index 0000000..3a4b2a5
Binary files /dev/null and b/bin/com/tank/Audio.class differ
diff --git a/bin/com/tank/Bullet.class b/bin/com/tank/Bullet.class
new file mode 100644
index 0000000..3c3c8dd
Binary files /dev/null and b/bin/com/tank/Bullet.class differ
diff --git a/bin/com/tank/DefaultFireStrategy.class b/bin/com/tank/DefaultFireStrategy.class
new file mode 100644
index 0000000..d67db61
Binary files /dev/null and b/bin/com/tank/DefaultFireStrategy.class differ
diff --git a/bin/com/tank/Dir.class b/bin/com/tank/Dir.class
new file mode 100644
index 0000000..f8960c6
Binary files /dev/null and b/bin/com/tank/Dir.class differ
diff --git a/bin/com/tank/Explode.class b/bin/com/tank/Explode.class
new file mode 100644
index 0000000..b730b70
Binary files /dev/null and b/bin/com/tank/Explode.class differ
diff --git a/bin/com/tank/FireStartegy.class b/bin/com/tank/FireStartegy.class
new file mode 100644
index 0000000..487733c
Binary files /dev/null and b/bin/com/tank/FireStartegy.class differ
diff --git a/bin/com/tank/FourDirFireStrategy.class b/bin/com/tank/FourDirFireStrategy.class
new file mode 100644
index 0000000..8bda125
Binary files /dev/null and b/bin/com/tank/FourDirFireStrategy.class differ
diff --git a/bin/com/tank/ImageUtil.class b/bin/com/tank/ImageUtil.class
new file mode 100644
index 0000000..1ec6820
Binary files /dev/null and b/bin/com/tank/ImageUtil.class differ
diff --git a/bin/com/tank/Main.class b/bin/com/tank/Main.class
new file mode 100644
index 0000000..2c87f83
Binary files /dev/null and b/bin/com/tank/Main.class differ
diff --git a/bin/com/tank/PropertyMrg.class b/bin/com/tank/PropertyMrg.class
new file mode 100644
index 0000000..8ed0557
Binary files /dev/null and b/bin/com/tank/PropertyMrg.class differ
diff --git a/bin/com/tank/ResouceMgr.class b/bin/com/tank/ResouceMgr.class
new file mode 100644
index 0000000..96c0461
Binary files /dev/null and b/bin/com/tank/ResouceMgr.class differ
diff --git a/bin/com/tank/Tank.class b/bin/com/tank/Tank.class
new file mode 100644
index 0000000..15bbbaf
Binary files /dev/null and b/bin/com/tank/Tank.class differ
diff --git a/bin/com/tank/TankFrame$1.class b/bin/com/tank/TankFrame$1.class
new file mode 100644
index 0000000..baa79c2
Binary files /dev/null and b/bin/com/tank/TankFrame$1.class differ
diff --git a/bin/com/tank/TankFrame$MyKeyListener.class b/bin/com/tank/TankFrame$MyKeyListener.class
new file mode 100644
index 0000000..c604aa3
Binary files /dev/null and b/bin/com/tank/TankFrame$MyKeyListener.class differ
diff --git a/bin/com/tank/TankFrame.class b/bin/com/tank/TankFrame.class
new file mode 100644
index 0000000..cf8dc28
Binary files /dev/null and b/bin/com/tank/TankFrame.class differ
diff --git a/bin/com/tank/TankGroup.class b/bin/com/tank/TankGroup.class
new file mode 100644
index 0000000..56d8037
Binary files /dev/null and b/bin/com/tank/TankGroup.class differ
diff --git a/bin/com/tank/TestTank$1.class b/bin/com/tank/TestTank$1.class
new file mode 100644
index 0000000..5f2b7fb
Binary files /dev/null and b/bin/com/tank/TestTank$1.class differ
diff --git a/bin/com/tank/TestTank.class b/bin/com/tank/TestTank.class
new file mode 100644
index 0000000..18852c5
Binary files /dev/null and b/bin/com/tank/TestTank.class differ
diff --git a/bin/com/tank/abstractfactory/BaseBullet.class b/bin/com/tank/abstractfactory/BaseBullet.class
new file mode 100644
index 0000000..d14fe75
Binary files /dev/null and b/bin/com/tank/abstractfactory/BaseBullet.class differ
diff --git a/bin/com/tank/abstractfactory/BaseExplode.class b/bin/com/tank/abstractfactory/BaseExplode.class
new file mode 100644
index 0000000..2230a46
Binary files /dev/null and b/bin/com/tank/abstractfactory/BaseExplode.class differ
diff --git a/bin/com/tank/abstractfactory/BaseTank.class b/bin/com/tank/abstractfactory/BaseTank.class
new file mode 100644
index 0000000..570a365
Binary files /dev/null and b/bin/com/tank/abstractfactory/BaseTank.class differ
diff --git a/bin/com/tank/abstractfactory/DefaultFactory.class b/bin/com/tank/abstractfactory/DefaultFactory.class
new file mode 100644
index 0000000..66098b3
Binary files /dev/null and b/bin/com/tank/abstractfactory/DefaultFactory.class differ
diff --git a/bin/com/tank/abstractfactory/GameFactory.class b/bin/com/tank/abstractfactory/GameFactory.class
new file mode 100644
index 0000000..ad6dbef
Binary files /dev/null and b/bin/com/tank/abstractfactory/GameFactory.class differ
diff --git a/bin/config b/bin/config
new file mode 100644
index 0000000..8e033f0
--- /dev/null
+++ b/bin/config
@@ -0,0 +1,9 @@
+#设置坦克数量
+initTanCount=5
+tankSpeed=5
+bulletSpeed=10
+gameWidth=1080
+gameHeight=720
+#fire
+goodFS=com.tank.FourDirFireStrategy
+badFS=com.tank.DefaultFireStrategy
diff --git a/bin/images/0.gif b/bin/images/0.gif
new file mode 100644
index 0000000..79c5218
Binary files /dev/null and b/bin/images/0.gif differ
diff --git a/bin/images/1.gif b/bin/images/1.gif
new file mode 100644
index 0000000..eface51
Binary files /dev/null and b/bin/images/1.gif differ
diff --git a/bin/images/10.gif b/bin/images/10.gif
new file mode 100644
index 0000000..ffd49b8
Binary files /dev/null and b/bin/images/10.gif differ
diff --git a/bin/images/2.gif b/bin/images/2.gif
new file mode 100644
index 0000000..b88b47e
Binary files /dev/null and b/bin/images/2.gif differ
diff --git a/bin/images/3.gif b/bin/images/3.gif
new file mode 100644
index 0000000..88e81e8
Binary files /dev/null and b/bin/images/3.gif differ
diff --git a/bin/images/4.gif b/bin/images/4.gif
new file mode 100644
index 0000000..4cc91ab
Binary files /dev/null and b/bin/images/4.gif differ
diff --git a/bin/images/5.gif b/bin/images/5.gif
new file mode 100644
index 0000000..c1cc5d7
Binary files /dev/null and b/bin/images/5.gif differ
diff --git a/bin/images/6.gif b/bin/images/6.gif
new file mode 100644
index 0000000..4f43fc7
Binary files /dev/null and b/bin/images/6.gif differ
diff --git a/bin/images/7.gif b/bin/images/7.gif
new file mode 100644
index 0000000..20358ba
Binary files /dev/null and b/bin/images/7.gif differ
diff --git a/bin/images/8.gif b/bin/images/8.gif
new file mode 100644
index 0000000..ae410c9
Binary files /dev/null and b/bin/images/8.gif differ
diff --git a/bin/images/9.gif b/bin/images/9.gif
new file mode 100644
index 0000000..11efedd
Binary files /dev/null and b/bin/images/9.gif differ
diff --git a/bin/images/BadTank1.png b/bin/images/BadTank1.png
new file mode 100644
index 0000000..d661b80
Binary files /dev/null and b/bin/images/BadTank1.png differ
diff --git a/bin/images/BadTank2.png b/bin/images/BadTank2.png
new file mode 100644
index 0000000..c2a2b01
Binary files /dev/null and b/bin/images/BadTank2.png differ
diff --git a/bin/images/GoodTank1.png b/bin/images/GoodTank1.png
new file mode 100644
index 0000000..8afb8b0
Binary files /dev/null and b/bin/images/GoodTank1.png differ
diff --git a/bin/images/GoodTank2.png b/bin/images/GoodTank2.png
new file mode 100644
index 0000000..a1b131a
Binary files /dev/null and b/bin/images/GoodTank2.png differ
diff --git a/bin/images/bulletD.gif b/bin/images/bulletD.gif
new file mode 100644
index 0000000..be33e5f
Binary files /dev/null and b/bin/images/bulletD.gif differ
diff --git a/bin/images/bulletL.gif b/bin/images/bulletL.gif
new file mode 100644
index 0000000..1ab986a
Binary files /dev/null and b/bin/images/bulletL.gif differ
diff --git a/bin/images/bulletR.gif b/bin/images/bulletR.gif
new file mode 100644
index 0000000..514e982
Binary files /dev/null and b/bin/images/bulletR.gif differ
diff --git a/bin/images/bulletU.gif b/bin/images/bulletU.gif
new file mode 100644
index 0000000..274c570
Binary files /dev/null and b/bin/images/bulletU.gif differ
diff --git a/bin/images/bulletU.png b/bin/images/bulletU.png
new file mode 100644
index 0000000..f6f7203
Binary files /dev/null and b/bin/images/bulletU.png differ
diff --git a/bin/images/e1.gif b/bin/images/e1.gif
new file mode 100644
index 0000000..4ba0e92
Binary files /dev/null and b/bin/images/e1.gif differ
diff --git a/bin/images/e10.gif b/bin/images/e10.gif
new file mode 100644
index 0000000..5667574
Binary files /dev/null and b/bin/images/e10.gif differ
diff --git a/bin/images/e11.gif b/bin/images/e11.gif
new file mode 100644
index 0000000..7d6747c
Binary files /dev/null and b/bin/images/e11.gif differ
diff --git a/bin/images/e12.gif b/bin/images/e12.gif
new file mode 100644
index 0000000..97f85df
Binary files /dev/null and b/bin/images/e12.gif differ
diff --git a/bin/images/e13.gif b/bin/images/e13.gif
new file mode 100644
index 0000000..473cab1
Binary files /dev/null and b/bin/images/e13.gif differ
diff --git a/bin/images/e14.gif b/bin/images/e14.gif
new file mode 100644
index 0000000..676fa2a
Binary files /dev/null and b/bin/images/e14.gif differ
diff --git a/bin/images/e15.gif b/bin/images/e15.gif
new file mode 100644
index 0000000..d3795f8
Binary files /dev/null and b/bin/images/e15.gif differ
diff --git a/bin/images/e16.gif b/bin/images/e16.gif
new file mode 100644
index 0000000..4a913c3
Binary files /dev/null and b/bin/images/e16.gif differ
diff --git a/bin/images/e2.gif b/bin/images/e2.gif
new file mode 100644
index 0000000..f22cbb8
Binary files /dev/null and b/bin/images/e2.gif differ
diff --git a/bin/images/e3.gif b/bin/images/e3.gif
new file mode 100644
index 0000000..58c1e2a
Binary files /dev/null and b/bin/images/e3.gif differ
diff --git a/bin/images/e4.gif b/bin/images/e4.gif
new file mode 100644
index 0000000..981e9e2
Binary files /dev/null and b/bin/images/e4.gif differ
diff --git a/bin/images/e5.gif b/bin/images/e5.gif
new file mode 100644
index 0000000..fc93522
Binary files /dev/null and b/bin/images/e5.gif differ
diff --git a/bin/images/e6.gif b/bin/images/e6.gif
new file mode 100644
index 0000000..1bba69a
Binary files /dev/null and b/bin/images/e6.gif differ
diff --git a/bin/images/e7.gif b/bin/images/e7.gif
new file mode 100644
index 0000000..9719061
Binary files /dev/null and b/bin/images/e7.gif differ
diff --git a/bin/images/e8.gif b/bin/images/e8.gif
new file mode 100644
index 0000000..710d7ea
Binary files /dev/null and b/bin/images/e8.gif differ
diff --git a/bin/images/e9.gif b/bin/images/e9.gif
new file mode 100644
index 0000000..0535c88
Binary files /dev/null and b/bin/images/e9.gif differ
diff --git a/bin/images/missileLD.gif b/bin/images/missileLD.gif
new file mode 100644
index 0000000..4a1d311
Binary files /dev/null and b/bin/images/missileLD.gif differ
diff --git a/bin/images/missileLU.gif b/bin/images/missileLU.gif
new file mode 100644
index 0000000..e1fb913
Binary files /dev/null and b/bin/images/missileLU.gif differ
diff --git a/bin/images/missileRD.gif b/bin/images/missileRD.gif
new file mode 100644
index 0000000..d58cc9c
Binary files /dev/null and b/bin/images/missileRD.gif differ
diff --git a/bin/images/missileRU.gif b/bin/images/missileRU.gif
new file mode 100644
index 0000000..1eed195
Binary files /dev/null and b/bin/images/missileRU.gif differ
diff --git a/bin/images/square0.jpg b/bin/images/square0.jpg
new file mode 100644
index 0000000..5b80bf0
Binary files /dev/null and b/bin/images/square0.jpg differ
diff --git a/bin/images/square1.jpg b/bin/images/square1.jpg
new file mode 100644
index 0000000..324341d
Binary files /dev/null and b/bin/images/square1.jpg differ
diff --git a/bin/images/square2.jpg b/bin/images/square2.jpg
new file mode 100644
index 0000000..be66ad8
Binary files /dev/null and b/bin/images/square2.jpg differ
diff --git a/bin/images/square3.jpg b/bin/images/square3.jpg
new file mode 100644
index 0000000..109430b
Binary files /dev/null and b/bin/images/square3.jpg differ
diff --git a/bin/images/square4.jpg b/bin/images/square4.jpg
new file mode 100644
index 0000000..ba00d68
Binary files /dev/null and b/bin/images/square4.jpg differ
diff --git a/bin/images/square5.jpg b/bin/images/square5.jpg
new file mode 100644
index 0000000..56198aa
Binary files /dev/null and b/bin/images/square5.jpg differ
diff --git a/bin/images/square6.jpg b/bin/images/square6.jpg
new file mode 100644
index 0000000..2923b9a
Binary files /dev/null and b/bin/images/square6.jpg differ
diff --git a/bin/images/tank.png b/bin/images/tank.png
new file mode 100644
index 0000000..54c82ba
Binary files /dev/null and b/bin/images/tank.png differ
diff --git a/bin/images/tankD.gif b/bin/images/tankD.gif
new file mode 100644
index 0000000..4c29adf
Binary files /dev/null and b/bin/images/tankD.gif differ
diff --git a/bin/images/tankL.gif b/bin/images/tankL.gif
new file mode 100644
index 0000000..af51e88
Binary files /dev/null and b/bin/images/tankL.gif differ
diff --git a/bin/images/tankLD.gif b/bin/images/tankLD.gif
new file mode 100644
index 0000000..2f6bca7
Binary files /dev/null and b/bin/images/tankLD.gif differ
diff --git a/bin/images/tankLU.gif b/bin/images/tankLU.gif
new file mode 100644
index 0000000..1e1a514
Binary files /dev/null and b/bin/images/tankLU.gif differ
diff --git a/bin/images/tankR.gif b/bin/images/tankR.gif
new file mode 100644
index 0000000..a83f583
Binary files /dev/null and b/bin/images/tankR.gif differ
diff --git a/bin/images/tankRD.gif b/bin/images/tankRD.gif
new file mode 100644
index 0000000..60e2e81
Binary files /dev/null and b/bin/images/tankRD.gif differ
diff --git a/bin/images/tankRU.gif b/bin/images/tankRU.gif
new file mode 100644
index 0000000..d66ef25
Binary files /dev/null and b/bin/images/tankRU.gif differ
diff --git a/bin/images/tankU.gif b/bin/images/tankU.gif
new file mode 100644
index 0000000..8825a23
Binary files /dev/null and b/bin/images/tankU.gif differ
diff --git a/bin/test/ImageTest.class b/bin/test/ImageTest.class
new file mode 100644
index 0000000..b229c2c
Binary files /dev/null and b/bin/test/ImageTest.class differ
diff --git a/src/audio/explode.wav b/src/audio/explode.wav
new file mode 100644
index 0000000..dc72ab1
Binary files /dev/null and b/src/audio/explode.wav differ
diff --git a/src/audio/tank_fire.wav b/src/audio/tank_fire.wav
new file mode 100644
index 0000000..85279eb
Binary files /dev/null and b/src/audio/tank_fire.wav differ
diff --git a/src/audio/tank_move.wav b/src/audio/tank_move.wav
new file mode 100644
index 0000000..959b998
Binary files /dev/null and b/src/audio/tank_move.wav differ
diff --git a/src/audio/war1.wav b/src/audio/war1.wav
new file mode 100644
index 0000000..099a31e
Binary files /dev/null and b/src/audio/war1.wav differ
diff --git a/src/com/tank/Audio.java b/src/com/tank/Audio.java
new file mode 100644
index 0000000..efcb8d6
--- /dev/null
+++ b/src/com/tank/Audio.java
@@ -0,0 +1,101 @@
+
+package com.tank;
+
+import java.io.IOException;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.DataLine;
+import javax.sound.sampled.FloatControl;
+import javax.sound.sampled.SourceDataLine;
+
+public class Audio {
+
+ byte[] b = new byte[1024 * 1024 * 15];
+
+
+ public void loop() {
+ try {
+
+ while (true) {
+ int len = 0;
+ sourceDataLine.open(audioFormat, 1024 * 1024 * 15);
+ sourceDataLine.start();
+ //System.out.println(audioInputStream.markSupported());
+ audioInputStream.mark(12358946);
+ while ((len = audioInputStream.read(b)) > 0) {
+ sourceDataLine.write(b, 0, len);
+ }
+ audioInputStream.reset();
+
+ sourceDataLine.drain();
+ sourceDataLine.close();
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private AudioFormat audioFormat = null;
+ private SourceDataLine sourceDataLine = null;
+ private DataLine.Info dataLine_info = null;
+
+ private AudioInputStream audioInputStream = null;
+
+ public Audio(String fileName) {
+ try {
+ audioInputStream = AudioSystem.getAudioInputStream(Audio.class.getClassLoader().getResource(fileName));
+ audioFormat = audioInputStream.getFormat();
+ dataLine_info = new DataLine.Info(SourceDataLine.class, audioFormat);
+ sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLine_info);
+ //FloatControl volctrl=(FloatControl)sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);
+ //volctrl.setValue(-40);//
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void play() {
+ try {
+ byte[] b = new byte[1024*5];
+ int len = 0;
+ sourceDataLine.open(audioFormat, 1024*5);
+ sourceDataLine.start();
+ //System.out.println(audioInputStream.markSupported());
+ audioInputStream.mark(12358946);
+ while ((len = audioInputStream.read(b)) > 0) {
+ sourceDataLine.write(b, 0, len);
+ }
+ // audioInputStream.reset();
+
+ sourceDataLine.drain();
+ sourceDataLine.close();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public void close() {
+ try {
+ audioInputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ //Audio a = new Audio("audio/explode.wav");
+ //Audio a = new Audio("audio/war1.wav");
+ Audio a = new Audio("audio/tank_fire.wav");
+ a.loop();
+ // a.play();
+
+ }
+
+}
diff --git a/src/com/tank/Bullet.java b/src/com/tank/Bullet.java
new file mode 100644
index 0000000..2160b69
--- /dev/null
+++ b/src/com/tank/Bullet.java
@@ -0,0 +1,147 @@
+package com.tank;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+
+import com.tank.abstractfactory.BaseBullet;
+
+/**
+ * 定义子弹类
+ * @author leiwei
+ *
+ */
+public class Bullet extends BaseBullet{
+
+ //子弹位置
+ private int x;
+ private int y;
+ //子弹方向
+ private Dir dir;
+
+ //子弹速度
+ private static final int SPEED = PropertyMrg.getInt("bulletSpeed");
+
+ //设置子弹的大小width,height
+ public static int width = ResouceMgr.bulletD.getWidth();
+
+ public static int height = ResouceMgr.bulletD.getHeight();
+ //定义子弹是否存活
+ private boolean living = true;
+
+ TankFrame tf=null;
+
+ private TankGroup group = TankGroup.BAD;
+
+
+ Rectangle rect = new Rectangle();
+
+
+
+
+ public Dir getDir() {
+ return dir;
+ }
+
+ public void setDir(Dir dir) {
+ this.dir = dir;
+ }
+
+ public Bullet(int x, int y, Dir dir,TankGroup group,TankFrame tf) {
+ super();
+ this.x = x;
+ this.y = y;
+ this.dir = dir;
+ this.tf = tf;
+ this.group = group;
+ rect.x = this.x;
+ rect.y = this.y;
+ rect.width = width;
+ rect.height = height;
+ //将子弹添加子弹队列中
+ tf.bullets.add(this);
+ }
+ //子弹显示出来
+ @Override
+ public void paint(Graphics p){
+ if(!this.living){
+ tf.bullets.remove(this);
+ }
+ /*//获取画笔原来颜色
+ Color color = p.getColor();
+ //设置将要画出的子弹颜色
+ p.setColor(Color.red);
+ p.fillOval(x,y,width,height);
+ //画完子弹后将画笔颜色还原
+ p.setColor(color);*/
+ //将子弹根据方向画出来
+ switch (dir) {
+ case LEFT:
+ p.drawImage(ResouceMgr.bulletL, x, y, null);
+ break;
+ case UP:
+ p.drawImage(ResouceMgr.bulletU, x, y, null);
+ break;
+ case RIGHT:
+ p.drawImage(ResouceMgr.bulletR, x, y, null);
+ break;
+ case DOWN:
+ p.drawImage(ResouceMgr.bulletD, x, y, null);
+ break;
+ }
+
+ moving();
+ }
+
+
+ public void moving(){
+ //通过判断方向进行子弹的移动。
+ switch(dir){
+ case LEFT:
+ x-=SPEED;
+ break;
+ case UP:
+ y-=SPEED;
+ break;
+ case RIGHT:
+ x+=SPEED;
+ break;
+ case DOWN:
+ y+=SPEED;
+ break;
+ default:
+ break;
+ }
+ if(x<0 || y<0 || x > TankFrame.GAME_WIDTH || y>TankFrame.GAME_HEIGHT){
+ this.living =false;
+ }
+ rect.x = this.x;
+ rect.y = this.y;
+ }
+
+ @Override
+ public void collideWith(Tank t) {
+ if(this.group.equals(t.getGroup())){
+ return;
+ }
+
+ if(this.rect.intersects(t.rect)){
+ t.die();
+ this.die();
+ int eX = t.getX() + Tank.width/2 - Explode.width/2;
+ int eY = t.getY() + Tank.height/2 - Explode.height/2;
+ tf.explodes.add(tf.gf.createExplode(eX, eY, tf));
+ }
+ }
+
+ public TankGroup getGroup() {
+ return group;
+ }
+
+ public void setGroup(TankGroup group) {
+ this.group = group;
+ }
+
+ private void die() {
+ this.living =false;
+ }
+}
diff --git a/src/com/tank/DefaultFireStrategy.java b/src/com/tank/DefaultFireStrategy.java
new file mode 100644
index 0000000..2ebfc9e
--- /dev/null
+++ b/src/com/tank/DefaultFireStrategy.java
@@ -0,0 +1,29 @@
+package com.tank;
+
+public class DefaultFireStrategy implements FireStartegy {
+/*
+ private static final DefaultFireStrategy defaultFireStrategy = new DefaultFireStrategy();
+
+ private DefaultFireStrategy() {
+ }
+
+ public static DefaultFireStrategy getDefualtFireStrategy(){
+ return defaultFireStrategy;
+ }
+ */
+ @Override
+ public void fire(Tank t) {
+
+ //计算子弹的坐标
+ int bX = t.x + Tank.width/2-Bullet.width/3;
+ int bY = t.y + Tank.width/2-Bullet.height/3;
+
+ //可以添加多个子弹
+ new Bullet(bX,bY,t.dir,t.group,t.tf);
+ /*if(t.group == TankGroup.GOOD){
+ Audio a = new Audio("audio/tank_fire.wav");
+ a.play();
+ }*/
+ }
+
+}
diff --git a/src/com/tank/Dir.java b/src/com/tank/Dir.java
new file mode 100644
index 0000000..93ea5b6
--- /dev/null
+++ b/src/com/tank/Dir.java
@@ -0,0 +1,6 @@
+package com.tank;
+
+public enum Dir {
+ //设置方向
+ LEFT,RIGHT,UP,DOWN
+}
diff --git a/src/com/tank/Explode.java b/src/com/tank/Explode.java
new file mode 100644
index 0000000..6d57261
--- /dev/null
+++ b/src/com/tank/Explode.java
@@ -0,0 +1,42 @@
+package com.tank;
+
+import java.awt.Graphics;
+import java.awt.Rectangle;
+
+import com.tank.abstractfactory.BaseExplode;
+
+/**
+ * 爆炸
+ * @author leiwei
+ *
+ */
+public class Explode extends BaseExplode{
+
+ private int x;
+ private int y;
+
+ public static int width = ResouceMgr.explodes[0].getWidth();
+
+ public static int height = ResouceMgr.explodes[0].getHeight();
+
+ TankFrame tf=null;
+
+ private int step = 0;
+
+ public Explode(int x, int y,TankFrame tf) {
+ super();
+ this.x = x;
+ this.y = y;
+ this.tf = tf;
+ }
+ //显示爆炸
+ @Override
+ public void paint(Graphics p){
+ int eX = this.x+Tank.width/2-Explode.width/2;
+ int eY = this.y+Tank.width/2-Explode.height/2;
+ p.drawImage(ResouceMgr.explodes[step++], eX, eY, null);
+ if(step >= ResouceMgr.explodes.length){
+ tf.explodes.remove(this);
+ }
+ }
+}
diff --git a/src/com/tank/FireStartegy.java b/src/com/tank/FireStartegy.java
new file mode 100644
index 0000000..413259d
--- /dev/null
+++ b/src/com/tank/FireStartegy.java
@@ -0,0 +1,6 @@
+package com.tank;
+
+public interface FireStartegy {
+
+ public void fire(Tank t);
+}
diff --git a/src/com/tank/FourDirFireStrategy.java b/src/com/tank/FourDirFireStrategy.java
new file mode 100644
index 0000000..4688c97
--- /dev/null
+++ b/src/com/tank/FourDirFireStrategy.java
@@ -0,0 +1,38 @@
+package com.tank;
+
+import java.util.ArrayList;
+
+public class FourDirFireStrategy implements FireStartegy{
+ /*private static FourDirFireStrategy fourDirFireStrategy ;
+
+ private FourDirFireStrategy() {
+ }
+
+ public static FourDirFireStrategy getFourDirFir(){
+
+ if(fourDirFireStrategy == null){
+ synchronized (FourDirFireStrategy.class) {
+ if(fourDirFireStrategy == null){
+ fourDirFireStrategy = new FourDirFireStrategy();
+ }
+ }
+ }
+ return fourDirFireStrategy;
+ }*/
+
+ @Override
+ public void fire(Tank t) {
+
+ //计算子弹的坐标
+ int bX = t.x + Tank.width/2-Bullet.width/3;
+ int bY = t.y + Tank.width/2-Bullet.height/3;
+ Dir[] dirs = Dir.values();
+ //可以添加多个子弹
+ for(Dir dir : dirs){
+ new Bullet(bX,bY,dir,t.group,t.tf);
+ }
+
+ }
+
+
+}
diff --git a/src/com/tank/ImageUtil.java b/src/com/tank/ImageUtil.java
new file mode 100644
index 0000000..f5d73c6
--- /dev/null
+++ b/src/com/tank/ImageUtil.java
@@ -0,0 +1,24 @@
+package com.tank;
+
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+
+public class ImageUtil {
+ public static BufferedImage rotateImage(final BufferedImage bufferedimage,
+ final int degree) {
+ int w = bufferedimage.getWidth();
+ int h = bufferedimage.getHeight();
+ int type = bufferedimage.getColorModel().getTransparency();
+ BufferedImage img;
+ Graphics2D graphics2d;
+ (graphics2d = (img = new BufferedImage(w, h, type))
+ .createGraphics()).setRenderingHint(
+ RenderingHints.KEY_INTERPOLATION,
+ RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
+ graphics2d.drawImage(bufferedimage, 0, 0, null);
+ graphics2d.dispose();
+ return img;
+ }
+}
diff --git a/src/com/tank/Main.java b/src/com/tank/Main.java
new file mode 100644
index 0000000..b99b361
--- /dev/null
+++ b/src/com/tank/Main.java
@@ -0,0 +1,22 @@
+package com.tank;
+
+public class Main {
+
+ public static void main(String[] args) throws InterruptedException {
+ TankFrame tf = new TankFrame();
+
+ int initTankCount = PropertyMrg.getInt("initTanCount");
+
+ //敌方坦克
+ for(int i=0;i95){
+ this.fire();
+ randomDir();
+ }
+
+ //添加边界检测
+ boundCheck();
+ rect.x = this.x;
+ rect.y = this.y;
+ }
+ //碰撞边界方法
+ private void boundCheck() {
+ if (this.x <2){ x = 2;}
+ if (this.y <28){ y = 28;}
+ if (this.x > (tf.getWidth() - Tank.width - 2)){ x = (tf.getWidth() - Tank.width - 2);}
+ if (this.y > (tf.getHeight() - Tank.height - 2)){ y = (tf.getHeight() - Tank.height - 2);}
+ }
+
+ //随机给坦克一个方向
+ private void randomDir() {
+ this.dir = Dir.values()[random.nextInt(4)];
+ }
+
+ @Override
+ public void paint(Graphics p){
+ /*Color tankc = p.getColor();
+ p.setColor(Color.BLUE);
+ //fillRect 绘制矩形 x,y是矩形相对弹窗原点坐标距离; windth 矩形的宽、height:矩形的高
+ p.fillRect(x, y, 50, 50);
+ p.setColor(tankc);*/
+ if(!this.living){
+ tf.enemyTanks.remove(this);
+ }
+ //根据不同的方向显示不同方向的坦克
+ switch (dir) {
+ case LEFT:
+ //将坦克的图片画出来
+ p.drawImage(this.group == TankGroup.GOOD ? ResouceMgr.goodTankL:ResouceMgr.badTankL, x, y, null);
+ break;
+ case RIGHT:
+ //将坦克的图片画出来
+ p.drawImage(this.group == TankGroup.GOOD ? ResouceMgr.goodTankR:ResouceMgr.badTankR, x, y, null);
+ break;
+ case UP:
+ //将坦克的图片画出来
+ p.drawImage(this.group == TankGroup.GOOD ? ResouceMgr.goodTankU:ResouceMgr.badTankU, x, y, null);
+ break;
+ case DOWN:
+ //将坦克的图片画出来
+ p.drawImage(this.group == TankGroup.GOOD ? ResouceMgr.goodTankD:ResouceMgr.badTankD, x, y, null);
+ break;
+ }
+
+
+
+ moving();
+ }
+ public void setDir(Dir dir) {
+ this.dir = dir;
+ }
+
+ public void setMoving(boolean moving) {
+ this.moving = moving;
+ }
+
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public void die() {
+ this.living =false;
+ }
+
+}
diff --git a/src/com/tank/TankFrame.java b/src/com/tank/TankFrame.java
new file mode 100644
index 0000000..ee07653
--- /dev/null
+++ b/src/com/tank/TankFrame.java
@@ -0,0 +1,207 @@
+package com.tank;
+
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+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;
+
+import com.tank.abstractfactory.BaseBullet;
+import com.tank.abstractfactory.BaseExplode;
+import com.tank.abstractfactory.DefaultFactory;
+import com.tank.abstractfactory.GameFactory;
+//TankFrame 继承Frame是为了重新Frame中的方法
+public class TankFrame extends Frame{
+ //Tank
+ Tank myTank = new Tank(400,730,Dir.UP,TankGroup.GOOD,this);
+ //子弹
+ public List bullets = new ArrayList();
+// Bullet bullet = new Bullet(600,600,Dir.UP);
+ static final int GAME_WIDTH = PropertyMrg.getInt("gameWidth") , GAME_HEIGHT = PropertyMrg.getInt("gameHeight");
+
+ //将敌人的坦克画出
+ List enemyTanks = new ArrayList();
+
+ //爆炸
+ List explodes = new ArrayList<>();
+
+ public GameFactory gf = new DefaultFactory();
+ //构造方法
+ public TankFrame(){
+ this.setSize(GAME_WIDTH, GAME_HEIGHT);
+ this.setResizable(false);
+ this.setTitle("TankFrame继承Frame");
+ this.setVisible(true);
+ this.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ System.exit(0);
+ }
+ });
+ //设置键盘监听
+ this.addKeyListener(new MyKeyListener());
+ }
+
+ //定义图片
+ Image offScreenImage = null;
+ /**
+ * 屏幕中闪烁是因为屏幕刷新速度非常快,而内存加载 数据跟不上导致出现闪烁现象
+ * 先在内存中将图片画出来,然后在将内存的图片显示在屏幕上(这样就可以消除闪烁的现象)
+ */
+ @Override
+ public void update(Graphics p){
+ //先在内存中设置图片大小
+ if(null == offScreenImage){
+ offScreenImage = this.createImage(GAME_WIDTH,GAME_HEIGHT);
+ }
+ //获取内存图片的画笔
+ Graphics goffScreen = offScreenImage.getGraphics();
+ //获取原来画笔的颜色
+ Color c = goffScreen.getColor();
+ //设置图片颜色
+ goffScreen.setColor(Color.BLACK);
+ //将图片在内存中画出来
+ goffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
+ //将原来的内存图片画笔颜色还原
+ goffScreen.setColor(c);
+ paint(goffScreen);
+ //调用屏幕的画笔将图片在屏幕中一次性画出来(将内存中的内容复制到显存中)
+ p.drawImage(offScreenImage,0,0,null);
+ }
+
+ //重写窗口重写绘制的时候自动执行的方法
+ //Graphics 类似画笔
+ @Override
+ public void paint(Graphics p){
+ Color c = p.getColor();
+ p.setColor(Color.WHITE);
+ p.drawString("子弹的数量:"+bullets.size(), 10, 60);
+ p.drawString("敌方坦克的数量:"+enemyTanks.size(), 10, 80);
+ p.setColor(c);
+
+ myTank.paint(p);
+
+ //将多个子弹画出
+ //这种遍历方式在子弹类中进行删除子弹会报错,因为迭代器中不能再循环体外删除对象
+ /*for(Bullet bullet : bullets){
+ //子弹显示出来
+ bullet.paint(p);
+ }*/
+ for(int i=0;i