diff --git a/src/resources/mountainofdoom.png b/src/resources/mountainofdoom.png index f4b1b6f69ec048d703cf3711209a7fb9f50dbced..3d1cacc82c44a415e957bb0edbc0fb6cfc2db6a8 100644 Binary files a/src/resources/mountainofdoom.png and b/src/resources/mountainofdoom.png differ diff --git a/src/view/FieldView.java b/src/view/FieldView.java index 18c8003966627b9c5871de449d5c8d391485aed0..095a1a576806c3cc5b25f8feb968f11cd4cbe290 100644 --- a/src/view/FieldView.java +++ b/src/view/FieldView.java @@ -1,5 +1,7 @@ package view; +import java.awt.Color; +import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.io.*; @@ -23,6 +25,7 @@ public class FieldView { private static Image roadturnleftdownimage; private static Image roadturnlefttopimage; private static Image roadturntoprightimage; + private static Font enemyCountFont; static { try { @@ -53,6 +56,7 @@ public class FieldView { "src\\resources\\roadturnlefttop.png")); roadturntoprightimage = ImageIO.read(new File( "src\\resources\\roadturntopright.png")); + enemyCountFont = new Font("Arial", Font.PLAIN, 12); } catch (IOException e) { System.out.println("Failed to load Field Image(s)!"); } @@ -123,9 +127,11 @@ public class FieldView { } else g.drawImage(emptyfieldimage, x, y, null); - int enemies = f.getEnemies().size(); - if (enemies > 1) { - g.drawString((new Integer(enemies)).toString(), x, y+8); + int enemyCount = f.getEnemies().size(); + if (enemyCount > 1) { + g.setFont(enemyCountFont); + g.setColor(Color.white); + g.drawString((new Integer(enemyCount)).toString(), x, y+8); } } diff --git a/src/view/GamePanel.java b/src/view/GamePanel.java index 92f881eb2c4d47dd07648e24b294c650f205c241..989db6667498c68d03b7d9b2b9812f76a39be8bb 100644 --- a/src/view/GamePanel.java +++ b/src/view/GamePanel.java @@ -39,7 +39,6 @@ public class GamePanel extends JPanel { @Override public void paint(Graphics g) { Point towerRangePoint = null; - g.setFont(font); g.setColor(Color.black); g.fillRect(0, 0, g.getClipBounds().width, marginTop); for (int i = 0; i < 15; i++) { @@ -75,7 +74,8 @@ public class GamePanel extends JPanel { if (towerRangePoint != null) { TowerView.Draw(clickedField.getTower(), towerRangePoint.x, towerRangePoint.y, g, true); } - + + g.setFont(font); g.setColor(Color.white); PlayerView.Draw(world.getPlayer(), 30, 30, g); diff --git a/src/view/TowerView.java b/src/view/TowerView.java index ba51dc63cf91a0692504111ef358b18040458273..16fd3edd463bae1dd29250c868def162b1397d0d 100644 --- a/src/view/TowerView.java +++ b/src/view/TowerView.java @@ -21,7 +21,6 @@ public class TowerView image = ImageIO.read(new File("src\\resources\\tower.png")); fogimage = ImageIO.read(new File("src\\resources\\fog.png")); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } @@ -38,5 +37,4 @@ public class TowerView g.fillOval(x-50*range, y-50*range, (range*2+1)*50, (range*2+1)*50); } } - } \ No newline at end of file diff --git a/src/world/Enemy.java b/src/world/Enemy.java index 2a366e64f7d2a3b7776c2f5b9bdae0bf67288889..aca632af77b51a2a422191e9bd22b6f4d947ddec 100644 --- a/src/world/Enemy.java +++ b/src/world/Enemy.java @@ -14,8 +14,6 @@ public class Enemy extends Placeable implements ITickable { private Field prevField; private int moveTries; private static HashMap<EnemyType, Integer> moveTimes = new HashMap<EnemyType, Integer>(); - public static boolean alwaysSplit = false; - public static boolean randomMovement = true; static { moveTimes.put(EnemyType.HUMAN, 3); @@ -35,14 +33,17 @@ public class Enemy extends Placeable implements ITickable { Random rand = new Random(); hp -= dmg; - if(alwaysSplit) - split(); if (hp <= 0) { - field.getWorld().notifyEnemyDied(this); - field.stepOff(this); + Die(); } else if (rand.nextInt(15) == 0) split(); } + + private void Die() + { + field.getWorld().notifyEnemyDied(this); + field.stepOff(this); + } public EnemyType getType() { return type; @@ -62,11 +63,8 @@ public class Enemy extends Placeable implements ITickable { } } if(!potentials.isEmpty()){ - int index = 0; - if (randomMovement) { - Random rand = new Random(); - index = rand.nextInt(potentials.size()); - } + Random rand = new Random(); + int index = rand.nextInt(potentials.size()); field.stepOff(this); prevField = field; reset(); @@ -79,7 +77,11 @@ public class Enemy extends Placeable implements ITickable { public void split() { hp=hp/2; - field.getWorld().getSpawnManager().spawnEnemy(field, type, Math.round(hp),prevField); + if (hp == 0) { + Die(); + return; + } + field.getWorld().getSpawnManager().spawnEnemy(field, type, hp, prevField); } private void reset() { diff --git a/src/world/SpawnManager.java b/src/world/SpawnManager.java index ae6ee3f382ef736a7311e5b9b29620b44b6fbd7c..04247f1ab882f91d37ae75c62b63bf4e8d5d0cff 100644 --- a/src/world/SpawnManager.java +++ b/src/world/SpawnManager.java @@ -25,7 +25,7 @@ public class SpawnManager implements ITickable, IEnemyObserver this.engine = engine; this.spawns = spawns; spawnTimeLeft = nextSpawnTime(); - enemiesLeft = 60; + enemiesLeft = 30; world.addEnemyObserver(this); } @@ -124,7 +124,6 @@ public class SpawnManager implements ITickable, IEnemyObserver { //do nothing } - public void enemyDied(Enemy enemy) { enemiesAlive--; diff --git a/src/world/Tower.java b/src/world/Tower.java index cdea5714efba25927c198cf432ca3c4fa2d9a7bc..538bd1136839f7fea3612156d15ab1e13771ca98 100644 --- a/src/world/Tower.java +++ b/src/world/Tower.java @@ -96,7 +96,10 @@ public class Tower extends Placeable implements ITickable, IEnemyObserver, for (Field field : visibleFields) { if (field == null) continue; - enemiesInRange.addAll(field.getEnemies()); + for (Enemy e : field.getEnemies()) { + if(!enemiesInRange.contains(e)) + enemiesInRange.add(e); + } } target = null; } diff --git a/src/world/World.java b/src/world/World.java index b612a72131caf339a77baa8a6074a781e69265a4..69b2197580e525f632127a4ae60268927ddbd744 100644 --- a/src/world/World.java +++ b/src/world/World.java @@ -61,7 +61,6 @@ public class World implements IEnemyObserver { this.engine = engine; enemyObservers = new ArrayList<IEnemyObserver>(); - addEnemyObserver(this); player = new Player(); addEnemyObserver(player); @@ -181,6 +180,8 @@ public class World implements IEnemyObserver { spawnManager = new SpawnManager(engine, this, s); engine.addTickable(spawnManager); + + addEnemyObserver(this); } @Override