diff --git a/OGP1718-Worms/src/worms/facade/Facade.java b/OGP1718-Worms/src/worms/facade/Facade.java index b9ec1b4..b139f09 100644 --- a/OGP1718-Worms/src/worms/facade/Facade.java +++ b/OGP1718-Worms/src/worms/facade/Facade.java @@ -31,6 +31,7 @@ public class Facade implements IFacade { @Override public void move(Worm worm, int nbSteps) throws ModelException { + worm.move(nbSteps); } /** @@ -42,6 +43,7 @@ public class Facade implements IFacade { @Override public void turn(Worm worm, double angle) throws ModelException { + worm.turn(angle); } /** @@ -52,6 +54,7 @@ public class Facade implements IFacade { @Override public void jump(Worm worm) throws ModelException { + worm.jump(); } /** @@ -62,7 +65,8 @@ public class Facade implements IFacade { */ @Override public double getJumpTime(Worm worm) throws ModelException { - return 0; + + return worm.jumpTime(); } /** @@ -75,7 +79,9 @@ public class Facade implements IFacade { */ @Override public double[] getJumpStep(Worm worm, double t) throws ModelException { - return new double[0]; + + Tuple jumpStep = worm.jumpStep(t); + return new double[] {jumpStep.item1, jumpStep.item2}; } /** @@ -85,7 +91,7 @@ public class Facade implements IFacade { */ @Override public double getX(Worm worm) throws ModelException { - return 0; + return worm.getLocation().item1; } /** @@ -95,7 +101,7 @@ public class Facade implements IFacade { */ @Override public double getY(Worm worm) throws ModelException { - return 0; + return worm.getLocation().item2; } /** @@ -105,7 +111,7 @@ public class Facade implements IFacade { */ @Override public double getOrientation(Worm worm) throws ModelException { - return 0; + return worm.getOrientation(); } /** @@ -115,7 +121,7 @@ public class Facade implements IFacade { */ @Override public double getRadius(Worm worm) throws ModelException { - return 0; + return worm.getRadius(); } /** @@ -126,7 +132,7 @@ public class Facade implements IFacade { */ @Override public void setRadius(Worm worm, double newRadius) throws ModelException { - + worm.setRadius(newRadius); } /** @@ -136,7 +142,7 @@ public class Facade implements IFacade { */ @Override public long getNbActionPoints(Worm worm) throws ModelException { - return 0; + return worm.getActionPoints(); } /** @@ -148,7 +154,7 @@ public class Facade implements IFacade { */ @Override public void decreaseNbActionPoints(Worm worm, long delta) throws ModelException { - + worm.decreaseActionPoints((int) delta); } /** @@ -158,7 +164,7 @@ public class Facade implements IFacade { */ @Override public long getMaxNbActionPoints(Worm worm) throws ModelException { - return 0; + return worm.getMaxActionPoints(); } /** @@ -168,7 +174,7 @@ public class Facade implements IFacade { */ @Override public String getName(Worm worm) throws ModelException { - return null; + return worm.getName(); } /** @@ -179,7 +185,7 @@ public class Facade implements IFacade { */ @Override public void rename(Worm worm, String newName) throws ModelException { - + worm.setName(newName); } /** @@ -189,6 +195,6 @@ public class Facade implements IFacade { */ @Override public double getMass(Worm worm) throws ModelException { - return 0; + return worm.getMass(); } } diff --git a/OGP1718-Worms/src/worms/model/Worm.java b/OGP1718-Worms/src/worms/model/Worm.java index cb72c69..ef2a7a8 100644 --- a/OGP1718-Worms/src/worms/model/Worm.java +++ b/OGP1718-Worms/src/worms/model/Worm.java @@ -51,14 +51,14 @@ public class Worm { private double mass; /** - * this variable contains the current action points of the worm + * this variable contains the current action actionPoints of the worm */ - private int points; + private long actionPoints; /** - * this variable contains the maximum points a worm can have + * this variable contains the maximum actionPoints a worm can have */ - private int maxPoints; + private long maxActionPoints; /** * this variable contains the name of the worm @@ -109,7 +109,7 @@ public class Worm { this.radius = radius; this.minimumRadius = minimumRadius; - this.points = this.maxPoints; + this.actionPoints = this.maxActionPoints; int validName = isValidName(name); if (validName != -1) @@ -262,11 +262,11 @@ public class Worm { */ private void setMass(double radius) { - final int rho = 1062; + final long rho = 1062; double mass = rho * (4 / 3 * PI * pow(radius, 3)); this.mass = mass; - setMaxPoints(mass); + setMaxActionPoints(mass); } //=================================================================================== @@ -274,32 +274,46 @@ public class Worm { - // region Points + // region ActionPoints //=================================================================================== - public int getPoints() { - return this.points; + public long getActionPoints() { + return this.actionPoints; } - public void setPoints(int points) { - if (points > this.maxPoints) - points = this.maxPoints; - else if (points < 0) - points = 0; - - this.points = points; + public long getMaxActionPoints() { + return this.maxActionPoints; } - private void setMaxPoints(double maxPoints) { - this.maxPoints = (int) ceil(maxPoints); - setPoints(this.points); - } - private void subtractPoints (int value) { - setPoints(this.points - value); - } - private void subtractPoints (double angle) { + public void setActionPoints(long actionPoints) { - setPoints(this.points - (int) ceil(toDegrees(angle) / 6)); + this.actionPoints = toValidActionPoints(actionPoints); + } + private void setMaxActionPoints(double maxActionPoints) { + this.maxActionPoints = round(maxActionPoints); + setActionPoints(this.actionPoints); + } + public void decreaseActionPoints (long delta) { + + this.actionPoints = toValidActionPoints(this.actionPoints - delta); + } + + private long toValidActionPoints(long actionPoints) { + if (actionPoints > this.maxActionPoints) + actionPoints = this.maxActionPoints; + else if (actionPoints < 0) + actionPoints = 0; + + return actionPoints; + } + + private void subtractActionPoints (long value) { + + setActionPoints(this.actionPoints - value); + } + private void subtractActionPoints (double angle) { + + setActionPoints(this.actionPoints - (long) ceil(toDegrees(angle) / 6)); } //=================================================================================== @@ -393,28 +407,28 @@ public class Worm { * with the sinus of the orientation) * |distanceY = this.radius * Math.sin(this.orientation) * |new.yCoordinate = this.location.item2 + numberSteps * distanceY - * @post the current value of action points has changed. The current value of action points + * @post the current value of action actionPoints has changed. The current value of action actionPoints * minus the cost of moving (abs(cos(theta)) + abs(4 sin(theta))) * |value = (int) Math.ceil(Math.abs(Math.cos(this.orientation)) + Math.abs(4 * Math.sin(this.orientation))) - * |setPoints(this.points - value) + * |setActionPoints(this.actionPoints - value) * @throws IllegalArgumentException * when the total of steps is lower then 0 or when the cost of action point is more * then the current value of action point - * |NumberSteps < 0 || cost > this.points + * |NumberSteps < 0 || cost > this.actionPoints */ public void move(int numberSteps) { if (numberSteps < 0) throw new IllegalArgumentException(); // TODO add decent exception msg int cost = (int) ceil(abs(cos(this.orientation)) + abs(4 * sin(this.orientation))); - if (cost > this.points) + if (cost > this.actionPoints) throw new IllegalArgumentException(); // TODO add decent exception msg double distanceX = this.radius * cos(this.orientation); double distanceY = this.radius * sin(this.orientation); this.location = Tuple.create(this.location.item1 + numberSteps * distanceX, this.location.item2 + numberSteps * distanceY); - subtractPoints(cost); + subtractActionPoints(cost); } //=================================================================================== @@ -435,15 +449,15 @@ public class Worm { * |new.getOrientation() = this.getOrientation() + angle * @post the resulting angle (= the new orientation) must be between 0 and 2pi (including 0) * |0 <= new.getOrientation() < 2pi - * @post current points of action points schould be reduced, for this there is another + * @post current actionPoints of action actionPoints schould be reduced, for this there is another * method with as parameter the given angle - * |substractPoints(angle) + * |substractActionPoints(angle) */ public void turn(double angle) { assert 0 <= angle && angle < (2 * PI) && !Double.isNaN(angle); setOrientation((this.orientation + angle) % (2 * PI)); - subtractPoints(angle); + subtractActionPoints(angle); } //=================================================================================== @@ -467,12 +481,12 @@ public class Worm { * @post the worm jumps to his new place. The new place is the x-coordinate plus the jump distance * with the jump velocity * |worms.util.Tuple.create(location.item1 + jumpDistance(this.jumpVelocity), location.item2) - * @post the current action points schould be 0 after a jump - * |this.points = 0 + * @post the current action actionPoints schould be 0 after a jump + * |this.actionPoints = 0 * @throws IllegalStateException() - * if the current action points is equal to 0 or the orientation is more then + * if the current action actionPoints is equal to 0 or the orientation is more then * pi the worm can not jump - * |this.points == 0 || this.orientation < Math.PI + * |this.actionPoints == 0 || this.orientation < Math.PI */ public void jump() { @@ -483,18 +497,18 @@ public class Worm { this.jumpVelocity = jumpVelocity(); this.jumpTime = jumpTime(); this.location = Tuple.create(location.item1 + jumpDistance(this.jumpVelocity), location.item2); - this.points = 0; + this.actionPoints = 0; } /** * Return a boolean whether the worm can jump or not * - * @return True if and only if the action points is bigger then 0 and the orientation + * @return True if and only if the action actionPoints is bigger then 0 and the orientation * is lower then pi - * |result == this.points > 0 && this.orientation < Math.PI + * |result == this.actionPoints > 0 && this.orientation < Math.PI */ private boolean canJump() { - return this.points > 0 && this.orientation < PI; + return this.actionPoints > 0 && this.orientation < PI; } /** @@ -506,7 +520,7 @@ public class Worm { */ public double jumpTime() { - if (this.orientation >= PI || this.points == 0) + if (this.orientation >= PI || this.actionPoints == 0) throw new IllegalStateException(); return jumpDistance(jumpVelocity()) / (jumpVelocity() * cos(this.orientation)); } @@ -542,14 +556,14 @@ public class Worm { * Return the velocity of the jump * * @return the velocity of the jump. The force of the jump is equal to 5 multiplied with the - * current action points plus the mass multiplied with the gravity. Therefrom the velocity + * current action actionPoints plus the mass multiplied with the gravity. Therefrom the velocity * is equal to the force divided with the mass, multiplied with the time te force takes - * |force = 5 * this.points + this.mass * G + * |force = 5 * this.actionPoints + this.mass * G * |velocity = (force / this.mass) * FORCE_TIME */ private double jumpVelocity() { - double force = 5 * this.points + this.mass * G; + double force = 5 * this.actionPoints + this.mass * G; return force / this.mass * FORCE_TIME; }