parent
db28df2c9b
commit
0de31db767
@ -0,0 +1,57 @@
|
|||||||
|
package com.study.tank;
|
||||||
|
|
||||||
|
import com.study.tank.cor.BulletAndTankCollider;
|
||||||
|
import com.study.tank.cor.Collider;
|
||||||
|
import com.study.tank.cor.ColliderChain;
|
||||||
|
import com.study.tank.cor.TankTankCollider;
|
||||||
|
import com.study.tank.factory.BaseTank;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/27 14:30
|
||||||
|
*/
|
||||||
|
public class GameModel {
|
||||||
|
public Tank myTank = new Tank(150, 150, Dir.DOWN, Group.GOOD, this);
|
||||||
|
List<GameObject> gameModelList = new ArrayList<>();
|
||||||
|
//Collider collider1 = new BulletAndTankCollider();//子弹和坦克的碰撞
|
||||||
|
//Collider collider2 = new TankTankCollider();//坦克和坦克的碰撞
|
||||||
|
ColliderChain chain = new ColliderChain();
|
||||||
|
|
||||||
|
public GameModel() {
|
||||||
|
//初始化敌人坦克
|
||||||
|
int initCountTank = Integer.parseInt((String) PropertyMgr.get("initTankCount"));
|
||||||
|
for (int i = 0; i < initCountTank; i++) {
|
||||||
|
gameModelList.add(new Tank(80 + i * 100, 50, Dir.DOWN, Group.BAD, this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(GameObject object) {
|
||||||
|
this.gameModelList.add(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(GameObject object) {
|
||||||
|
this.gameModelList.remove(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g) {
|
||||||
|
myTank.paint(g);
|
||||||
|
for (int i = 0; i < gameModelList.size(); i++) {
|
||||||
|
gameModelList.get(i).paint(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < gameModelList.size(); i++) {
|
||||||
|
for (int j = 0; j < gameModelList.size(); j++) {
|
||||||
|
GameObject o1 = gameModelList.get(i);
|
||||||
|
GameObject o2 = gameModelList.get(j);
|
||||||
|
//collider1.collider(o1, o2, this);//
|
||||||
|
//collider2.collider(o1, o2, this);
|
||||||
|
chain.collider(o1, o2, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.study.tank;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/27 14:20
|
||||||
|
*/
|
||||||
|
public abstract class GameObject {
|
||||||
|
public int x, y;
|
||||||
|
|
||||||
|
public abstract void paint(Graphics g);
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.study.tank.cor;
|
||||||
|
|
||||||
|
import com.study.tank.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/27 17:13
|
||||||
|
*/
|
||||||
|
public class BulletAndTankCollider implements Collider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collider(GameObject o1, GameObject o2, GameModel gameModel) {
|
||||||
|
if (o1 instanceof Bullet && o2 instanceof Tank) {
|
||||||
|
Bullet bullet = (Bullet) o1;
|
||||||
|
Tank tank = (Tank) o2;
|
||||||
|
if (collideWithTank(bullet, tank, gameModel)) return true;
|
||||||
|
} else if (o1 instanceof Tank && o2 instanceof Bullet) {
|
||||||
|
return collider(o2, o1, gameModel);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean collideWithTank(Bullet bullet, Tank tank, GameModel gameModel) {
|
||||||
|
if (bullet.group == tank.getGroup()) return false;
|
||||||
|
Rectangle rect1 = new Rectangle(bullet.x, bullet.y, bullet.bWidth, bullet.bHeight);
|
||||||
|
Rectangle rect2 = new Rectangle(tank.getX(), tank.getY(), Tank.tankWidth, Tank.tankHeight);
|
||||||
|
//碰撞矩形
|
||||||
|
if (rect1.intersects(rect2)) {
|
||||||
|
tank.die();
|
||||||
|
bullet.die();
|
||||||
|
gameModel.add(new Explode(bullet.x + bullet.bWidth / 2 - Explode.bWidth / 2, bullet.y + bullet.bWidth - Explode.bHeight / 2, gameModel));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.study.tank.cor;
|
||||||
|
|
||||||
|
import com.study.tank.GameModel;
|
||||||
|
import com.study.tank.GameObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/27 15:39
|
||||||
|
*/
|
||||||
|
public interface Collider {
|
||||||
|
boolean collider(GameObject o1, GameObject o2, GameModel gameModel);
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.study.tank.cor;
|
||||||
|
|
||||||
|
import com.study.tank.GameModel;
|
||||||
|
import com.study.tank.GameObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/28 9:32
|
||||||
|
*/
|
||||||
|
public class ColliderChain implements Collider {
|
||||||
|
List<Collider> colliders = new ArrayList<>();
|
||||||
|
|
||||||
|
public ColliderChain() {
|
||||||
|
colliders.add(new BulletAndTankCollider());
|
||||||
|
colliders.add(new TankTankCollider());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collider(GameObject o1, GameObject o2, GameModel gameModel) {
|
||||||
|
for (Collider c : colliders) {
|
||||||
|
if (c.collider(o1, o2, gameModel)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.study.tank.cor;
|
||||||
|
|
||||||
|
import com.study.tank.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author xsj
|
||||||
|
* @date 2022/10/27 17:35
|
||||||
|
*/
|
||||||
|
public class TankTankCollider implements Collider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collider(GameObject o1, GameObject o2, GameModel gameModel) {
|
||||||
|
if (o1 instanceof Tank && o2 instanceof Tank) {
|
||||||
|
Tank tank1 = (Tank) o1;
|
||||||
|
Tank tank2 = (Tank) o2;
|
||||||
|
if (tank1.group == tank2.group) {
|
||||||
|
if (tank1.rectangle.intersects(tank2.rectangle)) {
|
||||||
|
tank1.stop();
|
||||||
|
tank2.stop();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//碰撞矩形
|
||||||
|
if (tank1.rectangle.intersects(tank2.rectangle)) {
|
||||||
|
tank1.die();
|
||||||
|
tank2.die();
|
||||||
|
gameModel.add(new Explode(tank1.getX() + tank1.tankWidth/2, tank1.y + tank1.tankHeight/2, gameModel));
|
||||||
|
gameModel.add(new Explode(tank2.getX() + tank2.tankWidth/2, tank2.y + tank2.tankHeight/2, gameModel));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -1,25 +1,25 @@
|
|||||||
package com.study.tank.factory;
|
//package com.study.tank.factory;
|
||||||
|
//
|
||||||
import com.study.tank.*;
|
//import com.study.tank.*;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @author xsj
|
// * @author xsj
|
||||||
* @date 2022/10/26 13:13
|
// * @date 2022/10/26 13:13
|
||||||
*/
|
// */
|
||||||
public class DefaultFactory extends GameFactory {
|
//public class DefaultFactory extends GameFactory {
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
// public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||||
return new Tank(x, y, dir, group, tankFrame);
|
// return new Tank(x, y, dir, group, tankFrame);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
// public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||||
return new Bullet(x,y,dir,group,tankFrame);
|
// return new Bullet(x,y,dir,group,tankFrame);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
// public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||||
return new Explode(x, y, tankFrame);
|
// return new Explode(x, y, tankFrame);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,46 +1,46 @@
|
|||||||
package com.study.tank.factory;
|
//package com.study.tank.factory;
|
||||||
|
//
|
||||||
import com.study.tank.Audio;
|
//import com.study.tank.Audio;
|
||||||
import com.study.tank.ImageManger;
|
//import com.study.tank.ImageManger;
|
||||||
import com.study.tank.TankFrame;
|
//import com.study.tank.TankFrame;
|
||||||
|
//
|
||||||
import java.awt.*;
|
//import java.awt.*;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @author xsj
|
// * @author xsj
|
||||||
* @date 2022/10/26 13:37
|
// * @date 2022/10/26 13:37
|
||||||
*/
|
// */
|
||||||
public class RectExplode extends BaseExplode {
|
//public class RectExplode extends BaseExplode {
|
||||||
public static final int bWidth = ImageManger.explodes[0].getWidth();
|
// public static final int bWidth = ImageManger.explodes[0].getWidth();
|
||||||
public static final int bHeight = ImageManger.explodes[0].getHeight();
|
// public static final int bHeight = ImageManger.explodes[0].getHeight();
|
||||||
private int x, y;
|
// private int x, y;
|
||||||
TankFrame tf = null;
|
// TankFrame tf = null;
|
||||||
private int step = 0;
|
// private int step = 0;
|
||||||
|
//
|
||||||
|
//
|
||||||
public RectExplode(int x, int y, TankFrame tankFrame) {
|
// public RectExplode(int x, int y, TankFrame tankFrame) {
|
||||||
this.x = x;
|
// this.x = x;
|
||||||
this.y = y;
|
// this.y = y;
|
||||||
this.tf = tankFrame;
|
// this.tf = tankFrame;
|
||||||
|
//
|
||||||
new Thread(new Runnable() {
|
// new Thread(new Runnable() {
|
||||||
public void run() {
|
// public void run() {
|
||||||
new Audio("audio/explode.wav").play();
|
// new Audio("audio/explode.wav").play();
|
||||||
}
|
// }
|
||||||
}).start();
|
// }).start();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void paint(Graphics g) {
|
// public void paint(Graphics g) {
|
||||||
// g.drawImage(ImageManger.explodes[step++], x, y, null);
|
//// g.drawImage(ImageManger.explodes[step++], x, y, null);
|
||||||
Color c = g.getColor();
|
// Color c = g.getColor();
|
||||||
g.setColor(Color.red);
|
// g.setColor(Color.red);
|
||||||
g.fillRect(x, y, 10 * step, 10 * step);
|
// g.fillRect(x, y, 10 * step, 10 * step);
|
||||||
// if (step >= ImageManger.explodes.length) {
|
//// if (step >= ImageManger.explodes.length) {
|
||||||
// tf.explodes.remove(this);
|
//// tf.explodes.remove(this);
|
||||||
// }
|
//// }
|
||||||
step++;
|
// step++;
|
||||||
if (step > 5) tf.explodes.remove(this);
|
// if (step > 5) tf.explodes.remove(this);
|
||||||
g.setColor(c);
|
// g.setColor(c);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
package com.study.tank.factory;
|
//package com.study.tank.factory;
|
||||||
|
//
|
||||||
import com.study.tank.*;
|
//import com.study.tank.*;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @author xsj
|
// * @author xsj
|
||||||
* @date 2022/10/26 13:36
|
// * @date 2022/10/26 13:36
|
||||||
*/
|
// */
|
||||||
public class RectFactory extends GameFactory {
|
//public class RectFactory extends GameFactory {
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
// public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||||
return new WarTank(x, y, dir, group, tankFrame);
|
// return new WarTank(x, y, dir, group, tankFrame);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
// public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||||
return new RoundBullet(x, y, dir, group, tankFrame);
|
// return new RoundBullet(x, y, dir, group, tankFrame);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
// public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||||
return new RectExplode(x, y, tankFrame);
|
// return new RectExplode(x, y, tankFrame);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,170 +1,170 @@
|
|||||||
package com.study.tank.factory;
|
//package com.study.tank.factory;
|
||||||
|
//
|
||||||
import com.study.tank.*;
|
//import com.study.tank.*;
|
||||||
import com.study.tank.strategy.FireStrategy;
|
//import com.study.tank.strategy.FireStrategy;
|
||||||
import com.study.tank.strategy.Imp.DefaultFireStrategy;
|
//import com.study.tank.strategy.Imp.DefaultFireStrategy;
|
||||||
|
//
|
||||||
import java.awt.*;
|
//import java.awt.*;
|
||||||
import java.util.Random;
|
//import java.util.Random;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @Description:
|
// * @Description:
|
||||||
* @Auther: xiaoshengjie
|
// * @Auther: xiaoshengjie
|
||||||
* @Date: 2022/10/22/上午10:08
|
// * @Date: 2022/10/22/上午10:08
|
||||||
*/
|
// */
|
||||||
public class WarTank extends BaseTank {
|
//public class WarTank extends BaseTank {
|
||||||
public static final int tankWidth = ImageManger.goodTankU.getWidth();
|
// public static final int tankWidth = ImageManger.goodTankU.getWidth();
|
||||||
public static final int tankHeight = ImageManger.goodTankU.getHeight();
|
// public static final int tankHeight = ImageManger.goodTankU.getHeight();
|
||||||
private boolean moving = true;
|
// private boolean moving = true;
|
||||||
private int x, y;
|
// private int x, y;
|
||||||
private boolean living = true;
|
// private boolean living = true;
|
||||||
public Dir dir = Dir.DOWN;
|
// public Dir dir = Dir.DOWN;
|
||||||
private final int speed = 4;
|
// private final int speed = 4;
|
||||||
public TankFrame tankFrame = null;
|
// public TankFrame tankFrame = null;
|
||||||
private Random random = new Random();
|
// private Random random = new Random();
|
||||||
Group group = Group.BAD;
|
// Group group = Group.BAD;
|
||||||
|
//
|
||||||
FireStrategy fs;
|
// FireStrategy fs;
|
||||||
|
//
|
||||||
public Group getGroup() {
|
// public Group getGroup() {
|
||||||
return group;
|
// return group;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public void setGroup(Group group) {
|
// public void setGroup(Group group) {
|
||||||
this.group = group;
|
|
||||||
}
|
|
||||||
|
|
||||||
public WarTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
|
||||||
// this.x = x;
|
|
||||||
// this.y = y;
|
|
||||||
super(x, y, group);
|
|
||||||
this.dir = dir;
|
|
||||||
// this.group = group;
|
// this.group = group;
|
||||||
this.tankFrame = tankFrame;
|
// }
|
||||||
try {
|
//
|
||||||
if (this.group == Group.GOOD) {
|
// public WarTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||||
String goodName = (String) PropertyMgr.get("goodFs");
|
//// this.x = x;
|
||||||
//fs = (GoodTankFireStrategy) Class.forName(goodName).newInstance();
|
//// this.y = y;
|
||||||
fs = (FireStrategy) Class.forName(goodName).getDeclaredConstructor().newInstance();
|
// super(x, y, group);
|
||||||
} else {
|
// this.dir = dir;
|
||||||
fs = new DefaultFireStrategy();
|
//// this.group = group;
|
||||||
}
|
// this.tankFrame = tankFrame;
|
||||||
} catch (Exception e) {
|
// try {
|
||||||
|
// if (this.group == Group.GOOD) {
|
||||||
}
|
// String goodName = (String) PropertyMgr.get("goodFs");
|
||||||
}
|
// //fs = (GoodTankFireStrategy) Class.forName(goodName).newInstance();
|
||||||
|
// fs = (FireStrategy) Class.forName(goodName).getDeclaredConstructor().newInstance();
|
||||||
// public Tank(int x, int y, Dir dir, Group group, boolean moving, TankFrame tankFrame) {
|
// } else {
|
||||||
|
// fs = new DefaultFireStrategy();
|
||||||
|
// }
|
||||||
|
// } catch (Exception e) {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//// public Tank(int x, int y, Dir dir, Group group, boolean moving, TankFrame tankFrame) {
|
||||||
|
//// this.x = x;
|
||||||
|
//// this.y = y;
|
||||||
|
//// this.dir = dir;
|
||||||
|
//// this.group = group;
|
||||||
|
//// this.tankFrame = tankFrame;
|
||||||
|
//// this.moving = false;
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// public int getX() {
|
||||||
|
// return x;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public int getY() {
|
||||||
|
// return y;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public Dir getDir() {
|
||||||
|
// return dir;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public int getSpeed() {
|
||||||
|
// return speed;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void setX(int x) {
|
||||||
// this.x = x;
|
// this.x = x;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void setY(int y) {
|
||||||
// this.y = y;
|
// this.y = y;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public boolean isMoving() {
|
||||||
|
// return moving;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void setMoving(boolean moving) {
|
||||||
|
// this.moving = moving;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void setDir(Dir dir) {
|
||||||
// this.dir = dir;
|
// this.dir = dir;
|
||||||
// this.group = group;
|
// }
|
||||||
// this.tankFrame = tankFrame;
|
//
|
||||||
// this.moving = false;
|
// @Override
|
||||||
// }
|
// public void paint(Graphics g) {
|
||||||
|
// System.out.println("war paint");
|
||||||
public int getX() {
|
// if (!living) {
|
||||||
return x;
|
// tankFrame.tanks.remove(this);
|
||||||
}
|
// moving = false;
|
||||||
|
// return;
|
||||||
public int getY() {
|
// }
|
||||||
return y;
|
// Color c = g.getColor();
|
||||||
}
|
// g.setColor(group == Group.GOOD ? Color.BLUE : Color.YELLOW);
|
||||||
|
// g.fillRect(x, y, 40, 40);
|
||||||
public Dir getDir() {
|
// g.setColor(c);
|
||||||
return dir;
|
// move();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public int getSpeed() {
|
// public void move() {
|
||||||
return speed;
|
// if (!living) return;
|
||||||
}
|
// if (!this.moving) return;
|
||||||
|
// switch (dir) {
|
||||||
public void setX(int x) {
|
// case LEFT:
|
||||||
this.x = x;
|
// x -= speed;
|
||||||
}
|
// break;
|
||||||
|
// case RIGHT:
|
||||||
public void setY(int y) {
|
// x += speed;
|
||||||
this.y = y;
|
// break;
|
||||||
}
|
// case UP:
|
||||||
|
// y -= speed;
|
||||||
public boolean isMoving() {
|
// break;
|
||||||
return moving;
|
// case DOWN:
|
||||||
}
|
// y += speed;
|
||||||
|
// break;
|
||||||
public void setMoving(boolean moving) {
|
// }
|
||||||
this.moving = moving;
|
// if (group == Group.BAD && random.nextInt(100) > 95)
|
||||||
}
|
// this.fire();
|
||||||
|
//
|
||||||
public void setDir(Dir dir) {
|
// if (this.group == Group.BAD && random.nextInt(100) > 95)
|
||||||
this.dir = dir;
|
// this.randomDir();
|
||||||
}
|
//
|
||||||
|
// boundsCheck();
|
||||||
@Override
|
// }
|
||||||
public void paint(Graphics g) {
|
//
|
||||||
System.out.println("war paint");
|
// private void boundsCheck() {
|
||||||
if (!living) {
|
// if (this.x < 0) x = TankFrame.GAME_WIDTH - WarTank.tankWidth;
|
||||||
tankFrame.tanks.remove(this);
|
// if (this.y < 28) y = TankFrame.GAME_HEIGHT - WarTank.tankHeight;
|
||||||
moving = false;
|
// if (this.x > TankFrame.GAME_WIDTH - tankWidth) x = 0;
|
||||||
return;
|
// if (this.y > TankFrame.GAME_HEIGHT - tankHeight) y = 28;
|
||||||
}
|
// }
|
||||||
Color c = g.getColor();
|
//
|
||||||
g.setColor(group == Group.GOOD ? Color.BLUE : Color.YELLOW);
|
// //0.4几率的随机方向
|
||||||
g.fillRect(x, y, 40, 40);
|
// private void randomDir() {
|
||||||
g.setColor(c);
|
// if (random.nextInt(100) > 60)
|
||||||
move();
|
// this.dir = Dir.values()[random.nextInt(4)];
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public void move() {
|
// /**
|
||||||
if (!living) return;
|
// * 开火
|
||||||
if (!this.moving) return;
|
// */
|
||||||
switch (dir) {
|
// public void fire() {
|
||||||
case LEFT:
|
// //fs.fire(this);
|
||||||
x -= speed;
|
// int bx = this.getX() + this.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
||||||
break;
|
// int by = this.getY() + this.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
||||||
case RIGHT:
|
// new Bullet(bx, by, this.dir, this.getGroup(), this.tankFrame);
|
||||||
x += speed;
|
// }
|
||||||
break;
|
//
|
||||||
case UP:
|
// @Override
|
||||||
y -= speed;
|
// public void die() {
|
||||||
break;
|
// this.living = false;
|
||||||
case DOWN:
|
// }
|
||||||
y += speed;
|
//}
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (group == Group.BAD && random.nextInt(100) > 95)
|
|
||||||
this.fire();
|
|
||||||
|
|
||||||
if (this.group == Group.BAD && random.nextInt(100) > 95)
|
|
||||||
this.randomDir();
|
|
||||||
|
|
||||||
boundsCheck();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void boundsCheck() {
|
|
||||||
if (this.x < 0) x = TankFrame.GAME_WIDTH - WarTank.tankWidth;
|
|
||||||
if (this.y < 28) y = TankFrame.GAME_HEIGHT - WarTank.tankHeight;
|
|
||||||
if (this.x > TankFrame.GAME_WIDTH - tankWidth) x = 0;
|
|
||||||
if (this.y > TankFrame.GAME_HEIGHT - tankHeight) y = 28;
|
|
||||||
}
|
|
||||||
|
|
||||||
//0.4几率的随机方向
|
|
||||||
private void randomDir() {
|
|
||||||
if (random.nextInt(100) > 60)
|
|
||||||
this.dir = Dir.values()[random.nextInt(4)];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 开火
|
|
||||||
*/
|
|
||||||
public void fire() {
|
|
||||||
//fs.fire(this);
|
|
||||||
int bx = this.getX() + this.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
|
||||||
int by = this.getY() + this.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
|
||||||
new Bullet(bx, by, this.dir, this.getGroup(), this.tankFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void die() {
|
|
||||||
this.living = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
package com.study.tank.strategy.Imp;
|
//package com.study.tank.strategy.Imp;
|
||||||
|
//
|
||||||
import com.study.tank.Bullet;
|
//import com.study.tank.Bullet;
|
||||||
import com.study.tank.ImageManger;
|
//import com.study.tank.ImageManger;
|
||||||
import com.study.tank.Tank;
|
//import com.study.tank.Tank;
|
||||||
import com.study.tank.strategy.FireStrategy;
|
//import com.study.tank.strategy.FireStrategy;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @author xsj
|
// * @author xsj
|
||||||
* @date 2022/10/25 10:30
|
// * @date 2022/10/25 10:30
|
||||||
*/
|
// */
|
||||||
public class DefaultFireStrategy implements FireStrategy {
|
//public class DefaultFireStrategy implements FireStrategy {
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void fire(Tank tank) {
|
// public void fire(Tank tank) {
|
||||||
int bx = tank.getX() + tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
// int bx = tank.getX() + tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
||||||
int by = tank.getY() + tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
// int by = tank.getY() + tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
||||||
new Bullet(bx, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,39 +1,39 @@
|
|||||||
package com.study.tank.strategy.Imp;
|
//package com.study.tank.strategy.Imp;
|
||||||
|
//
|
||||||
import com.study.tank.Bullet;
|
//import com.study.tank.Bullet;
|
||||||
import com.study.tank.ImageManger;
|
//import com.study.tank.ImageManger;
|
||||||
import com.study.tank.Tank;
|
//import com.study.tank.Tank;
|
||||||
import com.study.tank.strategy.FireStrategy;
|
//import com.study.tank.strategy.FireStrategy;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* @author xsj
|
// * @author xsj
|
||||||
* @date 2022/10/25 13:28
|
// * @date 2022/10/25 13:28
|
||||||
*/
|
// */
|
||||||
public class GoodTankFireStrategy implements FireStrategy {
|
//public class GoodTankFireStrategy implements FireStrategy {
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void fire(Tank tank) {
|
// public void fire(Tank tank) {
|
||||||
int bx = tank.getX() + Tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2;
|
// int bx = tank.getX() + Tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2;
|
||||||
int by = tank.getY() + Tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2;
|
// int by = tank.getY() + Tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2;
|
||||||
switch (tank.dir) {
|
// switch (tank.dir) {
|
||||||
case DOWN:
|
// case DOWN:
|
||||||
new Bullet(bx, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
new Bullet(bx, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
break;
|
// break;
|
||||||
case UP:
|
// case UP:
|
||||||
new Bullet(bx + 1, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx + 1, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
new Bullet(bx + 1, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx + 1, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
break;
|
// break;
|
||||||
case LEFT:
|
// case LEFT:
|
||||||
new Bullet(bx + 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx + 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
new Bullet(bx - 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx - 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
break;
|
// break;
|
||||||
case RIGHT:
|
// case RIGHT:
|
||||||
new Bullet(bx + 6, by + 1, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx + 6, by + 1, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
new Bullet(bx - 6, by + 1, tank.dir, tank.getGroup(), tank.tankFrame);
|
// new Bullet(bx - 6, by + 1, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
Loading…
Reference in new issue