From 3840257daaae6b65e6da8f51efb7e128a7be4ad9 Mon Sep 17 00:00:00 2001 From: Andreas Jakobsson Date: Sun, 11 Jan 2009 15:19:28 +0100 Subject: [PATCH] Divided List agents to List units and List agents. Also, the lose-algoritm is now better --- src/se/umu/cs/dit06ajnajs/ATDController.java | 80 +++++++++++++--------------- src/se/umu/cs/dit06ajnajs/ATDModel.java | 54 +++++++++++-------- 2 files changed, 70 insertions(+), 64 deletions(-) diff --git a/src/se/umu/cs/dit06ajnajs/ATDController.java b/src/se/umu/cs/dit06ajnajs/ATDController.java index 4f630c8..be324d0 100644 --- a/src/se/umu/cs/dit06ajnajs/ATDController.java +++ b/src/se/umu/cs/dit06ajnajs/ATDController.java @@ -15,6 +15,7 @@ import java.awt.event.WindowEvent; import se.umu.cs.dit06ajnajs.agent.Agent; import se.umu.cs.dit06ajnajs.agent.AgentPrototypeFactory; +import se.umu.cs.dit06ajnajs.agent.Tower; import se.umu.cs.dit06ajnajs.agent.Unit; import se.umu.cs.dit06ajnajs.map.GoalSquare; import se.umu.cs.dit06ajnajs.map.Level; @@ -148,7 +149,8 @@ public class ATDController { public void run() { // TODO Will running ever be false? while (running) { - + long startTime = System.currentTimeMillis(); + // Check if game is paused while(paused) { try { @@ -158,47 +160,45 @@ public class ATDController { e.printStackTrace(); } } - long startTime = System.currentTimeMillis(); - List agents = model.getAgents(); - List units = new ArrayList(); - // Extract all units - for (Agent agent : agents) { - if (agent instanceof Unit) { - units.add((Unit)agent); - } - } - // Update all agents - List deadAgents = new ArrayList(); - for (Agent agent : agents) { - if (agent.isAlive()) { - if (agent instanceof Unit) { - // Collisioncheck - for (Unit unit : units) { - if (agent != unit) { - if (((Unit) agent).intersectsNextMove(unit)) { - // Collision! - ((Unit) agent).collision(unit); - } + // Update all units + List units = model.getUnits(); + List deadUnits = new ArrayList(); + for (Unit unit : units) { + if (unit.isAlive()) { + // Collisioncheck + for (Unit otherUnit : units) { + if (unit != otherUnit) { + if (unit.intersectsNextMove(otherUnit)) { + // Collision! + unit.collision(otherUnit); } } - agent.act(); - } else { - agent.act(); } + unit.act(); } else { - deadAgents.add(agent); - logger.info("Dead unit is collected to list deadAgents"); - //TODO the towers should be rewarded for dead units - /* Remember that cleared units are also "dead" + // Add dead unit + deadUnits.add(unit); + logger.info("Dead unit is collected to list deadUnits"); + //TODO + /*the towers should be rewarded for dead units + Remember that cleared units are also "dead" but should not be counted */ } } - if (!deadAgents.isEmpty()) { - model.removeAgents(deadAgents); + + // Collect dead units + if (!deadUnits.isEmpty()) { + model.removeUnits(deadUnits); logger.info("Dead agents cleared"); } + + // Update all towers + List towers = model.getTowers(); + for (Tower tower : towers) { + tower.act(); + } // Remove units from goalsquares and count points GoalSquare[] goalSquares = model.getGoalSquares(); @@ -240,10 +240,13 @@ public class ATDController { } // Repaint all agents + //TODO kan det finnas en agent som inte är paintable? Graphics g = view.getGameGraphics(); - for (Agent agent : agents) { - //TODO kan det finnas en agent som inte är paintable? - agent.paint(g); + for (Unit unit : units) { + unit.paint(g); + } + for (Tower tower : towers) { + tower.paint(g); } // Refresh the game view @@ -315,14 +318,7 @@ public class ATDController { } private int calculateCredit() { - List agents = model.getAgents(); - List units = new ArrayList(); - for (Agent agent : agents) { - // Extract all units - if(agent instanceof Unit) { - units.add((Unit)agent); - } - } + List units = model.getUnits(); int credit = units.size() * 10; return credit; } diff --git a/src/se/umu/cs/dit06ajnajs/ATDModel.java b/src/se/umu/cs/dit06ajnajs/ATDModel.java index a4c8aee..6882924 100644 --- a/src/se/umu/cs/dit06ajnajs/ATDModel.java +++ b/src/se/umu/cs/dit06ajnajs/ATDModel.java @@ -19,6 +19,8 @@ public class ATDModel { Player player; List agents; + List units; + List towers; List levels; Level currentLevel; @@ -59,16 +61,17 @@ public class ATDModel { /** * Initialises the level that is next in turn for the player */ - public void initLevel() { + private void initLevel() { // Check if there is more levels if (player.getCurrentLevel() < levels.size()) { this.currentLevel = levels.get(player.getCurrentLevel()); // If restartet game, the level must be reset this.currentLevel.resetLevel(); - this.agents = new ArrayList(); + this.towers = new ArrayList(); + this.units = new ArrayList(); for (Tower tower : currentLevel.getTowers()) { - agents.add(tower); + towers.add(tower); } player.initCredit(); } else { @@ -79,7 +82,7 @@ public class ATDModel { public void addTower(Tower t) { currentLevel.addTower(t); - agents.add(t); + towers.add(t); } public boolean addUnit(Unit unit) { @@ -96,14 +99,21 @@ public class ATDModel { } public void releaseUnit(Unit unit) { - agents.add(unit); + units.add(unit); } - public List getAgents() { + public List getUnits() { // TODO Auto-generated method stub // Copy array - List resultList = new ArrayList(this.agents.size()); - resultList.addAll(this.agents); + List resultList = new ArrayList(this.units.size()); + resultList.addAll(this.units); + return resultList; + } + + public List getTowers() { + // Copy array + List resultList = new ArrayList(this.towers.size()); + resultList.addAll(this.towers); return resultList; } @@ -114,18 +124,18 @@ public class ATDModel { * @param units A collection of units to remove. */ public void removeUnits(Collection units) { - this.agents.removeAll(units); - } - - /** - * Removes all supplied agents from this model. This is called when dead - * agents are cleared from a game. - * - * @param units A collection of agents to remove. - */ - public void removeAgents(Collection agents) { - this.agents.removeAll(agents); - } + this.units.removeAll(units); + } + +// /** +// * Removes all supplied agents from this model. This is called when dead +// * agents are cleared from a game. +// * +// * @param units A collection of agents to remove. +// */ +// public void removeAgents(Collection agents) { +// this.agents.removeAll(agents); +// } public Level getLevel() { return this.currentLevel; @@ -202,7 +212,7 @@ public class ATDModel { * @return True if no units on the map and no credits to buy one unit */ public boolean isLevelLost() { - // NOTE credit < billigaste uniten %% units är tom - return player.getCredit() < 500; + // TODO Check for cheapest unit instead of 500 + return (player.getCredit() < 500 && units.size() == 0); } } -- 2.11.4.GIT