Improved argument parser and fix a bug with grid not initialize on new instance
This commit is contained in:
parent
ad9ac682bb
commit
2e86f71e94
@ -5,6 +5,7 @@ import fr.lnl.game.client.view.Window;
|
||||
import fr.lnl.game.server.games.Game;
|
||||
import fr.lnl.game.server.games.grid.Grid;
|
||||
import fr.lnl.game.server.games.player.*;
|
||||
import fr.lnl.game.server.utils.CrashException;
|
||||
import fr.lnl.game.server.utils.Point;
|
||||
import javafx.application.Application;
|
||||
import javafx.stage.Stage;
|
||||
@ -20,47 +21,56 @@ public class App extends Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
argsList = new LinkedList<>(Arrays.asList(args));
|
||||
Class<? extends AbstractView> clazz = parseView();
|
||||
argsList.removeIf(s -> s.startsWith("-D") || s.equals("fr.lnl.game.client.App")); // remove given parameters from gradle
|
||||
Class<? extends AbstractView> clazz;
|
||||
try {
|
||||
clazz = parseView();
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new CrashException(e.getMessage(), e);
|
||||
}
|
||||
if(clazz.equals(Terminal.class)) {
|
||||
try {
|
||||
launchTerminal();
|
||||
} catch (InvocationTargetException | IllegalAccessException | InstantiationException |
|
||||
NoSuchMethodException e) {
|
||||
throw new CrashException(e.getCause());
|
||||
}
|
||||
launchTerminal();
|
||||
} else {
|
||||
launch();
|
||||
}
|
||||
}
|
||||
|
||||
public static Game startGame()
|
||||
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
|
||||
public static Game startGame() throws IllegalArgumentException, InvocationTargetException, NoSuchMethodException,
|
||||
InstantiationException, IllegalAccessException {
|
||||
List<Player> players = parsePlayers();
|
||||
System.out.println(players);
|
||||
return new Game(new Grid(12, 12, players), players);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(Stage stage) throws Exception {
|
||||
game = startGame();
|
||||
public void start(Stage stage) {
|
||||
try {
|
||||
game = startGame();
|
||||
} catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException | InstantiationException
|
||||
| IllegalAccessException e) {
|
||||
throw new CrashException(e.getMessage(), e);
|
||||
}
|
||||
for (Player player : game.getPlayers()) {
|
||||
playerList.put(player, new ClientPlayer(player, new Window(stage, game, player)));
|
||||
}
|
||||
playerList.get(game.getCurrentPlayer()).getView().show();
|
||||
}
|
||||
|
||||
public static void launchTerminal()
|
||||
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
|
||||
game = startGame();
|
||||
public static void launchTerminal() {
|
||||
try {
|
||||
game = startGame();
|
||||
} catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException | InstantiationException
|
||||
| IllegalAccessException e) {
|
||||
throw new CrashException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
for (Player player : game.getPlayers()) {
|
||||
playerList.put(player, new ClientPlayer(player, new Terminal(game, player)));
|
||||
}
|
||||
playerList.get(game.getCurrentPlayer()).getView().show();
|
||||
}
|
||||
|
||||
// TODO: 23/10/2021 nécessite un rework -> faire une view par joueur
|
||||
public static List<Player> parsePlayers()
|
||||
throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
|
||||
public static List<Player> parsePlayers() throws IllegalArgumentException, NoSuchMethodException,
|
||||
InvocationTargetException, InstantiationException, IllegalAccessException {
|
||||
List<Player> playerList = new ArrayList<>();
|
||||
Class<? extends AbstractPlayer> playerClass = null;
|
||||
ClassPlayer classPlayer = null;
|
||||
@ -85,6 +95,7 @@ public class App extends Application {
|
||||
playerClass = ComputerPlayer.class;
|
||||
}
|
||||
case "default" -> classPlayer = ClassPlayer.DEFAULT;
|
||||
default -> throw new IllegalArgumentException("Unknown argument: " + str);
|
||||
}
|
||||
}
|
||||
if(playerClass != null)
|
||||
@ -104,14 +115,16 @@ public class App extends Application {
|
||||
public static Class<? extends AbstractView> parseView() {
|
||||
Class<? extends AbstractView> clazz;
|
||||
if(!argsList.isEmpty()) {
|
||||
if(argsList.get(0).equalsIgnoreCase("terminal")) {
|
||||
if(argsList.get(0).equals("terminal")) {
|
||||
clazz = Terminal.class;
|
||||
} else {
|
||||
} else if(argsList.get(0).equals("window")){
|
||||
clazz = Window.class;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown argument: " + argsList.get(0));
|
||||
}
|
||||
argsList.removeFirst();
|
||||
} else {
|
||||
clazz = Window.class;
|
||||
throw new IllegalArgumentException("No argument given");
|
||||
}
|
||||
return clazz;
|
||||
}
|
||||
|
@ -3,15 +3,7 @@ package fr.lnl.game.client;
|
||||
import fr.lnl.game.client.view.View;
|
||||
import fr.lnl.game.server.games.player.Player;
|
||||
|
||||
public class ClientPlayer {
|
||||
|
||||
private final Player serverPlayer;
|
||||
private final View view;
|
||||
|
||||
public ClientPlayer(Player serverPlayer, View view) {
|
||||
this.serverPlayer = serverPlayer;
|
||||
this.view = view;
|
||||
}
|
||||
public record ClientPlayer(Player serverPlayer, View view) {
|
||||
|
||||
public Player getServerPlayer() {
|
||||
return serverPlayer;
|
||||
|
@ -1,9 +0,0 @@
|
||||
package fr.lnl.game.client;
|
||||
|
||||
public class CrashException extends RuntimeException {
|
||||
|
||||
public CrashException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
@ -11,7 +11,7 @@ public class Terminal extends AbstractView {
|
||||
|
||||
public void show() {
|
||||
// TODO: 26/10/2021
|
||||
game.getGrid().printGrid();
|
||||
System.out.println(game.getGrid().toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,14 +1,5 @@
|
||||
package fr.lnl.game.server;
|
||||
|
||||
import fr.lnl.game.server.games.Game;
|
||||
import fr.lnl.game.server.games.grid.Grid;
|
||||
import fr.lnl.game.server.games.player.ComputerPlayer;
|
||||
import fr.lnl.game.server.games.player.ClassPlayer;
|
||||
import fr.lnl.game.server.games.player.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ServerMain {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -11,7 +11,7 @@ public class Game {
|
||||
Player currentPlayer;
|
||||
List<Player> players;
|
||||
|
||||
public Game(Grid grid, List<Player> players) {
|
||||
public Game(Grid grid, List<Player> players) throws IllegalArgumentException {
|
||||
if(players.size() < 2)
|
||||
throw new IllegalArgumentException("The game need 2 or more player to start");
|
||||
this.players = players;
|
||||
@ -19,7 +19,7 @@ public class Game {
|
||||
this.grid = grid;
|
||||
}
|
||||
|
||||
public void play(){
|
||||
public void play() {
|
||||
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ public class Game {
|
||||
return players.parallelStream().filter(player -> !player.isAlive()).count() == 1;
|
||||
}
|
||||
|
||||
public Player getWinner(){
|
||||
public Player getWinner() {
|
||||
return players.parallelStream().filter(player -> !player.isAlive()).findFirst().orElseThrow(ArrayIndexOutOfBoundsException::new);
|
||||
}
|
||||
|
||||
@ -35,11 +35,16 @@ public class Game {
|
||||
return currentPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change player to the next available in the list
|
||||
*/
|
||||
public void nextCurrentPlayer() {
|
||||
int index = players.indexOf(currentPlayer) + 1;
|
||||
if(index == players.size())
|
||||
index = 0;
|
||||
currentPlayer = players.get(index);
|
||||
do {
|
||||
int index = players.indexOf(currentPlayer) + 1;
|
||||
if(index == players.size())
|
||||
index = 0;
|
||||
currentPlayer = players.get(index);
|
||||
} while(!currentPlayer.isAlive()); // On arrête la boucle dès qu'on trouve un joueur en vie
|
||||
}
|
||||
|
||||
public Grid getGrid() {
|
||||
|
@ -3,7 +3,7 @@ package fr.lnl.game.server.games.action;
|
||||
import fr.lnl.game.server.games.Game;
|
||||
|
||||
public abstract class AbstractAction implements Action {
|
||||
private Game game;
|
||||
private final Game game;
|
||||
|
||||
public AbstractAction(Game game){
|
||||
this.game = game;
|
||||
|
@ -2,7 +2,6 @@ package fr.lnl.game.server.games.action;
|
||||
|
||||
import fr.lnl.game.server.games.Game;
|
||||
import fr.lnl.game.server.games.grid.Bomb;
|
||||
import fr.lnl.game.server.games.grid.Mine;
|
||||
import fr.lnl.game.server.games.player.Player;
|
||||
import fr.lnl.game.server.utils.Point;
|
||||
|
||||
@ -15,7 +14,7 @@ public class DropBomb extends DropObject {
|
||||
super(game);
|
||||
}
|
||||
|
||||
//voir pour la redondance de code au niveau de DropBomb,DropObject,DropMine
|
||||
// voir pour la redondance de code au niveau de DropBomb, DropObject,DropMine
|
||||
@Override
|
||||
public void doAction() {
|
||||
List<Point> points = getValidPoint();
|
||||
|
@ -5,7 +5,6 @@ public class EnergyBall implements Box{
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
return true; // no var to test
|
||||
return o != null && getClass() == o.getClass();// no var to test
|
||||
}
|
||||
}
|
||||
|
@ -10,16 +10,17 @@ import java.util.List;
|
||||
|
||||
|
||||
public class Grid {
|
||||
private HashMap<Point, Pair<Player, Box>> board;
|
||||
private int row;
|
||||
private int column;
|
||||
private List<Player> players;
|
||||
private final HashMap<Point, Pair<Player, Box>> board;
|
||||
private final int row;
|
||||
private final int column;
|
||||
private final List<Player> players;
|
||||
|
||||
public Grid(int row, int column, List<Player> players) {
|
||||
this.row = row;
|
||||
this.column = column;
|
||||
this.players = players;
|
||||
board = new HashMap<>();
|
||||
initGrid();
|
||||
}
|
||||
|
||||
public void initGrid(){
|
||||
@ -121,14 +122,6 @@ public class Grid {
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated modèle mvc non respecté
|
||||
*/
|
||||
@Deprecated
|
||||
public void printGrid() {
|
||||
System.out.println(this);
|
||||
}
|
||||
|
||||
public List<Player> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
@ -6,9 +6,9 @@ import java.util.Objects;
|
||||
|
||||
public class Wall implements Box {
|
||||
|
||||
private Cardinal cardinal;
|
||||
private int x;
|
||||
private int y;
|
||||
private final Cardinal cardinal;
|
||||
private final int x;
|
||||
private final int y;
|
||||
|
||||
public Wall(Cardinal cardinal, int x, int y){
|
||||
this.cardinal = cardinal;
|
||||
|
@ -6,13 +6,13 @@ import fr.lnl.game.server.utils.Point;
|
||||
|
||||
public abstract class AbstractPlayer implements Player {
|
||||
|
||||
private int id;
|
||||
private final int id;
|
||||
private Point point;
|
||||
private int energy;
|
||||
private Weapon weapon;
|
||||
private boolean shieldDeploy;
|
||||
private Action[] actions;
|
||||
private ClassPlayer classPlayer;
|
||||
private final ClassPlayer classPlayer;
|
||||
|
||||
public AbstractPlayer(Integer id, Point point, boolean shieldDeploy, ClassPlayer classPlayer) {
|
||||
this.id = id;
|
||||
|
@ -0,0 +1,9 @@
|
||||
package fr.lnl.game.server.utils;
|
||||
|
||||
public class CrashException extends RuntimeException {
|
||||
|
||||
public CrashException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
}
|
@ -18,7 +18,7 @@ public class ActionPlayerTest {
|
||||
this.game = mock.game;
|
||||
}
|
||||
|
||||
// TODO: 21/10/2021 Vérifier sur Move effectue la bonne action en pensant a appeller isPossible() avant et
|
||||
// TODO: 21/10/2021 Vérifier sur Move effectue la bonne action en pensant a appeler isPossible() avant et
|
||||
// en checkant son résultat
|
||||
@Test
|
||||
public void moveActionTest() {
|
||||
|
@ -22,7 +22,6 @@ public class Mock {
|
||||
List<Player> players = Arrays.asList(new ComputerPlayer(1,null, ClassPlayer.DEFAULT),
|
||||
new ComputerPlayer(2,null, ClassPlayer.DEFAULT));
|
||||
this.grid = new Grid(16,16, players);
|
||||
grid.initGrid();
|
||||
placePlayersBRUT();
|
||||
placeEnergyBallBRUT();
|
||||
placeInternWallBRUT();
|
||||
|
Loading…
Reference in New Issue
Block a user