diff --git a/OGP1718-Worms/src-provided/worms/facade/IFacade.java b/OGP1718-Worms/src-provided/worms/facade/IFacade.java
index abcce2c..dcece3a 100644
--- a/OGP1718-Worms/src-provided/worms/facade/IFacade.java
+++ b/OGP1718-Worms/src-provided/worms/facade/IFacade.java
@@ -9,14 +9,14 @@ import worms.util.MustNotImplementException;
/**
* Implement this interface to connect your code to the graphical user interface
* (GUI).
- *
+ *
*
*
For separating the code that you wrote from the code that was provided to
* you, put ALL your code in the src folder. The code that
* is provided to you stays in the src-provided folder. If you
* modify the provided code, you may need to manually merge any future bugfixes
* and update.
- *
+ *
*
You should at least create the following classes for the code to compile:
*
*
a class Worm in the package worms.model for
@@ -31,48 +31,48 @@ import worms.util.MustNotImplementException;
* implements this interface (IFacade).
*
* You may, of course, add additional classes as you see fit.
- *
+ *
*
The header of that Facade class should look as follows:
* class Facade implements IFacade { ... }
* Consult the
* Java tutorial for more information on interfaces, if necessary.
- *
+ *
*
Each method defined in the interface IFacade must be
* implemented by the class Facade. For example, the implementation
* of getMass should call a method of the given worm to
* retrieve its mass.
- *
+ *
*
Your Facade class should offer a default constructor.
- *
+ *
*
Methods in this interface are allowed to throw only
* ModelException. No other exception types are allowed. This
* exception can be thrown only if (1) calling the method with the given
* parameters would violate a precondition, or (2) if the method causes an
* exception to be thrown in your code (if so, wrap the exception in a
* ModelException).
- *
+ *
*
ModelException should not be used anywhere outside of your Facade
* implementation.
- *
+ *
*
Your Facade implementation should only contain trivial code (for
* example, calling a method, combining multiple return values into an array,
* creating @Value instances, catching exceptions and wrapping it in a
* ModelException). All non-trivial code should be placed in the other classes
* that you create.
- *
+ *
*
The rules described above and the documentation described below for each
* method apply only to the class implementing IFacade. Your class for
* representing worms should follow the rules described in the assignment.
- *
+ *
*
Do not modify the signatures of the methods defined in this
* interface.
- *
+ *
*
*/
public interface IFacade {
-
+
/************
* WORLD
************/
@@ -94,28 +94,28 @@ public interface IFacade {
* pixels at the right of the terrain (i.e., largest x-coordinates).
*/
public World createWorld(double width, double height,
- boolean[][] passableMap) throws ModelException;
-
+ boolean[][] passableMap) throws ModelException;
+
/**
* Terminate the given world.
*/
void terminate(World world) throws ModelException;
-
+
/**
* Check whether the given worls is terminated.
*/
boolean isTerminated(World world) throws ModelException;
-
+
/**
* Return the width of the given world.
*/
public double getWorldWidth(World world) throws ModelException;
-
+
/**
* Return the height of the given world.
*/
public double getWorldHeight(World world) throws ModelException;
-
+
/**
* Check whether the given world is passable at the given location.
* - The location is an array containing the x-coordinate of the location to
@@ -125,25 +125,9 @@ public interface IFacade {
boolean isPassable(World world, double[] location) throws ModelException;
/**
-<<<<<<< HEAD
- * Create and return a new worm that is positioned at the given location, looks
- * in the given direction, has the given radius and the given name.
- *
- * @param location
- * An array containing the x-coordinate of the position of the new
- * worm followed by the y-coordinate of the position of the new worm
- * (in meter)
- * @param direction
- * The direction of the new worm (in radians)
- * @param radius
- * The radius of the new worm (in meter)
- * @param name
- * The name of the new worm
-=======
* Check whether the circular area with given center and given radius
* is passable in the given world.
* - The circular area must not lie completely within the given world.
->>>>>>> f45fa3fa96c4ea42dd782f398cf71895f06caae9
*/
boolean isPassable(World world, double[] center, double radius);
@@ -153,7 +137,7 @@ public interface IFacade {
* - The circular area must not lie completely within the given world.
*/
boolean isAdjacent(World world, double[] center, double radius);
-
+
/**
* Check whether the given world contains the given worm.
*/
@@ -163,7 +147,7 @@ public interface IFacade {
* Add the given worm to the given world.
*/
void addWorm(World world, Worm worm) throws ModelException;
-
+
/**
* Remove the given worm from the given world.
*/
@@ -173,7 +157,7 @@ public interface IFacade {
* Return a list filled with all the worms in the given world.
*/
List getAllWorms(World world) throws ModelException;
-
+
/**
* Check whether the given world contains the given food.
*/
@@ -183,12 +167,12 @@ public interface IFacade {
* Add the given portion of food to the given world.
*/
void addFood(World world, Food food) throws ModelException;
-
+
/**
* Remove the given portion of food from the given world.
*/
void removeFood(World world, Food food) throws ModelException;
-
+
/**
* Return a collection filled with all the worms and all the
* portions of food in the given world.
@@ -199,7 +183,7 @@ public interface IFacade {
* Return a set of all the team in the given world.
*/
Set getAllTeams(World world) throws ModelException;
-
+
/**
* Check whether the given world has an active game.
*/
@@ -211,12 +195,12 @@ public interface IFacade {
* player-controlled actions.
*/
Worm getActiveWorm(World world) throws ModelException;
-
+
/**
* Start a new game in the given world.
*/
void startGame(World world) throws ModelException;
-
+
/**
* Finish the current game, if any, in the given world.
*/
@@ -237,7 +221,7 @@ public interface IFacade {
/************
* WORM
************/
-
+
/**
* Create and return a new worm that is positioned at the given location in
* the given world, that looks in the given direction, that has the given radius
@@ -249,13 +233,13 @@ public interface IFacade {
* the new worm followed by the y-coordinate of that location.
*/
Worm createWorm(World world, double[] location, double direction, double radius,
- String name, Team team) throws ModelException;
-
+ String name, Team team) throws ModelException;
+
/**
* Terminate the given worm.
*/
void terminate(Worm worm) throws ModelException;
-
+
/**
* Check whether the given worm is terminated.
*/
@@ -326,12 +310,12 @@ public interface IFacade {
* Rename the given worm.
*/
void rename(Worm worm, String newName) throws ModelException;
-
+
/**
* Return the world to which this worm belongs
*/
World getWorld(Worm worm) throws ModelException;
-
+
/**
* Turn the given worm by the given angle.
@@ -339,7 +323,7 @@ public interface IFacade {
void turn(Worm worm, double angle);
/**
- * Return the location the farthest away from its current location to which the given
+ * Return the location the farthest away from its current location to which the given
* worm can move in the world in which that worm is positioned, if any, following
* the given direction and not exceeding the given maximum distance.
* - The maximum distance must be finite and may not be negative.
@@ -396,12 +380,12 @@ public interface IFacade {
*/
void jump(Worm worm, double timeStep) throws ModelException;
-
-
+
+
/************
* FOOD
************/
-
+
/**
* Create and return a new portion of food that is positioned at the given
* location in the given world.
@@ -409,12 +393,12 @@ public interface IFacade {
* at the given location.
*/
Food createFood(World world, double[] location) throws ModelException;
-
+
/**
* Terminate the given portion of food.
*/
void terminate(Food food) throws ModelException;
-
+
/**
* Check whether the given portion of food is terminated.
*/
@@ -440,10 +424,10 @@ public interface IFacade {
/**
* Return the world to which this portion of food belongs.
*/
- World getWorld(Food food) throws ModelException;
+ World getWorld(Food food) throws ModelException;
+
-
/********
* TEAM
********/
@@ -456,21 +440,21 @@ public interface IFacade {
throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Terminate the given team.
*/
default void terminate(Team team) throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Check whether the given portion of food is terminated.
*/
default boolean isTerminated(Team team) throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Return the name of the given team.
* - Students working alone on the project must not override this method.
@@ -478,7 +462,7 @@ public interface IFacade {
default String getName(Team team) throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Return the team to which this worm belongs.
@@ -487,7 +471,7 @@ public interface IFacade {
default Team getTeam(Worm worm) throws ModelException {
throw new MustNotImplementException();
}
-
+
/**
* Return the number of worms in the given team.
* - Students working alone on the project must not override this method.
@@ -496,7 +480,7 @@ public interface IFacade {
throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Return a list of all the worms in the given team, sorted alphabetically.
* This method must run in linear time.
@@ -506,7 +490,7 @@ public interface IFacade {
throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
};
-
+
/**
* Add the given worms to the given team.
* - Students working alone on the project must not override this method.
@@ -515,7 +499,7 @@ public interface IFacade {
throws ModelException, MustNotImplementException {
throw new MustNotImplementException();
}
-
+
/**
* Remove the given worms from the given team.
* - Students working alone on the project must not override this method.
@@ -535,5 +519,5 @@ public interface IFacade {
throw new MustNotImplementException();
}
-
-}
+
+}
\ No newline at end of file
diff --git a/OGP1718-Worms/src/worms/facade/Facade.java b/OGP1718-Worms/src/worms/facade/Facade.java
index d529a66..2404151 100644
--- a/OGP1718-Worms/src/worms/facade/Facade.java
+++ b/OGP1718-Worms/src/worms/facade/Facade.java
@@ -1,64 +1,71 @@
package worms.facade;
+import worms.model.Food;
+import worms.model.Team;
import worms.model.Worm;
import worms.util.IllegalNameException;
import worms.util.ModelException;
-import worms.util.Tuple;
+import worms.util.Coordinate;
+
+import java.math.BigInteger;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
public class Facade implements IFacade {
- /**
- * Create and return a new worm that is positioned at the given location, looks
- * in the given direction, has the given radius and the given name.
- *
- * @param location
- * An array containing the x-coordinate of the position of the new
- * worm followed by the y-coordinate of the position of the new worm
- * (in meter)
- * @param direction
- * The direction of the new worm (in radians)
- * @param radius
- * The radius of the new worm (in meter)
- * @param name
- * the name of the new worm
- * @post the new worm has the given location, direction, name and radius
- * |new Worm(Tuple.create(location), direction, name, radius)
- * @throws ModelException
- * the worm throws an IllegalArgumentException
- * |catch(IllegalArgumentException e)
- */
- @Override
- public Worm createWorm(double[] location, double direction, double radius, String name) throws ModelException {
+// /**
+// * Create and return a new worm that is positioned at the given location, looks
+// * in the given direction, has the given radius and the given name.
+// *
+// * @param location
+// * An array containing the x-coordinate of the position of the new
+// * worm followed by the y-coordinate of the position of the new worm
+// * (in meter)
+// * @param direction
+// * The direction of the new worm (in radians)
+// * @param radius
+// * The radius of the new worm (in meter)
+// * @param name
+// * the name of the new worm
+// * @post the new worm has the given location, direction, name and radius
+// * |new Worm(Coordinate.create(location), direction, name, radius)
+// * @throws ModelException
+// * the worm throws an IllegalArgumentException
+// * |catch(IllegalArgumentException e)
+// */
+// @Override
+// public Worm createWorm(double[] location, double direction, double radius, String name) throws ModelException {
+//
+// try {
+// return new Worm(Coordinate.create(location), direction, name, radius);
+// }
+// catch(IllegalArgumentException e) {
+// throw new ModelException(e);
+// }
+// }
- try {
- return new Worm(Tuple.create(location), direction, name, radius);
- }
- catch(IllegalArgumentException e) {
- throw new ModelException(e);
- }
- }
-
- /**
- * Moves the given worm by the given number of steps.
- *
- * @param worm
- * the worm who is going to move
- * @param nbSteps
- * the number of steps the worm is going to take
- * @post the worm has taken the given number of steps
- * |worm.move(nbSteps)
- * @throws ModelException
- * the worm throws an IllegalArgumentException
- * |catch(IllegalArgumentException e)
- */
- @Override
- public void move(Worm worm, int nbSteps) throws ModelException {
- try {
- worm.move(nbSteps);
- }
- catch(IllegalArgumentException e) {
- throw new ModelException(e);
- }
- }
+// /**
+// * Moves the given worm by the given number of steps.
+// *
+// * @param worm
+// * the worm who is going to move
+// * @param nbSteps
+// * the number of steps the worm is going to take
+// * @post the worm has taken the given number of steps
+// * |worm.move(nbSteps)
+// * @throws ModelException
+// * the worm throws an IllegalArgumentException
+// * |catch(IllegalArgumentException e)
+// */
+// @Override
+// public void move(Worm worm, int nbSteps) throws ModelException {
+// try {
+// worm.move(nbSteps);
+// }
+// catch(IllegalArgumentException e) {
+// throw new ModelException(e);
+// }
+// }
/**
* Turns the given worm by the given angle.
@@ -77,46 +84,89 @@ public class Facade implements IFacade {
}
/**
- * Makes the given worm jump.
- *
+ * Return the location the farthest away from its current location to which the given
+ * worm can move in the world in which that worm is positioned, if any, following
+ * the given direction and not exceeding the given maximum distance.
+ * - The maximum distance must be finite and may not be negative.
+ * - The given direction must be in the range [0.0 .. PI[.
+ * - On its road to the resulting location, the given worm will always be
+ * positioned on passable terrain.
+ * - The resulting position may be outside the boundaries of the world, if any, in
+ * which the given worm is located.
+ *
* @param worm
- * the worm who is going to move
- * @post the worm has jumped
- * @throws ModelException
- * the worm throws an IllegalStateException
- * |catch(IllegalStateException e)
+ * @param direction
+ * @param maxDistance
*/
@Override
- public void jump(Worm worm) throws ModelException {
- try {
- worm.jump();
- }
- catch(IllegalStateException e) {
- throw new ModelException(e);
- }
+ public double[] getFurthestLocationInDirection(Worm worm, double direction, double maxDistance) throws ModelException {
+ return new double[0];
}
/**
- * Returns the total amount of time (in seconds) that a jump of the given worm
- * would take.
- *
+ * Move the given worm according to the rules in the assignment.
+ *
* @param worm
- * the worm who is going to move
- * @throws ModelException
- * the worm throws an IllegalStateException
- * |catch(IllegalStateException e)
*/
@Override
- public double getJumpTime(Worm worm) throws ModelException {
+ public void move(Worm worm) throws ModelException {
- try {
- return worm.jumpTime();
- }
- catch(IllegalStateException e) {
- throw new ModelException(e);
- }
}
+ /**
+ * Return the time needed by the given worm to jump to the nearest position
+ * adjacent to impassable terrain.
+ * - deltaT determines the resolution to be used in successive steps of the jump.
+ *
+ * @param worm
+ * @param deltaT
+ */
+ @Override
+ public double getJumpTime(Worm worm, double deltaT) throws ModelException {
+ return 0;
+ }
+
+// /**
+// * Makes the given worm jump.
+// *
+// * @param worm
+// * the worm who is going to move
+// * @post the worm has jumped
+// * @throws ModelException
+// * the worm throws an IllegalStateException
+// * |catch(IllegalStateException e)
+// */
+// @Override
+// public void jump(Worm worm) throws ModelException {
+// try {
+// worm.jump();
+// }
+// catch(IllegalStateException e) {
+// throw new ModelException(e);
+// }
+// }
+
+// /**
+// * Returns the total amount of time (in seconds) that a jump of the given worm
+// * would take.
+// *
+// * @param worm
+// * the worm who is going to move
+// * @throws ModelException
+// * the worm throws an IllegalStateException
+// * |catch(IllegalStateException e)
+// */
+// @Override
+// public double getJumpTime(Worm worm) throws ModelException {
+//
+// try {
+// return worm.jumpTime();
+// }
+// catch(IllegalStateException e) {
+// throw new ModelException(e);
+// }
+// }
+
/**
* Returns the location on the jump trajectory of the given worm after a time t.
*
@@ -134,7 +184,7 @@ public class Facade implements IFacade {
public double[] getJumpStep(Worm worm, double t) throws ModelException {
try {
- Tuple jumpStep = worm.jumpStep(t);
+ Coordinate jumpStep = worm.jumpStep(t);
return new double[]{jumpStep.item1, jumpStep.item2};
}
catch (IllegalArgumentException e) {
@@ -143,25 +193,436 @@ public class Facade implements IFacade {
}
/**
- * Returns the x-coordinate of the current location of the given worm.
- *
+ * Make the given worm jump using the given time step.
+ * - The given time step determines a time interval during which
+ * you may assume that the worm will not move through a piece
+ * of impassable terrain.
+ *
* @param worm
- * the worm who is going to move
+ * @param timeStep
*/
@Override
- public double getX(Worm worm) throws ModelException {
- return worm.getLocation().item1;
+ public void jump(Worm worm, double timeStep) throws ModelException {
+
}
/**
- * Returns the y-coordinate of the current location of the given worm.
- *
- * @param worm
- * the worm who is going to move
+ * Create and return a new portion of food that is positioned at the given
+ * location in the given world.
+ * = If the given world is not effective, the new food is simply positioned
+ * at the given location.
+ *
+ * @param world
+ * @param location
*/
@Override
- public double getY(Worm worm) throws ModelException {
- return worm.getLocation().item2;
+ public Food createFood(World world, double[] location) throws ModelException {
+ return null;
+ }
+
+ /**
+ * Terminate the given portion of food.
+ *
+ * @param food
+ */
+ @Override
+ public void terminate(Food food) throws ModelException {
+
+ }
+
+ /**
+ * Check whether the given portion of food is terminated.
+ *
+ * @param food
+ */
+ @Override
+ public boolean isTerminated(Food food) throws ModelException {
+ return false;
+ }
+
+ /**
+ * Return the current location of the given portion of food.
+ * - The resulting array contains the the x-coordinate of the given worm
+ * followed by its y-coordinate.
+ *
+ * @param food
+ */
+ @Override
+ public double[] getLocation(Food food) throws ModelException {
+ return new double[0];
+ }
+
+ /**
+ * Return the radius of the given portion of food.
+ *
+ * @param food
+ */
+ @Override
+ public double getRadius(Food food) throws ModelException {
+ return 0;
+ }
+
+ /**
+ * Return the mass of the given portion of food.
+ *
+ * @param food
+ */
+ @Override
+ public double getMass(Food food) throws ModelException {
+ return 0;
+ }
+
+ /**
+ * Return the world to which this portion of food belongs.
+ *
+ * @param food
+ */
+ @Override
+ public World getWorld(Food food) throws ModelException {
+ return null;
+ }
+
+// /**
+// * Returns the x-coordinate of the current location of the given worm.
+// *
+// * @param worm
+// * the worm who is going to move
+// */
+// @Override
+// public double getX(Worm worm) throws ModelException {
+// return worm.getLocation().item1;
+// }
+//
+// /**
+// * Returns the y-coordinate of the current location of the given worm.
+// *
+// * @param worm
+// * the worm who is going to move
+// */
+// @Override
+// public double getY(Worm worm) throws ModelException {
+// return worm.getLocation().item2;
+// }
+
+ /**
+ * Create a new world with given width and given height.
+ * The passable map is a rectangular matrix indicating which parts of the terrain
+ * are passable and which parts are impassable.
+ * This matrix is derived from the transparency of the pixels in the image file
+ * of the terrain. passableMap[r][c] is true if the location at row r and column c
+ * is passable, and false if that location is impassable.
+ * The elements in the first row (row 0) represent the pixels at the top of the
+ * terrain (i.e., largest y-coordinates).
+ * The elements in the last row (row passableMap.length-1) represent pixels at the
+ * bottom of the terrain (smallest y-coordinates).
+ * The elements in the first column (column 0) represent the pixels at the left
+ * of the terrain (i.e., smallest x-coordinates).
+ * The elements in the last column (column passableMap[0].length-1) represent the
+ * pixels at the right of the terrain (i.e., largest x-coordinates).
+ *
+ * @param width
+ * @param height
+ * @param passableMap
+ */
+ @Override
+ public World createWorld(double width, double height, boolean[][] passableMap) throws ModelException {
+ return null;
+ }
+
+ /**
+ * Terminate the given world.
+ *
+ * @param world
+ */
+ @Override
+ public void terminate(World world) throws ModelException {
+
+ }
+
+ /**
+ * Check whether the given worls is terminated.
+ *
+ * @param world
+ */
+ @Override
+ public boolean isTerminated(World world) throws ModelException {
+ return false;
+ }
+
+ /**
+ * Return the width of the given world.
+ *
+ * @param world
+ */
+ @Override
+ public double getWorldWidth(World world) throws ModelException {
+ return 0;
+ }
+
+ /**
+ * Return the height of the given world.
+ *
+ * @param world
+ */
+ @Override
+ public double getWorldHeight(World world) throws ModelException {
+ return 0;
+ }
+
+ /**
+ * Check whether the given world is passable at the given location.
+ * - The location is an array containing the x-coordinate of the location to
+ * check followed by the y-coordinate of that location.
+ * - Locations outside the boundaries of the world are always passable.
+ *
+ * @param world
+ * @param location
+ */
+ @Override
+ public boolean isPassable(World world, double[] location) throws ModelException {
+ return false;
+ }
+
+ /**
+ * <<<<<<< HEAD
+ * Create and return a new worm that is positioned at the given location, looks
+ * in the given direction, has the given radius and the given name.
+ *
+ * @param world
+ * @param center
+ * @param radius The radius of the new worm (in meter)
+ */
+ @Override
+ public boolean isPassable(World world, double[] center, double radius) {
+ return false;
+ }
+
+ /**
+ * Check whether the circular area with given center and given radius
+ * is adjacent to impassable terrain in the given world.
+ * - The circular area must not lie completely within the given world.
+ *
+ * @param world
+ * @param center
+ * @param radius
+ */
+ @Override
+ public boolean isAdjacent(World world, double[] center, double radius) {
+ return false;
+ }
+
+ /**
+ * Check whether the given world contains the given worm.
+ *
+ * @param world
+ * @param worm
+ */
+ @Override
+ public boolean hasAsWorm(World world, Worm worm) throws ModelException {
+ return false;
+ }
+
+ /**
+ * Add the given worm to the given world.
+ *
+ * @param world
+ * @param worm
+ */
+ @Override
+ public void addWorm(World world, Worm worm) throws ModelException {
+
+ }
+
+ /**
+ * Remove the given worm from the given world.
+ *
+ * @param world
+ * @param worm
+ */
+ @Override
+ public void removeWorm(World world, Worm worm) throws ModelException {
+
+ }
+
+ /**
+ * Return a list filled with all the worms in the given world.
+ *
+ * @param world
+ */
+ @Override
+ public List getAllWorms(World world) throws ModelException {
+ return null;
+ }
+
+ /**
+ * Check whether the given world contains the given food.
+ *
+ * @param world
+ * @param food
+ */
+ @Override
+ public boolean hasAsFood(World world, Food food) throws ModelException {
+ return false;
+ }
+
+ /**
+ * Add the given portion of food to the given world.
+ *
+ * @param world
+ * @param food
+ */
+ @Override
+ public void addFood(World world, Food food) throws ModelException {
+
+ }
+
+ /**
+ * Remove the given portion of food from the given world.
+ *
+ * @param world
+ * @param food
+ */
+ @Override
+ public void removeFood(World world, Food food) throws ModelException {
+
+ }
+
+ /**
+ * Return a collection filled with all the worms and all the
+ * portions of food in the given world.
+ *
+ * @param world
+ */
+ @Override
+ public Collection