parent
8f015ee458
commit
acb756e651
@ -0,0 +1,13 @@
|
||||
package com.example.tankbattle;
|
||||
|
||||
public class DefaultFireStrategy implements FireStrategy{
|
||||
|
||||
@Override
|
||||
public void fire(Tank t) {
|
||||
int bX = t.x + Tank.WIDTH / 2 - Bullet.WIDTH / 2;
|
||||
int bY = t.y + Tank.HEIGHT / 2 - Bullet.HEIGHT / 2;
|
||||
new Bullet(bX, bY, t.dir, t.group, t.gm);
|
||||
|
||||
if(t.group == Group.GOOD) new Thread(()->new Audio("audio/tank_fire.wav").play()).start();
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package com.example.tankbattle;
|
||||
|
||||
public interface FireStrategy {
|
||||
void fire(Tank tank);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.example.tankbattle;
|
||||
|
||||
public class FourDirFireStrategy implements FireStrategy{
|
||||
|
||||
@Override
|
||||
public void fire(Tank t) {
|
||||
int bX = t.x + Tank.WIDTH / 2 - Bullet.WIDTH / 2;
|
||||
int bY = t.y + Tank.HEIGHT / 2 - Bullet.HEIGHT / 2;
|
||||
Dir[] dirs = Dir.values();
|
||||
for(Dir dir : dirs) {
|
||||
new Bullet(bX, bY, dir, t.group, t.gm);
|
||||
}
|
||||
if(t.group == Group.GOOD) new Thread(()->new Audio("audio/tank_fire.wav").play()).start();
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.example.tankbattle;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GameModel {
|
||||
Tank myTank = new Tank(200, 400, Dir.DOWN, Group.GOOD, this);
|
||||
|
||||
List<Bullet> bullets = new ArrayList<>();
|
||||
List<Tank> tanks = new ArrayList<>();
|
||||
List<Explode> explodes = new ArrayList<>();
|
||||
|
||||
public GameModel() {
|
||||
int initTankCount = Integer.valueOf(PropertyMgr.get("initTankCount"));
|
||||
|
||||
// 初始化敌方坦克
|
||||
for (int i = 0; i < initTankCount; i++) {
|
||||
tanks.add(new Tank(50 + i * 80, 200, Dir.DOWN, Group.BAD, this));
|
||||
}
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
Color c = g.getColor();
|
||||
g.setColor(Color.WHITE);
|
||||
g.drawString("子弹的数量:" + bullets.size(), 10, 60);
|
||||
g.drawString("敌方坦克的数量:" + tanks.size(), 10, 80);
|
||||
g.drawString("爆炸的数量:" + explodes.size(), 10, 100);
|
||||
g.setColor(c);
|
||||
|
||||
myTank.paint(g);
|
||||
for (int i = 0; i < bullets.size(); i++) {
|
||||
bullets.get(i).paint(g);
|
||||
}
|
||||
|
||||
for (int i = 0; i < tanks.size(); i++) {
|
||||
tanks.get(i).paint(g);
|
||||
}
|
||||
|
||||
for (int i = 0; i < explodes.size(); i++) {
|
||||
explodes.get(i).paint(g);
|
||||
}
|
||||
|
||||
for (int i = 0; i < bullets.size(); i++) {
|
||||
for (int j = 0; j < tanks.size(); j++)
|
||||
bullets.get(i).collideWith(tanks.get(j));
|
||||
}
|
||||
|
||||
// for (Iterator<Bullet> it = bullets.iterator(); it.hasNext()) {
|
||||
// Bullet b = it.next();
|
||||
// if (!b.live) it.remove();
|
||||
// }
|
||||
}
|
||||
|
||||
public Tank getMainTank() {
|
||||
return myTank;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue