import java.util.Random;
import java.util.Vector;
public class TankManager extends MIDlet implements GameManager {
public Maler maler;
public int status = GameManager.MAIN_MENU;
protected int screenWidth, screenHeight;
protected int koernigkeit, koernigkeit2;
protected String name;
public Tank tank1;
public Tank tank2;
public Tank base;
protected int lvl = 1;
protected Vector tankMenge = new Vector();
protected Vector missilesMenge = new Vector();
protected Vector brickwall = new Vector(); //
protected Vector metalwall = new Vector(); //
protected Vector grasswall = new Vector(); //
protected Vector waterwall = new Vector(); //
protected Vector enemyPosition;
protected Vector enemyType;
protected int playerPositionX;
protected int playerPositionY;
protected int bPositionX;
protected int bPositionY;
protected int tankAllNum;
protected int tankMaxNum;
protected int enemyTankNum;
protected static Random random = new Random();
protected boolean game = false;
protected boolean mapReady = true;
public static void main(String[] args) {
new TankManager();
}
public TankManager() {
init();
}
public void init() {
maler = new Maler(this);
maler.init();
screenWidth = maler.getScreenWidth();
screenHeight = maler.getScreenHeight();
koernigkeit = screenWidth / 30;
koernigkeit2 = koernigkeit / 2;
new MalerZeit(this).start();
}
public void aktualisieren() {
maler.repaint();
}
public void keyPressBehandeln(int key) {
if (status != GameManager.SPIELEN) {
maler.keyPressedBehandeln(key);
} else {
if (key == 10) {
this.setStatus(GameManager.PAUSE);
maler.setStatus(GameManager.PAUSE);
}
if (key == 27) {
this.setStatus(GameManager.EXIT);
maler.setStatus(GameManager.EXIT);
}
if (tank1 != null)
tank1.keyPressBehandeln(key);
}
}
public void keyReleaseBehandeln(int key) {
if (status == GameManager.SPIELEN) {
if (tank1 != null)
tank1.keyReleaseBehandeln(key);
}
}
public void malenkontrolle() {
switch (status) {
case GameManager.MAIN_MENU:
game = false;
lvl = 1;
maler.mainMenu();
break;
case GameManager.TANK_WAEHLEN:
maler.tankWaehlen();
break;
case GameManager.HELP:
maler.help();
break;
case GameManager.SPIELEN:
komponenteMalen();
break;
case GameManager.PAUSE:
komponenteMalen();
maler.pause();
break;
case GameManager.LEVEL:
maler.gameLevel(lvl);
break;
case GameManager.LOSE:
komponenteMalen();
maler.gameLose();
break;
case GameManager.EXIT:
komponenteMalen();
maler.gameExit();
break;
}
}
public void komponenteMalen() {
if (!game) {
mapLaden();
tanksLaden();
game = true;
}
if (mapReady) {
addEnemyTank();
if (tank1 == null) {
this.setStatus(GameManager.LOSE);
maler.setStatus(GameManager.LOSE);
}
if (base != null && base.energie <= 0) {
((TankManager) this).setStatus(GameManager.LOSE);
maler.setStatus(GameManager.LOSE);
}
if (tankAllNum + enemyTankNum == 0) {
game = false;
tankMenge.removeAllElements();
this.setStatus(GameManager.LEVEL);
maler.setStatus(GameManager.LEVEL);
}
gruppeMalen(brickwall);
gruppeMalen(tankMenge);
gruppeMalen(waterwall);
gruppeMalen(missilesMenge);
gruppeMalen(metalwall);
gruppeMalen(grasswall);
} else {
this.setStatus(GameManager.WIN);
maler.setStatus(GameManager.WIN);
}
}
protected void gruppeMalen(Vector gruppe) {
for (int i = 0; i < gruppe.size(); i++) {
((GameObject) gruppe.elementAt(i)).malen();
}
}
public void setStatus(int status) {
this.status = status;
}
public void mapLaden() {
tankMenge.removeAllElements();
tank1 = null;
tank2 = null;
base = null;
MapInfo map = new MapInfo(this, lvl++);
mapReady = map.read;
brickwall = map.brickWall;
metalwall = map.metalWall;
grasswall = map.grassWall;
waterwall = map.waterWall;
enemyPosition = map.enemyPosition;
playerPositionX = map.playerLocationX;
playerPositionY = map.playerLocationY;
tankAllNum = map.enemyAllNr;
tankMaxNum = map.enemyMaxNr;
bPositionX = map.baseLocationX;
bPositionY = map.baseLocationY;
enemyType = map.enemyType;
}
public void tanksLaden() {
if (mapReady) {
int a = enemyPosition.size();
int b = enemyType.size();
// build tanks
tank1 = new Tank(this, playerPositionX, playerPositionY, maler.tankType);
tankMenge.addElement(tank1);
if (bPositionX != 0) {
base = new Tank(this, bPositionX, bPositionY, 00);
tankMenge.addElement(base);
}
for (int i = 0; i < a; i++) {
int z = Math.abs(random.nextInt() % b);// rand.nextInt(b);
Integer tankTy = (Integer) enemyType.elementAt(z);
int tankType = tankTy.intValue();
Integer d = (Integer) enemyPosition.elementAt(i);
int d2 = d.intValue();
Tank enemyTank = new Tank(this, d2 / 100, d2 % 100, tankType);
tankMenge.addElement(enemyTank);
this.tankAllNum--;
}
}
}
public void addEnemyTank() {
enemyTankNum=tankMenge.size()-(tank1==null?0:1)-(tank2==null?0:1)-(base==null?0:1);
if (enemyTankNum < tankMaxNum && tankAllNum > 0) {
int f = enemyPosition.size();
int i = Math.abs(random.nextInt() % f);
int g = enemyType.size();
int h = Math.abs(random.nextInt() % g);
Integer tankTy2 = (Integer) enemyType.elementAt(h);
int tankType = tankTy2.intValue();
Integer y = (Integer) enemyPosition.elementAt(i);
int y2 = y.intValue();
Tank enemyTank = new Tank(this, y2 / 100, y2 % 100, tankType);
if (!enemyTank.stossenGegen(tankMenge)) {
tankMenge.addElement(enemyTank);
this.tankAllNum--;
}
}
}
public int getBlood(){
if(tank1!=null){
return tank1.energie/10;
}
return 0;
}
public int getTankMenge() {
return (tankAllNum + enemyTankNum);
}
}