From 21c9aea4fe2bccec6d43d8f70d60417736a467f5 Mon Sep 17 00:00:00 2001 From: Arthur Bols Date: Wed, 23 May 2018 17:22:15 +0200 Subject: [PATCH] refactoring --- OGP1718-Worms/src/worms/facade/Facade.java | 51 ++--------------- OGP1718-Worms/src/worms/model/GameObject.java | 15 +++++ OGP1718-Worms/src/worms/model/IJumpable.java | 12 ++++ OGP1718-Worms/src/worms/model/Projectile.java | 19 +++---- OGP1718-Worms/src/worms/model/Rifle.java | 4 -- OGP1718-Worms/src/worms/model/Team.java | 35 ++++-------- OGP1718-Worms/src/worms/model/Worm.java | 57 +++---------------- 7 files changed, 59 insertions(+), 134 deletions(-) create mode 100644 OGP1718-Worms/src/worms/model/IJumpable.java diff --git a/OGP1718-Worms/src/worms/facade/Facade.java b/OGP1718-Worms/src/worms/facade/Facade.java index c38236d..457d753 100644 --- a/OGP1718-Worms/src/worms/facade/Facade.java +++ b/OGP1718-Worms/src/worms/facade/Facade.java @@ -108,53 +108,12 @@ public class Facade implements IFacade { @Override public double getJumpTime(Worm worm, double deltaT) throws ModelException { try { - return worm.jumpTime(); + return worm.jumpTime(deltaT); } catch(IllegalStateException e){ throw new ModelException(e); } } -// /** -// * 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. * @@ -192,7 +151,7 @@ public class Facade implements IFacade { @Override public void jump(Worm worm, double timeStep) throws ModelException { try { - worm.jump(); + worm.jump(timeStep); } catch (IllegalStateException e) { throw new ModelException(e); } @@ -358,7 +317,7 @@ public class Facade implements IFacade { */ @Override public double[] getJumpStep(Projectile projectile, double elapsedTime) { - return projectile.getJumpStep(elapsedTime).toArray(); + return projectile.jumpStep(elapsedTime).toArray(); } /** @@ -371,7 +330,7 @@ public class Facade implements IFacade { */ @Override public double getJumpTime(Projectile projectile, double jumpTimeStep) throws ModelException { - return projectile.getJumpTime(jumpTimeStep); + return projectile.jumpTime(jumpTimeStep); } /** @@ -1032,7 +991,7 @@ public class Facade implements IFacade { */ @Override public Program getWormProgram(Worm worm) throws ModelException { - return null; + return worm.getProgram(); } /** diff --git a/OGP1718-Worms/src/worms/model/GameObject.java b/OGP1718-Worms/src/worms/model/GameObject.java index e694ef9..46da5ed 100644 --- a/OGP1718-Worms/src/worms/model/GameObject.java +++ b/OGP1718-Worms/src/worms/model/GameObject.java @@ -276,4 +276,19 @@ public abstract class GameObject { return Math.abs(Math.atan(Math.abs(x1 - x2) / Math.abs(y1 - y2)) - Math.PI / 2.0); } + + /** + * Returns the distance between two coordinates. + * + * @param start The start coordinate of the equation. + * @param end The end coordinate of the equation. + * @return the distance between the two given coordinates. The distance is equal to + * the square root of the square of the displacement of the x coordinate plus the + * square of the displacement of the y coordinate. + * |result == sqrt(pow(start.getX()-end.getX())+pow(start.getY()-end.getY())) + */ + public static double getDistance(Coordinate start, Coordinate end) { + return Math.sqrt(Math.pow(Math.abs(start.getX() - end.getX()), 2) + + Math.pow(Math.abs(start.getY() - end.getY()), 2)); + } } \ No newline at end of file diff --git a/OGP1718-Worms/src/worms/model/IJumpable.java b/OGP1718-Worms/src/worms/model/IJumpable.java new file mode 100644 index 0000000..6a5d42c --- /dev/null +++ b/OGP1718-Worms/src/worms/model/IJumpable.java @@ -0,0 +1,12 @@ +package worms.model; + +import worms.util.Coordinate; + +public interface IJumpable { + + void jump(double timeStep); + + Coordinate jumpStep(double elapsed); + + double jumpTime(double timeStep); +} diff --git a/OGP1718-Worms/src/worms/model/Projectile.java b/OGP1718-Worms/src/worms/model/Projectile.java index ab02747..6b96561 100644 --- a/OGP1718-Worms/src/worms/model/Projectile.java +++ b/OGP1718-Worms/src/worms/model/Projectile.java @@ -6,7 +6,7 @@ import worms.util.Coordinate; import java.util.List; -public abstract class Projectile extends GameObject { +public abstract class Projectile extends GameObject implements IJumpable { private static final int rho = 7800; @@ -71,7 +71,7 @@ public abstract class Projectile extends GameObject { public static final double FORCE_TIME = 0.5; - public Coordinate getJumpStep(double elapsedTime) { + public Coordinate jumpStep(double elapsedTime) { if (Double.isNaN(elapsedTime) || elapsedTime < 0) throw new IllegalArgumentException(); @@ -85,7 +85,7 @@ public abstract class Projectile extends GameObject { return (getForce() / (getMass() / 1000)) * FORCE_TIME; } - public double getJumpTime(double timeStep) { + public double jumpTime(double timeStep) { World world = getWorld(); if (world == null) { @@ -98,8 +98,7 @@ public abstract class Projectile extends GameObject { double radius = getRadius(); List worms = world.getGameObjectsByClass(Worm.class); - if (!world.isPassable(this.location) || - worms.stream().anyMatch(w -> w.getDistance(this) < 0)) { + if (!world.isPassable(this.location) || worms.stream().anyMatch(w -> w.getDistance(this) < 0)) { return 0.0; } @@ -116,11 +115,6 @@ public abstract class Projectile extends GameObject { } } - public double getDistance(Coordinate start, Coordinate end) { - return Math.sqrt(Math.pow(Math.abs(start.getX() - end.getX()), 2) + - Math.pow(Math.abs(start.getY() - end.getY()), 2)); - } - private boolean canJump() { return getOrientation() < PI; @@ -131,7 +125,7 @@ public abstract class Projectile extends GameObject { throw new IllegalStateException(); double v = jumpVelocity(); - double t = getJumpTime(jumpTimeStep); + double t = jumpTime(jumpTimeStep); double a = getOrientation(); Coordinate newLocation = this.location; @@ -139,7 +133,8 @@ public abstract class Projectile extends GameObject { List worms = getWorld().getGameObjectsByClass(Worm.class); if (!getWorld().isAdjacent(getLocation(),getRadius())) { - newLocation = Coordinate.create(getLocation().getX() + v * t * cos(a), getLocation().getY() + v * t * sin(a) - (G * t * t) / 2.0); + newLocation = Coordinate.create(getLocation().getX() + v * t * cos(a), + getLocation().getY() + v * t * sin(a) - (G * t * t) / 2.0); } if (!isValidLocation(newLocation)) { terminate(); diff --git a/OGP1718-Worms/src/worms/model/Rifle.java b/OGP1718-Worms/src/worms/model/Rifle.java index afdaf66..53b291a 100644 --- a/OGP1718-Worms/src/worms/model/Rifle.java +++ b/OGP1718-Worms/src/worms/model/Rifle.java @@ -31,8 +31,4 @@ public class Rifle extends Projectile { super.hitPoints = value; } - public static double calcRadius() { - return calcRadius(10); - } - } diff --git a/OGP1718-Worms/src/worms/model/Team.java b/OGP1718-Worms/src/worms/model/Team.java index c510338..46dceef 100644 --- a/OGP1718-Worms/src/worms/model/Team.java +++ b/OGP1718-Worms/src/worms/model/Team.java @@ -51,7 +51,7 @@ public class Team { public boolean equals(Object obj) { if (!(obj instanceof Team)) return false; - return this.getName().equals(((Team) obj).getName()); + return this.name.equals(((Team) obj).getName()); } @@ -73,10 +73,9 @@ public class Team { if (worms == null) throw new IllegalArgumentException(); if (!canHaveAsWorm(worms)) throw new IllegalArgumentException(); - Collection wormCollection = getAllWormsOfTeam(); Arrays.stream(worms).forEach(w -> { w.setTeam(this); - wormCollection.add(w); + this.wormCollection.add(w); }); } @@ -96,12 +95,11 @@ public class Team { private boolean canHaveAsWorm(Worm... worm) { HashSet names = new HashSet<>(); - Collection worms = getAllWormsOfTeam(); for (Worm w : worm) { if (w == null || w.getTeam() != null || !names.add(w.getName())) return false; - if (worms.contains(w)) return false; - if (worms.size() == 0 && !w.isTerminated()) continue; + if (this.wormCollection.contains(w)) return false; + if (this.wormCollection.size() == 0 && !w.isTerminated()) continue; if (w.getMass() < getMinMassTeam() / 2 || w.getMass() > 2 * getMinMassTeam() || w.isTerminated()) { return false; @@ -126,9 +124,9 @@ public class Team { public void removeWormsFromTeam(Worm... worm) throws IllegalArgumentException { - if (worm == null || Arrays.stream(worm).anyMatch(w -> Objects.isNull(w) || !getAllWormsOfTeam().contains(w))) throw new IllegalArgumentException(); + if (worm == null || Arrays.stream(worm).anyMatch(w -> Objects.isNull(w) || !this.wormCollection.contains(w))) throw new IllegalArgumentException(); for (Worm w: worm) { - getAllWormsOfTeam().remove(w); + this.wormCollection.remove(w); w.setTeam(null); } } @@ -146,16 +144,7 @@ public class Team { */ public boolean containsWorm(Worm worm) throws IllegalArgumentException { if (worm == null) throw new IllegalArgumentException(); - return getAllWormsOfTeam().contains(worm); - } - - /** - * - * @return ... - * |wormCollection - */ - public Collection getAllWormsOfTeam() { - return wormCollection; + return this.wormCollection.contains(worm); } public List getAllWormsList() { @@ -168,7 +157,7 @@ public class Team { * |getAllWormsOfTeam().size() */ public int getNbWorms() { - return getAllWormsOfTeam().size(); + return this.wormCollection.size(); } /** @@ -186,11 +175,11 @@ public class Team { public static void mergeTeams(Team receivingTeam, Team supplyingTeam) throws IllegalArgumentException { if (receivingTeam == null || supplyingTeam == null || receivingTeam.equals(supplyingTeam) || - supplyingTeam.getAllWormsOfTeam().stream().anyMatch(s -> receivingTeam.getAllWormsOfTeam().contains(s))) { + supplyingTeam.getAllWormsList().stream().anyMatch(receivingTeam::containsWorm)) { throw new IllegalArgumentException(); } - Worm[] supWorms = supplyingTeam.getAllWormsOfTeam().toArray(new Worm[0]); + Worm[] supWorms = supplyingTeam.getAllWormsList().toArray(new Worm[0]); supplyingTeam.removeWormsFromTeam(supWorms); receivingTeam.addWorm(supWorms); } @@ -216,7 +205,7 @@ public class Team { * |minMass == null */ private double getMinMassTeam() throws IllegalStateException { - Worm minMass = getAllWormsOfTeam().stream().min(Comparator.comparingDouble(Worm::getMass)).orElse(null); + Worm minMass = this.wormCollection.stream().min(Comparator.comparingDouble(Worm::getMass)).orElse(null); if (minMass == null) { throw new IllegalStateException(); } @@ -275,7 +264,7 @@ public class Team { */ public void terminate() { - removeWormsFromTeam(getAllWormsOfTeam().toArray(new Worm[0])); + removeWormsFromTeam(this.wormCollection.toArray(new Worm[0])); this.terminated = true; } diff --git a/OGP1718-Worms/src/worms/model/Worm.java b/OGP1718-Worms/src/worms/model/Worm.java index 81a3b2b..b5e5d31 100644 --- a/OGP1718-Worms/src/worms/model/Worm.java +++ b/OGP1718-Worms/src/worms/model/Worm.java @@ -8,7 +8,6 @@ import worms.util.IllegalNameException; import static java.lang.Math.*; import java.util.List; -import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** @@ -36,7 +35,7 @@ import java.util.concurrent.ThreadLocalRandom; * isValidValueHitPoints(getHitPoints()) * @version 3.0 */ -public class Worm extends GameObject { +public class Worm extends GameObject implements IJumpable{ // region constructor //=================================================================================== @@ -220,17 +219,6 @@ public class Worm extends GameObject { setMaxActionPoints(this.mass); } - /** - * Return the minimum radius the worm can have. - * The minimum radius of the worm expresses the minimum length - * of half of the width of the worm. - */ - @Basic - @Raw - public double getMinRadius() { - return this.minRadius; - } - /** * This variable contains the minimum value of the radius. */ @@ -567,21 +555,6 @@ public class Worm extends GameObject { return maxLocDirection; } - /** - * Returns the distance between two coordinates. - * - * @param start The start coordinate of the equation. - * @param end The end coordinate of the equation. - * @return the distance between the two given coordinates. The distance is equal to - * the square root of the square of the displacement of the x coordinate plus the - * square of the displacement of the y coordinate. - * |result == sqrt(pow(start.getX()-end.getX())+pow(start.getY()-end.getY())) - */ - public double getDistance(Coordinate start, Coordinate end) { - return Math.sqrt(Math.pow(Math.abs(start.getX() - end.getX()), 2) + - Math.pow(Math.abs(start.getY() - end.getY()), 2)); - } - /** * TODO update documentatie * The clashing worms their hit points are reduced. @@ -700,13 +673,13 @@ public class Worm extends GameObject { * @post Let the worm eat if necessary. * |checkEat() */ - public void jump() throws IllegalStateException { + public void jump(double timeStep) throws IllegalStateException { if (!canJump()) throw new IllegalStateException(); double v = jumpVelocity(); - double t = calcJumpTime(); + double t = jumpTime(timeStep); double a = this.orientation; Coordinate location = this.location; @@ -726,20 +699,6 @@ public class Worm extends GameObject { } - /** - * Return the time the worm will jump. - * - * @return The time the worm will jump. The distance divided by the velocity multiplied - * with the cosinus of the orientation. - * |jumpDistance(this.jumpVelocity) / (this.jumpVelocity * Math.cos(this.orientation)) - * @throws IllegalStateException Orientation is bigger then pi or action points is equal to 0. - * |getOrientation() >= PI || getActionPoints() == 0 - */ - public double jumpTime() { - - return calcJumpTime(); - } - /** * Gives the location after a jump. * @@ -751,10 +710,10 @@ public class Worm extends GameObject { * |Coordinate.create(getLocation().getX() + this.jumpVelocity() * cos(getOrientation()) * deltaTime, * |getLocation().getY() + this.jumpVelocity() * sin(getOrientation()) * deltaTime - 0.5 * G * pow(deltaTime, 2)) * @throws IllegalArgumentException() If the deltaTime is not a number or bigger then jumpTime or smaller then 0. - * |if (Double.isNaN(deltaTime) || deltaTime > this.jumpTime() || deltaTime < 0) + * |if (Double.isNaN(deltaTime) || deltaTime < 0) */ public Coordinate jumpStep(double deltaTime) { - if (Double.isNaN(deltaTime) || deltaTime > jumpTime() || deltaTime < 0 || this.actionPoints == 0) + if (Double.isNaN(deltaTime) || deltaTime < 0 || !canJump()) throw new IllegalArgumentException(); double velocity = jumpVelocity(); @@ -779,7 +738,7 @@ public class Worm extends GameObject { * | break * |result == t */ - private double calcJumpTime() { + public double jumpTime(double timeStep) { World world = this.world; if (world == null) throw new IllegalStateException("World cannot be null"); @@ -793,7 +752,7 @@ public class Worm extends GameObject { while (true) { - t += 0.05; + t += timeStep; double x = loc.getX() + v * t * cos(a); double y = loc.getY() + v * t * sin(a) - (G * t * t) / 2.0; newLoc = Coordinate.create(x, y); @@ -826,7 +785,7 @@ public class Worm extends GameObject { * |result == getActionPoints() > 0 && getOrientation() < PI */ private boolean canJump() { - return this.actionPoints > 0 && this.orientation < PI; + return this.actionPoints > 0 && this.orientation <= PI; } /**