From d952fcf89641b2315a878c3f383aa252da03a982 Mon Sep 17 00:00:00 2001 From: Andreas Jakobsson Date: Wed, 17 Dec 2008 15:12:19 +0100 Subject: [PATCH] Added textures and agent boolean alive --- src/resources/goal.gif | Bin 0 -> 397 bytes src/resources/stone.gif | Bin 0 -> 3305 bytes src/se/umu/cs/dit06ajnajs/ATDController.java | 16 ++++- src/se/umu/cs/dit06ajnajs/agent/Agent.java | 5 ++ src/se/umu/cs/dit06ajnajs/agent/Tower.java | 58 +++++++++------- src/se/umu/cs/dit06ajnajs/agent/Unit.java | 77 +++++++++++++++------ .../dit06ajnajs/map/MapSquarePrototypeFactory.java | 6 +- 7 files changed, 113 insertions(+), 49 deletions(-) create mode 100644 src/resources/goal.gif create mode 100644 src/resources/stone.gif diff --git a/src/resources/goal.gif b/src/resources/goal.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad319b08053ee23b370f9a06f7ca0fb7a4a08de9 GIT binary patch literal 397 zcwPaG0doFFNk%w1VJ!eH0OJ7w#>U3~|Nqp~)XK`r-{0T(`1sq~+w}DG(b3WI@$v2L z?c?L)`}_Oq>gvtS&Dhx3ECB!k04o41000F3Fvv+MQ$&ExfglP~jbxb^L#K9wk(6+C zXltzsM+_5ozY@Ai0pTll5QSjikTN;}gItXHtVUslX7xEpl8DWWD2}TV{gGDa^e?Em22^j)#6JS0D0St924-^G?91aZ)P6Gi7 zJ_8~WRADO^l@ye$9T`4}rLr}iH57}uRbvwlzFUD4H47xe9u&vP!^INKBg&)`x*iJ) zjnT?{3q8;QPS+jVSvKKDA3outxy);(wG{3*@IE1#9S*4y1qQ+ZI55CR+$jmYY#`_t zq==;ehkPIj!k|nKTjW#>SWwUr3P3|`em%&xz(B?tcO+O;)`LxjSS(cllcSGi7Z|Hz rZn!d~rYxR1hQyqxM5Qv9MOB?-mollKk49S9a#{idxesxQMgRai1$?LS literal 0 HcwPel00001 diff --git a/src/resources/stone.gif b/src/resources/stone.gif new file mode 100644 index 0000000000000000000000000000000000000000..49181c3797f075e9ae3d28dd89251a227ca96b27 GIT binary patch literal 3305 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 GRQ(^;)TK87 literal 0 HcwPel00001 diff --git a/src/se/umu/cs/dit06ajnajs/ATDController.java b/src/se/umu/cs/dit06ajnajs/ATDController.java index ab1273d..bbe09e8 100644 --- a/src/se/umu/cs/dit06ajnajs/ATDController.java +++ b/src/se/umu/cs/dit06ajnajs/ATDController.java @@ -5,6 +5,7 @@ import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; @@ -62,9 +63,21 @@ public class ATDController { while (running) { // Update all agents List agents = model.getAgents(); + List deadAgents = new ArrayList(); for (Agent agent : agents) { - agent.act(); + if(agent.isAlive()) { + agent.act(); + } else { + deadAgents.add(agent); + logger.info("Dead unit is collected to list deadAgents"); + } + + } + if(!deadAgents.isEmpty()) { + agents.removeAll(deadAgents); + logger.info("Dead agents cleared"); } + // Remove units from goalsquares and count points GoalSquare[] goalSquares = model.getGoalSquares(); @@ -89,6 +102,7 @@ public class ATDController { // Repaint all agents Graphics g = view.getGameGraphics(); for (Agent agent : agents) { + //TODO kan det finnas en agent som inte är paintable? ((Paintable) agent).paint(g); } diff --git a/src/se/umu/cs/dit06ajnajs/agent/Agent.java b/src/se/umu/cs/dit06ajnajs/agent/Agent.java index e0bbbad..c68532b 100644 --- a/src/se/umu/cs/dit06ajnajs/agent/Agent.java +++ b/src/se/umu/cs/dit06ajnajs/agent/Agent.java @@ -10,4 +10,9 @@ public interface Agent { * @return The center point of the Agent. */ public java.awt.Point getCenterPoint(); + + /** + * @return True if the agent is alive + */ + public boolean isAlive(); } \ No newline at end of file diff --git a/src/se/umu/cs/dit06ajnajs/agent/Tower.java b/src/se/umu/cs/dit06ajnajs/agent/Tower.java index 06315ae..ef1db9b 100644 --- a/src/se/umu/cs/dit06ajnajs/agent/Tower.java +++ b/src/se/umu/cs/dit06ajnajs/agent/Tower.java @@ -14,24 +14,26 @@ public abstract class Tower implements Paintable, Agent, Observer { protected int xPos; protected int yPos; - + protected int width; protected int height; - + protected int damage; protected int range; protected Image image; - + protected boolean alive; + private List fireingList; private static Logger logger = Logger.getLogger("AntiTD"); - + public Tower(int width, int height, int damage, int range) { this.width = width; this.height = height; - + this.damage = damage; this.range = range; - + this.alive = true; + this.fireingList = new ArrayList(); // TODO this.image = img; } @@ -39,7 +41,7 @@ public abstract class Tower implements Paintable, Agent, Observer { public void setImage(Image img) { // TODO Implement method } - + public void setPostition(Point p) { this.xPos = p.x; this.yPos = p.y; @@ -48,16 +50,16 @@ public abstract class Tower implements Paintable, Agent, Observer { public int getRange() { return this.range; } - + public Point getCenterPoint() { - return new Point(xPos + (width / 2), - yPos - (height / 2)); + return new Point(xPos + (width / 2), + yPos - (height / 2)); } - + public void act() { if (!fireingList.isEmpty()) { Unit unit = fireingList.get(0); - + int distans = (int) Math.hypot((this.xPos - unit.getXPos()), this.yPos - unit.getYPos()); if (distans" + unit.getClass().getSimpleName() + + "< added to tower..."); + } + } + } - public void update(Observable caller, Object arg) { - // TODO Auto-generated method stub - // Should always be units - if (arg instanceof Unit) { - Unit unit = (Unit) arg; - if (!fireingList.contains(unit)) { - fireingList.add(unit); - logger.info("Unit >" + unit.getClass().getSimpleName() + - "< added to tower..."); - } - } - } + public boolean isAlive() { + return this.alive; + } + + public void setAlive(boolean state) { + this.alive = state; + } } diff --git a/src/se/umu/cs/dit06ajnajs/agent/Unit.java b/src/se/umu/cs/dit06ajnajs/agent/Unit.java index d60e1cf..219ce5c 100644 --- a/src/se/umu/cs/dit06ajnajs/agent/Unit.java +++ b/src/se/umu/cs/dit06ajnajs/agent/Unit.java @@ -11,18 +11,20 @@ import se.umu.cs.dit06ajnajs.map.Traversable; public abstract class Unit implements Agent, Paintable{ private static Logger logger = Logger.getLogger("AntiTD"); - + private int xPos; private int yPos; - + private int width; private int height; - + private int speed; - + private int health; + private Direction direction; private Map map; - + private boolean alive; + public Unit(int xPos, int yPos, int width, int height, int speed, Direction direction, Map map) { this.xPos = xPos; this.yPos = yPos; @@ -31,25 +33,34 @@ public abstract class Unit implements Agent, Paintable{ this.speed = speed; this.direction = direction; this.map = map; + + this.alive = true; } - + public void setImage(Image img) { // TODO Auto-generated method stub - + } - + public void act() { - Point nextPos = getNextPosition(); - // TODO check for collision on next position - move(nextPos); - - // Land on current square - MapSquare currentSquare= map.getMapSquareAtPoint(xPos, yPos); - if (currentSquare instanceof Traversable) { - ((Traversable) currentSquare).landOn(this); + // Check if this unit has health left + if (this.health >= 0) { + Point nextPos = getNextPosition(); + // TODO check for collision on next position + move(nextPos); + + // Land on current square + MapSquare currentSquare= map.getMapSquareAtPoint(xPos, yPos); + if (currentSquare instanceof Traversable) { + ((Traversable) currentSquare).landOn(this); + } + } else { + // Kill unit + this.alive = false; } + } - + public Point getNextPosition() { Point nextPos = null; switch (direction) { @@ -72,7 +83,7 @@ public abstract class Unit implements Agent, Paintable{ } return nextPos; } - + public void move(Point p) { this.xPos = p.x; this.yPos = p.y; @@ -95,10 +106,10 @@ public abstract class Unit implements Agent, Paintable{ } public Point getCenterPoint() { - return new Point(xPos + (width / 2), - yPos - (height / 2)); + return new Point(xPos + (width / 2), + yPos - (height / 2)); } - + public int getWidth() { return width; } @@ -130,6 +141,30 @@ public abstract class Unit implements Agent, Paintable{ public void setDirection(Direction direction) { this.direction = direction; } + + public boolean isAlive() { + return this.alive; + } + + public void setAlive(boolean state) { + this.alive = state; + } + + public int getHealth() { + return health; + } + + /** + * Decrease the units health + * @param damage The number of health points to substract + */ + public void damage(int damage) { + this.health -= damage; + } + + public void setHealth(int health) { + this.health = health; + } } diff --git a/src/se/umu/cs/dit06ajnajs/map/MapSquarePrototypeFactory.java b/src/se/umu/cs/dit06ajnajs/map/MapSquarePrototypeFactory.java index 263b2f3..76c82be 100644 --- a/src/se/umu/cs/dit06ajnajs/map/MapSquarePrototypeFactory.java +++ b/src/se/umu/cs/dit06ajnajs/map/MapSquarePrototypeFactory.java @@ -54,13 +54,13 @@ public class MapSquarePrototypeFactory { image = ImageIO.read(url); squareMap.put("PathSquare", new PathSquare(-1, -1, image)); - // Create BlockedSquare Prototype - url = this.getClass().getResource("/resources/effielTower.gif"); + // Create GoalSquare Prototype + url = this.getClass().getResource("/resources/goal.gif"); image = ImageIO.read(url); squareMap.put("GoalSquare", new GoalSquare(-1, -1, image)); // Create BlockedSquare Prototype - url = this.getClass().getResource("/resources/effielTower.gif"); + url = this.getClass().getResource("/resources/stone.gif"); image = ImageIO.read(url); squareMap.put("BlockedSquare", new BlockedSquare(-1, -1, image)); } catch (IOException e) { -- 2.11.4.GIT