add javadoc to grid's elements, deleted useless x and y parameters in Wall, adjustments to bombs timer and explosion size

This commit is contained in:
Quentin Legot 2021-12-08 18:43:34 +01:00
parent ea07ca0c6a
commit 8415739d18
13 changed files with 126 additions and 51 deletions

View File

@ -38,21 +38,21 @@ public class LockGridFactoryBuilder extends AbstractGridFactoryBuilder {
for (int j = 0; j < getGrid().getColumn(); j++) { for (int j = 0; j < getGrid().getColumn(); j++) {
Box box; Box box;
if (i == 0 && j == 0) { if (i == 0 && j == 0) {
box = new Wall(i, j); box = new Wall();
} else if (i == 0 && j == getGrid().getColumn()-1) { } else if (i == 0 && j == getGrid().getColumn()-1) {
box = new Wall(i, j); box = new Wall();
} else if (i == getGrid().getRow()-1 && j == 0) { } else if (i == getGrid().getRow()-1 && j == 0) {
box = new Wall(i, j); box = new Wall();
} else if (i == getGrid().getRow()-1 && j == getGrid().getColumn()-1) { } else if (i == getGrid().getRow()-1 && j == getGrid().getColumn()-1) {
box = new Wall(i, j); box = new Wall();
} else if (i == 0) { } else if (i == 0) {
box = new Wall(i, j); box = new Wall();
} else if (i == getGrid().getRow()-1) { } else if (i == getGrid().getRow()-1) {
box = new Wall(i, j); box = new Wall();
} else if (j == 0) { } else if (j == 0) {
box = new Wall(i, j); box = new Wall();
} else if (j == getGrid().getColumn()-1) { } else if (j == getGrid().getColumn()-1) {
box = new Wall(i, j); box = new Wall();
} else { } else {
box = null; box = null;
} }
@ -92,7 +92,7 @@ public class LockGridFactoryBuilder extends AbstractGridFactoryBuilder {
if(Math.random() >= wallProbability){ if(Math.random() >= wallProbability){
Point point = new Point(i,j); Point point = new Point(i,j);
if(getIllusionNumberWallNeighbour(point) <= 3){ if(getIllusionNumberWallNeighbour(point) <= 3){
getGrid().getBoard().get(point).setB(new Wall(i,j)); getGrid().getBoard().get(point).setB(new Wall());
} }
else{ else{
getGrid().getBoard().get(point).setB(new AbstractBox()); getGrid().getBoard().get(point).setB(new AbstractBox());
@ -132,7 +132,7 @@ public class LockGridFactoryBuilder extends AbstractGridFactoryBuilder {
* @param point the position where we want to place a new wall * @param point the position where we want to place a new wall
* @return number of walls and locked place around {@code position} * @return number of walls and locked place around {@code position}
*/ */
public int getIllusionNumberWallNeighbour(Point point){ private int getIllusionNumberWallNeighbour(Point point){
int countWall = 0; int countWall = 0;
for (int deltaRow = -1; deltaRow <= 1; deltaRow++){ for (int deltaRow = -1; deltaRow <= 1; deltaRow++){
for (int deltaColomn = -1; deltaColomn <= 1; deltaColomn++) { for (int deltaColomn = -1; deltaColomn <= 1; deltaColomn++) {

View File

@ -1,5 +1,9 @@
package fr.lnl.game.server.games.grid.elements; package fr.lnl.game.server.games.grid.elements;
/**
* AbstractBox is instantiable (not an abstract class), but when it's the case, instance doesn't represent anything,
* it's only to see if there is a lock on this position or not
*/
public class AbstractBox implements Box { public class AbstractBox implements Box {
boolean lock; boolean lock;

View File

@ -5,12 +5,24 @@ import fr.lnl.game.server.games.grid.Grid;
import fr.lnl.game.server.games.player.Player; import fr.lnl.game.server.games.player.Player;
import fr.lnl.game.server.utils.Point; import fr.lnl.game.server.utils.Point;
/**
* Bomb are elements which explode when someone walks on it or after a countdown, the explosion area is on multiple cases
*/
public class Bomb extends Explosive implements CountdownBox { public class Bomb extends Explosive implements CountdownBox {
/**
* Position of the bomb
*/
private final Point point; private final Point point;
private final Game game; private final Game game;
private int counter = 3; /**
private static int EXPLOSION_SIZE = 4; * Timer before explosion
*/
private int counter = 5;
/**
* Explosion size, size is circle, not square
*/
private static final int EXPLOSION_SIZE = 2;
public Bomb(Point point, Game game) { public Bomb(Point point, Game game) {
super(game.getCurrentPlayer()); super(game.getCurrentPlayer());
@ -19,6 +31,14 @@ public class Bomb extends Explosive implements CountdownBox {
counter = counter * game.getPlayers().size(); counter = counter * game.getPlayers().size();
} }
/**
* Decrement players energy around this element
* @param grid Game's grid
* @param player the player who walks on this element
* @param position position of this element on the grid
* @see InteractiveBox#interact(Grid, Player, Point)
* @see Explosive#interact(Grid, Player, Point)
*/
@Override @Override
public void interact(Grid grid, /* Nullable */ Player player, Point position) { public void interact(Grid grid, /* Nullable */ Player player, Point position) {
if(player != null) if(player != null)
@ -26,6 +46,10 @@ public class Bomb extends Explosive implements CountdownBox {
super.interact(grid, player, position); super.interact(grid, player, position);
} }
/**
* When the timer (counter) goes down to 0, the bomb explode
* @see CountdownBox#update()
*/
@Override @Override
public void update() { public void update() {
Grid grid = game.getGrid(); Grid grid = game.getGrid();
@ -46,6 +70,11 @@ public class Bomb extends Explosive implements CountdownBox {
} }
} }
/**
* @param a adjacent side of a triangle
* @param b opposite side of a triangle
* @return Pythagoras' theorem value
*/
public double pythagoras(double a, double b) { public double pythagoras(double a, double b) {
return Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); return Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
} }

View File

@ -2,6 +2,11 @@ package fr.lnl.game.server.games.grid.elements;
public interface Box { public interface Box {
/**
* @return true if this box is locked (can't place wall on this position)
* @see fr.lnl.game.server.games.grid.build.LockGridFactoryBuilder
*/
boolean isLock(); boolean isLock();
void setLock(boolean lock); void setLock(boolean lock);
} }

View File

@ -1,7 +1,13 @@
package fr.lnl.game.server.games.grid.elements; package fr.lnl.game.server.games.grid.elements;
/**
* A box implemented by CountdownBox is a box which do an action a certain time after being placed
*/
public interface CountdownBox { public interface CountdownBox {
/**
* Call at each game tick (After a player do an action)
*/
void update(); void update();
} }

View File

@ -4,17 +4,31 @@ import fr.lnl.game.server.games.grid.Grid;
import fr.lnl.game.server.games.player.Player; import fr.lnl.game.server.games.player.Player;
import fr.lnl.game.server.utils.Point; import fr.lnl.game.server.utils.Point;
/**
* An EnergyBall is a box which give back a bit of player energy after it walks on the ball
*/
public class EnergyBall extends AbstractBox implements InteractiveBox{ public class EnergyBall extends AbstractBox implements InteractiveBox{
@Override /**
public boolean equals(Object o) { * Increment energy of player who walks on this element
if (this == o) return true; * @param grid Game's grid
return o != null && getClass() == o.getClass();// no var to test * @param player the player who walks on this element
} * @param position position of this element on the grid
* @see InteractiveBox#interact(Grid, Player, Point)
*/
@Override @Override
public void interact(Grid grid, Player player, Point position) { public void interact(Grid grid, Player player, Point position) {
player.incrementEnergy(player.getClassPlayer().getGainEnergy()); player.incrementEnergy(player.getClassPlayer().getGainEnergy());
grid.getBoard().get(position).setB(null); grid.getBoard().get(position).setB(null);
} }
/**
* Used by tests
* @param obj the object to compare
* @return true if obj is an instance of EnergyBall, false otherwise
*/
@Override
public boolean equals(Object obj) {
return obj instanceof EnergyBall;
}
} }

View File

@ -4,6 +4,9 @@ import fr.lnl.game.server.games.grid.Grid;
import fr.lnl.game.server.games.player.Player; import fr.lnl.game.server.games.player.Player;
import fr.lnl.game.server.utils.Point; import fr.lnl.game.server.utils.Point;
/**
* Super class of {@link Bomb} and {@link Mine}
*/
public abstract class Explosive extends AbstractBox implements InteractiveBox { public abstract class Explosive extends AbstractBox implements InteractiveBox {
Player player; Player player;
@ -12,6 +15,13 @@ public abstract class Explosive extends AbstractBox implements InteractiveBox {
this.player = player; this.player = player;
} }
/**
* Destroy this element on explosion
* @param grid Game's grid
* @param player the player who walks on this element
* @param position position of this element on the grid
* @see InteractiveBox#interact(Grid, Player, Point)
*/
@Override @Override
public void interact(Grid grid, Player player, Point position) { public void interact(Grid grid, Player player, Point position) {
if(grid.getBoard().get(position).getB() == this){ if(grid.getBoard().get(position).getB() == this){

View File

@ -4,9 +4,17 @@ import fr.lnl.game.server.games.grid.Grid;
import fr.lnl.game.server.games.player.Player; import fr.lnl.game.server.games.player.Player;
import fr.lnl.game.server.utils.Point; import fr.lnl.game.server.utils.Point;
/**
* A box implemented by InteractiveBox is a box which do an action when someone walks on it
*/
public interface InteractiveBox { public interface InteractiveBox {
/**
* Call when a player walk on it
* @param grid Game's grid
* @param player the player who walks on this element
* @param position position of this element on the grid
*/
void interact(Grid grid, Player player, Point position); void interact(Grid grid, Player player, Point position);
} }

View File

@ -4,12 +4,23 @@ import fr.lnl.game.server.games.grid.Grid;
import fr.lnl.game.server.games.player.Player; import fr.lnl.game.server.games.player.Player;
import fr.lnl.game.server.utils.Point; import fr.lnl.game.server.utils.Point;
/**
* A mine is an element which explose when someone walks on it, the explosion area is on 1 case only
*/
public class Mine extends Explosive{ public class Mine extends Explosive{
public Mine(Player player) { public Mine(Player player) {
super(player); super(player);
} }
/**
* Decrement energy of the player who walks on this element
* @param grid Game's grid
* @param player the player who walks on this element
* @param position position of this element on the grid
* @see InteractiveBox#interact(Grid, Player, Point)
* @see Explosive#interact(Grid, Player, Point)
*/
@Override @Override
public void interact(Grid grid, Player player, Point position) { public void interact(Grid grid, Player player, Point position) {
player.decrementEnergy(player.getClassPlayer().getPenaltyMine()); player.decrementEnergy(player.getClassPlayer().getPenaltyMine());

View File

@ -1,29 +1,17 @@
package fr.lnl.game.server.games.grid.elements; package fr.lnl.game.server.games.grid.elements;
/**
* A wall is an intraversable object
*/
public class Wall extends AbstractBox { public class Wall extends AbstractBox {
private final int x; /**
private final int y; * Used by tests
* @param obj the object to compare
public Wall(int x, int y){ * @return true if obj is an instance of wall, false otherwise
this.x = x; */
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object obj) {
if (this == o) return true; return obj instanceof Wall;
if (o == null || getClass() != o.getClass()) return false;
Wall other = (Wall) o;
return x == other.x && y == other.y;
} }
} }

View File

@ -36,10 +36,10 @@ public class GridTest {
@Test @Test
public void testGrid() { public void testGrid() {
// test Grid#initGrid() // test Grid#initGrid()
assertEquals(new Wall(0, 0), grid.getBoard().get(new Point(0,0)).getB()); assertEquals(new Wall(), grid.getBoard().get(new Point(0,0)).getB());
assertEquals(new Wall(0, grid.getColumn() - 1), grid.getBoard().get(new Point(0, grid.getColumn() - 1)).getB()); assertEquals(new Wall(), grid.getBoard().get(new Point(0, grid.getColumn() - 1)).getB());
assertEquals(new Wall(grid.getRow() - 1, 0), grid.getBoard().get(new Point(grid.getRow() - 1, 0)).getB()); assertEquals(new Wall(), grid.getBoard().get(new Point(grid.getRow() - 1, 0)).getB());
assertEquals(new Wall(grid.getRow() - 1, grid.getColumn() - 1), grid.getBoard().get(new Point(grid.getRow() - 1, grid.getColumn() - 1)).getB()); assertEquals(new Wall(), grid.getBoard().get(new Point(grid.getRow() - 1, grid.getColumn() - 1)).getB());
// test placePlayersBRUT (mocked) // test placePlayersBRUT (mocked)
grid.getPlayers().forEach(p -> System.out.println(p.getId() + ": " + p.getPosition())); grid.getPlayers().forEach(p -> System.out.println(p.getId() + ": " + p.getPosition()));
assertEquals(grid.getPlayers().get(0), grid.getBoard().get(new Point(7, 7)).getA()); assertEquals(grid.getPlayers().get(0), grid.getBoard().get(new Point(7, 7)).getA());

View File

@ -15,7 +15,7 @@ public class Mock {
public Mock(List<Player> players) { public Mock(List<Player> players) {
this.buildStrategy = MockGridFactoryBuilder.create().gridDimensions(16, 16).playersList(players).wallProbability(0.80F).energyProbability(0.95F); this.buildStrategy = MockGridFactoryBuilder.create().gridDimensions(16, 16).playersList(players).wallProbability(0.80F).energyProbability(0.95F);
game = new Game(buildStrategy, players, new MockDisplayWinner()); game = new Game(buildStrategy, players);
this.grid = game.getGrid(); this.grid = game.getGrid();
} }

View File

@ -25,10 +25,10 @@ public class MockGridFactoryBuilder extends LockGridFactoryBuilder {
@Override @Override
protected void initPlaceInternWall() { protected void initPlaceInternWall() {
grid.getBoard().get(new Point(3,6)).setB(new Wall(3,6)); grid.getBoard().get(new Point(3,6)).setB(new Wall());
grid.getBoard().get(new Point(7,14)).setB(new Wall(7,14)); grid.getBoard().get(new Point(7,14)).setB(new Wall());
grid.getBoard().get(new Point(10,7)).setB(new Wall(10,7)); grid.getBoard().get(new Point(10,7)).setB(new Wall());
grid.getBoard().get(new Point(14,2)).setB(new Wall(14,2)); grid.getBoard().get(new Point(14,2)).setB(new Wall());
} }
@Override @Override