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;
|
||||
|
||||
import com.study.tank.*;
|
||||
|
||||
/**
|
||||
* @author xsj
|
||||
* @date 2022/10/26 13:13
|
||||
*/
|
||||
public class DefaultFactory extends GameFactory {
|
||||
|
||||
@Override
|
||||
public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
return new Tank(x, y, dir, group, tankFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
return new Bullet(x,y,dir,group,tankFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||
return new Explode(x, y, tankFrame);
|
||||
}
|
||||
}
|
||||
//package com.study.tank.factory;
|
||||
//
|
||||
//import com.study.tank.*;
|
||||
//
|
||||
///**
|
||||
// * @author xsj
|
||||
// * @date 2022/10/26 13:13
|
||||
// */
|
||||
//public class DefaultFactory extends GameFactory {
|
||||
//
|
||||
// @Override
|
||||
// public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
// return new Tank(x, y, dir, group, tankFrame);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
// return new Bullet(x,y,dir,group,tankFrame);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||
// return new Explode(x, y, tankFrame);
|
||||
// }
|
||||
//}
|
||||
|
@ -1,46 +1,46 @@
|
||||
package com.study.tank.factory;
|
||||
|
||||
import com.study.tank.Audio;
|
||||
import com.study.tank.ImageManger;
|
||||
import com.study.tank.TankFrame;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @author xsj
|
||||
* @date 2022/10/26 13:37
|
||||
*/
|
||||
public class RectExplode extends BaseExplode {
|
||||
public static final int bWidth = ImageManger.explodes[0].getWidth();
|
||||
public static final int bHeight = ImageManger.explodes[0].getHeight();
|
||||
private int x, y;
|
||||
TankFrame tf = null;
|
||||
private int step = 0;
|
||||
|
||||
|
||||
public RectExplode(int x, int y, TankFrame tankFrame) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.tf = tankFrame;
|
||||
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
new Audio("audio/explode.wav").play();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
// g.drawImage(ImageManger.explodes[step++], x, y, null);
|
||||
Color c = g.getColor();
|
||||
g.setColor(Color.red);
|
||||
g.fillRect(x, y, 10 * step, 10 * step);
|
||||
// if (step >= ImageManger.explodes.length) {
|
||||
// tf.explodes.remove(this);
|
||||
// }
|
||||
step++;
|
||||
if (step > 5) tf.explodes.remove(this);
|
||||
g.setColor(c);
|
||||
}
|
||||
}
|
||||
//package com.study.tank.factory;
|
||||
//
|
||||
//import com.study.tank.Audio;
|
||||
//import com.study.tank.ImageManger;
|
||||
//import com.study.tank.TankFrame;
|
||||
//
|
||||
//import java.awt.*;
|
||||
//
|
||||
///**
|
||||
// * @author xsj
|
||||
// * @date 2022/10/26 13:37
|
||||
// */
|
||||
//public class RectExplode extends BaseExplode {
|
||||
// public static final int bWidth = ImageManger.explodes[0].getWidth();
|
||||
// public static final int bHeight = ImageManger.explodes[0].getHeight();
|
||||
// private int x, y;
|
||||
// TankFrame tf = null;
|
||||
// private int step = 0;
|
||||
//
|
||||
//
|
||||
// public RectExplode(int x, int y, TankFrame tankFrame) {
|
||||
// this.x = x;
|
||||
// this.y = y;
|
||||
// this.tf = tankFrame;
|
||||
//
|
||||
// new Thread(new Runnable() {
|
||||
// public void run() {
|
||||
// new Audio("audio/explode.wav").play();
|
||||
// }
|
||||
// }).start();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void paint(Graphics g) {
|
||||
//// g.drawImage(ImageManger.explodes[step++], x, y, null);
|
||||
// Color c = g.getColor();
|
||||
// g.setColor(Color.red);
|
||||
// g.fillRect(x, y, 10 * step, 10 * step);
|
||||
//// if (step >= ImageManger.explodes.length) {
|
||||
//// tf.explodes.remove(this);
|
||||
//// }
|
||||
// step++;
|
||||
// if (step > 5) tf.explodes.remove(this);
|
||||
// g.setColor(c);
|
||||
// }
|
||||
//}
|
||||
|
@ -1,25 +1,25 @@
|
||||
package com.study.tank.factory;
|
||||
|
||||
import com.study.tank.*;
|
||||
|
||||
/**
|
||||
* @author xsj
|
||||
* @date 2022/10/26 13:36
|
||||
*/
|
||||
public class RectFactory extends GameFactory {
|
||||
|
||||
@Override
|
||||
public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
return new WarTank(x, y, dir, group, tankFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
return new RoundBullet(x, y, dir, group, tankFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||
return new RectExplode(x, y, tankFrame);
|
||||
}
|
||||
}
|
||||
//package com.study.tank.factory;
|
||||
//
|
||||
//import com.study.tank.*;
|
||||
//
|
||||
///**
|
||||
// * @author xsj
|
||||
// * @date 2022/10/26 13:36
|
||||
// */
|
||||
//public class RectFactory extends GameFactory {
|
||||
//
|
||||
// @Override
|
||||
// public BaseTank createTank(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
// return new WarTank(x, y, dir, group, tankFrame);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public BaseBullet createBullet(int x, int y, Dir dir, Group group, TankFrame tankFrame) {
|
||||
// return new RoundBullet(x, y, dir, group, tankFrame);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public BaseExplode createExplode(int x, int y, TankFrame tankFrame) {
|
||||
// return new RectExplode(x, y, tankFrame);
|
||||
// }
|
||||
//}
|
||||
|
@ -1,170 +1,170 @@
|
||||
package com.study.tank.factory;
|
||||
|
||||
import com.study.tank.*;
|
||||
import com.study.tank.strategy.FireStrategy;
|
||||
import com.study.tank.strategy.Imp.DefaultFireStrategy;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @Description:
|
||||
* @Auther: xiaoshengjie
|
||||
* @Date: 2022/10/22/上午10:08
|
||||
*/
|
||||
public class WarTank extends BaseTank {
|
||||
public static final int tankWidth = ImageManger.goodTankU.getWidth();
|
||||
public static final int tankHeight = ImageManger.goodTankU.getHeight();
|
||||
private boolean moving = true;
|
||||
private int x, y;
|
||||
private boolean living = true;
|
||||
public Dir dir = Dir.DOWN;
|
||||
private final int speed = 4;
|
||||
public TankFrame tankFrame = null;
|
||||
private Random random = new Random();
|
||||
Group group = Group.BAD;
|
||||
|
||||
FireStrategy fs;
|
||||
|
||||
public Group getGroup() {
|
||||
return 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;
|
||||
//package com.study.tank.factory;
|
||||
//
|
||||
//import com.study.tank.*;
|
||||
//import com.study.tank.strategy.FireStrategy;
|
||||
//import com.study.tank.strategy.Imp.DefaultFireStrategy;
|
||||
//
|
||||
//import java.awt.*;
|
||||
//import java.util.Random;
|
||||
//
|
||||
///**
|
||||
// * @Description:
|
||||
// * @Auther: xiaoshengjie
|
||||
// * @Date: 2022/10/22/上午10:08
|
||||
// */
|
||||
//public class WarTank extends BaseTank {
|
||||
// public static final int tankWidth = ImageManger.goodTankU.getWidth();
|
||||
// public static final int tankHeight = ImageManger.goodTankU.getHeight();
|
||||
// private boolean moving = true;
|
||||
// private int x, y;
|
||||
// private boolean living = true;
|
||||
// public Dir dir = Dir.DOWN;
|
||||
// private final int speed = 4;
|
||||
// public TankFrame tankFrame = null;
|
||||
// private Random random = new Random();
|
||||
// Group group = Group.BAD;
|
||||
//
|
||||
// FireStrategy fs;
|
||||
//
|
||||
// public Group getGroup() {
|
||||
// return group;
|
||||
// }
|
||||
//
|
||||
// public void setGroup(Group group) {
|
||||
// this.group = group;
|
||||
this.tankFrame = tankFrame;
|
||||
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();
|
||||
} else {
|
||||
fs = new DefaultFireStrategy();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// public Tank(int x, int y, Dir dir, Group group, boolean moving, TankFrame tankFrame) {
|
||||
// }
|
||||
//
|
||||
// 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.tankFrame = tankFrame;
|
||||
// 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();
|
||||
// } 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;
|
||||
// }
|
||||
//
|
||||
// public void setY(int 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.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;
|
||||
}
|
||||
|
||||
public void setY(int 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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
System.out.println("war paint");
|
||||
if (!living) {
|
||||
tankFrame.tanks.remove(this);
|
||||
moving = false;
|
||||
return;
|
||||
}
|
||||
Color c = g.getColor();
|
||||
g.setColor(group == Group.GOOD ? Color.BLUE : Color.YELLOW);
|
||||
g.fillRect(x, y, 40, 40);
|
||||
g.setColor(c);
|
||||
move();
|
||||
}
|
||||
|
||||
public void move() {
|
||||
if (!living) return;
|
||||
if (!this.moving) return;
|
||||
switch (dir) {
|
||||
case LEFT:
|
||||
x -= speed;
|
||||
break;
|
||||
case RIGHT:
|
||||
x += speed;
|
||||
break;
|
||||
case UP:
|
||||
y -= speed;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
}
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void paint(Graphics g) {
|
||||
// System.out.println("war paint");
|
||||
// if (!living) {
|
||||
// tankFrame.tanks.remove(this);
|
||||
// moving = false;
|
||||
// return;
|
||||
// }
|
||||
// Color c = g.getColor();
|
||||
// g.setColor(group == Group.GOOD ? Color.BLUE : Color.YELLOW);
|
||||
// g.fillRect(x, y, 40, 40);
|
||||
// g.setColor(c);
|
||||
// move();
|
||||
// }
|
||||
//
|
||||
// public void move() {
|
||||
// if (!living) return;
|
||||
// if (!this.moving) return;
|
||||
// switch (dir) {
|
||||
// case LEFT:
|
||||
// x -= speed;
|
||||
// break;
|
||||
// case RIGHT:
|
||||
// x += speed;
|
||||
// break;
|
||||
// case UP:
|
||||
// y -= speed;
|
||||
// break;
|
||||
// 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;
|
||||
|
||||
import com.study.tank.Bullet;
|
||||
import com.study.tank.ImageManger;
|
||||
import com.study.tank.Tank;
|
||||
import com.study.tank.strategy.FireStrategy;
|
||||
|
||||
/**
|
||||
* @author xsj
|
||||
* @date 2022/10/25 10:30
|
||||
*/
|
||||
public class DefaultFireStrategy implements FireStrategy {
|
||||
|
||||
@Override
|
||||
public void fire(Tank tank) {
|
||||
int bx = tank.getX() + tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
||||
int by = tank.getY() + tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
||||
new Bullet(bx, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
}
|
||||
}
|
||||
//package com.study.tank.strategy.Imp;
|
||||
//
|
||||
//import com.study.tank.Bullet;
|
||||
//import com.study.tank.ImageManger;
|
||||
//import com.study.tank.Tank;
|
||||
//import com.study.tank.strategy.FireStrategy;
|
||||
//
|
||||
///**
|
||||
// * @author xsj
|
||||
// * @date 2022/10/25 10:30
|
||||
// */
|
||||
//public class DefaultFireStrategy implements FireStrategy {
|
||||
//
|
||||
// @Override
|
||||
// public void fire(Tank tank) {
|
||||
// int bx = tank.getX() + tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2 + 2;
|
||||
// int by = tank.getY() + tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2 + 2;
|
||||
// new Bullet(bx, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
// }
|
||||
//}
|
||||
|
@ -1,39 +1,39 @@
|
||||
package com.study.tank.strategy.Imp;
|
||||
|
||||
import com.study.tank.Bullet;
|
||||
import com.study.tank.ImageManger;
|
||||
import com.study.tank.Tank;
|
||||
import com.study.tank.strategy.FireStrategy;
|
||||
|
||||
/**
|
||||
* @author xsj
|
||||
* @date 2022/10/25 13:28
|
||||
*/
|
||||
public class GoodTankFireStrategy implements FireStrategy {
|
||||
|
||||
@Override
|
||||
public void fire(Tank tank) {
|
||||
int bx = tank.getX() + Tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2;
|
||||
int by = tank.getY() + Tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2;
|
||||
switch (tank.dir) {
|
||||
case DOWN:
|
||||
new Bullet(bx, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
new Bullet(bx, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
case LEFT:
|
||||
new Bullet(bx + 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
new Bullet(bx - 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//package com.study.tank.strategy.Imp;
|
||||
//
|
||||
//import com.study.tank.Bullet;
|
||||
//import com.study.tank.ImageManger;
|
||||
//import com.study.tank.Tank;
|
||||
//import com.study.tank.strategy.FireStrategy;
|
||||
//
|
||||
///**
|
||||
// * @author xsj
|
||||
// * @date 2022/10/25 13:28
|
||||
// */
|
||||
//public class GoodTankFireStrategy implements FireStrategy {
|
||||
//
|
||||
// @Override
|
||||
// public void fire(Tank tank) {
|
||||
// int bx = tank.getX() + Tank.tankWidth / 2 - ImageManger.bulletD.getWidth() / 2;
|
||||
// int by = tank.getY() + Tank.tankHeight / 2 - ImageManger.bulletD.getHeight() / 2;
|
||||
// switch (tank.dir) {
|
||||
// case DOWN:
|
||||
// new Bullet(bx, by + 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
// new Bullet(bx, by - 6, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
// break;
|
||||
// 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);
|
||||
// break;
|
||||
// case LEFT:
|
||||
// new Bullet(bx + 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
// new Bullet(bx - 6, by, tank.dir, tank.getGroup(), tank.tankFrame);
|
||||
// break;
|
||||
// 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);
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//}
|
||||
|
Loading…
Reference in new issue