diff --git a/src/main/java/controller/Command/GameCommands.java b/src/main/java/controller/Command/GameCommands.java index 58dd4b7..5ee022e 100644 --- a/src/main/java/controller/Command/GameCommands.java +++ b/src/main/java/controller/Command/GameCommands.java @@ -2,7 +2,6 @@ import controller.Command.game.DotsAndBoxesController; import controller.Command.game.GameController; -import model.DotsAndBoxes.DotsAndBoxes; public class GameCommands implements ResolveCommand { private static final GameCommands gameCommands = new GameCommands(); @@ -23,6 +22,9 @@ public void resolveCommand(String[] tokens) throws Exception { break; case "DotsAndBoxes": DotsAndBoxesCommand.getDotsAndBoxesCommand().execute(tokens); + break; + case "BattleSea": + BattleSeaCommand.getBattleSeaCommand().execute(tokens); } } @@ -70,24 +72,22 @@ public void execute(String[] tokens) throws Exception { case "open": done(GameController.getGameController().open(tokens[3], tokens[1])); break; - case "join" : - done(DotsAndBoxesController.getDotsAndBoxesController().join(Long.parseLong(tokens[3]),tokens[4])); - case "end of my turn": + case "endofmyturn": done(DotsAndBoxesController.getDotsAndBoxesController().endOfMyTurn(Long.parseLong(tokens[3]))); break; - case "show score": + case "showscore": done(DotsAndBoxesController.getDotsAndBoxesController().showScore(Long.parseLong(tokens[3]))); break; - case "show available lines": + case "showavailablelines": done(DotsAndBoxesController.getDotsAndBoxesController().showAvailableLines(Long.parseLong(tokens[3]))); break; - case "show table": + case "showtable": done(DotsAndBoxesController.getDotsAndBoxesController().showTable(Long.parseLong(tokens[3]))); break; - case "who is next?": + case "whoisnext?": done(DotsAndBoxesController.getDotsAndBoxesController().whoIsNext(Long.parseLong(tokens[3]))); break; - case "show result": + case "showresult": done(DotsAndBoxesController.getDotsAndBoxesController().showResult(Long.parseLong(tokens[3]))); break; case "end": @@ -95,4 +95,22 @@ public void execute(String[] tokens) throws Exception { } } } + + private static class BattleSeaCommand implements ExecuteCommand { + private static final BattleSeaCommand battleSeaCommand = new BattleSeaCommand(); + + private BattleSeaCommand() { + } + + static BattleSeaCommand getBattleSeaCommand() { + return battleSeaCommand; + } + + @Override + public void execute(String[] tokens) throws Exception { + switch (tokens[2]) { + //TODO add commands. + } + } + } } diff --git a/src/main/java/controller/Command/game/BattleSeaController.java b/src/main/java/controller/Command/game/BattleSeaController.java index 55baedd..7591df7 100644 --- a/src/main/java/controller/Command/game/BattleSeaController.java +++ b/src/main/java/controller/Command/game/BattleSeaController.java @@ -1,4 +1,16 @@ package controller.Command.game; public class BattleSeaController { + private static final BattleSeaController battleSeaController = new BattleSeaController(); + + private BattleSeaController() { + } + + public static BattleSeaController getBattleSeaController() { + return battleSeaController; + } + + public void changeCoordination(char ship, int x, int y) { + + } } diff --git a/src/main/java/controller/Command/game/DotsAndBoxesController.java b/src/main/java/controller/Command/game/DotsAndBoxesController.java index 16cc34b..ab77850 100644 --- a/src/main/java/controller/Command/game/DotsAndBoxesController.java +++ b/src/main/java/controller/Command/game/DotsAndBoxesController.java @@ -4,8 +4,13 @@ import exception.game.NotYourTurn; import model.DotsAndBoxes.DotsAndBoxes; +import model.Game; +import model.GameLog; import model.Player; +import java.time.LocalDate; +import java.util.Date; + public class DotsAndBoxesController { private static final DotsAndBoxesController dotsAndBoxesController = new DotsAndBoxesController(); @@ -148,8 +153,17 @@ public String end(long gameID) throws GameNotFound { DotsAndBoxes dotsAndBoxes = DotsAndBoxes.getDotsAndBoxes().get(gameID); if (dotsAndBoxes != null) { if (dotsAndBoxes.isBoardFull()) { + GameLog.Result result; + if (dotsAndBoxes.judge() == null) + result = GameLog.Result.DRAW; + else if (dotsAndBoxes.judge().equals(dotsAndBoxes.getHost())) + result = GameLog.Result.WIN; + else + result = GameLog.Result.DEFEAT; + new GameLog("dotsandboxes", dotsAndBoxes.getHost(), dotsAndBoxes.getGuest(), LocalDate.now(), result); return "Back to the game menu"; } else { + new GameLog("dotsandboxes", dotsAndBoxes.getHost(), dotsAndBoxes.getGuest(), LocalDate.now(), dotsAndBoxes.winByForfeit().equals(dotsAndBoxes.getHost())? GameLog.Result.WIN: GameLog.Result.DEFEAT); return dotsAndBoxes.winByForfeit().getUsername() + "won by forfeit" + '\n' + "Back to the game menu"; } diff --git a/src/main/java/controller/Command/game/GameController.java b/src/main/java/controller/Command/game/GameController.java index 3aa1e00..65ef56a 100644 --- a/src/main/java/controller/Command/game/GameController.java +++ b/src/main/java/controller/Command/game/GameController.java @@ -2,6 +2,7 @@ import exception.game.GameNotFound; import exception.UsernameNotFound; +import exception.game.NotPlayedYet; import model.DotsAndBoxes.DotsAndBoxes; import model.Game; import model.GameLog; @@ -23,7 +24,7 @@ public static GameController getGameController() { public String names() { StringBuilder tmp = new StringBuilder(); - for (String s : Game.getGames()) { + for (String s : Game.getNames()) { tmp.append(s).append(" • "); } return tmp.toString().substring(0, tmp.toString().length() - 1).trim(); @@ -36,14 +37,10 @@ public String open(String username, String game) throws GameNotFound { break; case "DotsAndBoxes": return Long.toString((new DotsAndBoxes(Player.getPlayers().get(username))).getGameID()); // returns game id for further uses (user game commands) - break; default: throw new GameNotFound(); } - } - - public String turn(long game) { // changes turn - + return null; } public void showScoreboard(String gameName) throws GameNotFound { diff --git a/src/main/java/controller/DotsAndBoxesController.java b/src/main/java/controller/DotsAndBoxesController.java deleted file mode 100644 index 791af41..0000000 --- a/src/main/java/controller/DotsAndBoxesController.java +++ /dev/null @@ -1,6 +0,0 @@ -package controller; - -public class DotsAndBoxesController { - - -} diff --git a/src/main/java/exception/game/NotPlayedYet.java b/src/main/java/exception/game/NotPlayedYet.java new file mode 100644 index 0000000..fbaffbe --- /dev/null +++ b/src/main/java/exception/game/NotPlayedYet.java @@ -0,0 +1,7 @@ +package exception.game; + +public class NotPlayedYet extends Exception { + public NotPlayedYet() { + super("You should play first!"); + } +} diff --git a/src/main/java/model/BattleSea/BattleSea.java b/src/main/java/model/BattleSea/BattleSea.java index 41fd10c..3eb5952 100644 --- a/src/main/java/model/BattleSea/BattleSea.java +++ b/src/main/java/model/BattleSea/BattleSea.java @@ -1,20 +1,52 @@ package model.BattleSea; -import java.util.Scanner; +import model.Game; +import model.Player; +import java.util.HashMap; + +public class BattleSea extends Game { + private static HashMap battleSeas = new HashMap<>(); + + BattleSeaPlayer host ; + BattleSeaPlayer guest ; + BattleSeaPlayer turn; + + public BattleSea(Player host) { + super(); + battleSeas.put(getGameID(), this); + this.host = new BattleSeaPlayer(host); + turn = this.host; + } -public class BattleSea { + public static HashMap getBattleSeas() { + return battleSeas; + } - public static Scanner scanner = new Scanner(System.in); - static BattleSeaPlayer host = new BattleSeaPlayer(); - static BattleSeaPlayer guest = new BattleSeaPlayer(); + @Override + public void turn() { + if (turn.equals(host)) { + turn = guest; + } else { + turn = host; + } + } - public static void runBattleSea(){ - setupRandomBoard(host); - host.playerGrid.printShips(); - //TODO ????? + @Override + public boolean join(Player guest) { + if (this.guest == null) { + this.guest = new BattleSeaPlayer(guest); + return true; + } else { + return false; + } + } + + @Override + public Player judge() { + return null; } - private static void setupRandomBoard(BattleSeaPlayer battleSeaPlayer) { + private void setupRandomBoard(BattleSeaPlayer battleSeaPlayer) { System.out.println(); int counterOfShips = 0; @@ -41,43 +73,43 @@ private static void setupRandomBoard(BattleSeaPlayer battleSeaPlayer) { } } - private static void askForGuess(BattleSeaPlayer player, BattleSeaPlayer opponent, int x, int y) { - boolean flag = false; - // row == y , col == x - - if (x < 0 || x > 9 || y < 0 || y > 9) { - System.out.println("Coordinates must be inside the grid."); - } - - while (!flag) { - if (!opponent.playerGrid.alreadyGuessed(y, x)){ - if (opponent.playerGrid.hasShip(y, x)) { - player.oppGrid.markHit(y, x); - opponent.playerGrid.markHit(y, x); - System.out.println("Bombed successfully!!!"); - Ship oppShip = opponent.ships[convertLetterToInt(opponent.playerGrid.get(y, x).getShipName())]; - Ship playerShip = player.ships[convertLetterToInt(player.oppGrid.get(y, x).getShipName())]; - if (isShipDestroyCompletely(opponent, oppShip)) { - changeDestroyedShipSign(player, playerShip); - changeDestroyedShipSign(opponent, oppShip); - } + private void ready() { + turn.isReady = true; + } + private void askForGuess(BattleSeaPlayer player, BattleSeaPlayer opponent, int x, int y) { + if (turn.isReady){ + boolean flag = false; + // row == y , col == x + if (x < 0 || x > 9 || y < 0 || y > 9) { + System.out.println("Coordinates must be inside the grid."); + } + while (!flag) { + if (!opponent.playerGrid.alreadyGuessed(y, x)){ + if (opponent.playerGrid.hasShip(y, x)) { + opponent.playerGrid.markHit(y, x); + System.out.println("Bombed successfully!!!"); + Ship oppShip = opponent.ships[convertLetterToInt(opponent.playerGrid.get(y, x).getShipName())]; + if (isShipDestroyCompletely(opponent, oppShip)) { + changeDestroyedShipSign(opponent, oppShip); + } + } else { + opponent.playerGrid.markMiss(y, x); + System.out.println("Bombed unsuccessfully!"); + flag = true; + } } else { - player.oppGrid.markMiss(y, x); - opponent.playerGrid.markMiss(y, x); - System.out.println("Bombed unsuccessfully!"); - flag = true; + System.out.println("Selected X,Y has been already boomed"); } - } else { - System.out.println("Selected X,Y has been already boomed"); } + } else { + System.out.println("You're not ready!"); } - } - private static boolean isShipDestroyCompletely (BattleSeaPlayer battleSeaPlayer, Ship ship) { + private boolean isShipDestroyCompletely (BattleSeaPlayer battleSeaPlayer, Ship ship) { int row = ship.getRow(); int col = ship.getColumn(); int length = ship.getLength(); @@ -108,7 +140,7 @@ private static boolean isShipDestroyCompletely (BattleSeaPlayer battleSeaPlayer, return flag; } - private static void changeDestroyedShipSign(BattleSeaPlayer battleSeaPlayer, Ship ship) { + private void changeDestroyedShipSign(BattleSeaPlayer battleSeaPlayer, Ship ship) { int row = ship.getRow(); int col = ship.getColumn(); int length = ship.getLength(); @@ -133,7 +165,7 @@ private static void changeDestroyedShipSign(BattleSeaPlayer battleSeaPlayer, Shi } } - private static boolean hasLocationError(int row, int col, int dir, BattleSeaPlayer battleSeaPlayer, int counterOfShips) { + private boolean hasLocationError(int row, int col, int dir, BattleSeaPlayer battleSeaPlayer, int counterOfShips) { int length = battleSeaPlayer.ships[counterOfShips].getLength(); int width = battleSeaPlayer.ships[counterOfShips].getWidth(); @@ -185,58 +217,64 @@ private static boolean hasLocationError(int row, int col, int dir, BattleSeaPlay return false; } - private static void changeShipsLocation(BattleSeaPlayer battleSeaPlayer, String shipName) { - battleSeaPlayer.playerGrid.printShips(); - System.out.println(); - String input; - - input = shipName.toUpperCase(); - int selectedShip = convertLetterToInt(input); - System.out.println("Enter new row: "); - int newRow = scanner.nextInt(); - System.out.println("Enter new column: "); - int newCol = scanner.nextInt(); - if (newCol >= 0 && newCol <= 9 && newRow >= 0 && newRow <= 9) { - if (!hasLocationError(newRow, newCol, battleSeaPlayer.ships[selectedShip].getDirection(), - battleSeaPlayer, selectedShip)) { - battleSeaPlayer.ships[selectedShip].setLocation(newRow, newCol); - battleSeaPlayer.playerGrid.addShip(battleSeaPlayer.ships[selectedShip]); - battleSeaPlayer.playerGrid.printShips(); - System.out.println("Ship " + input + " relocated " + "in (" + newRow + ", " + newCol + ") successfully!" ); - } else { - System.out.println("Ship " + input + " can not relocate in (" + newRow + ", " + newCol + ")."); + private String changeShipsLocation(BattleSeaPlayer battleSeaPlayer, String shipName , int newCol, int newRow) { + if (!turn.isReady) { + battleSeaPlayer.playerGrid.printShips(); + System.out.println(); + String input; + + input = shipName.toUpperCase(); + int selectedShip = convertLetterToInt(input); + + if (newCol >= 0 && newCol <= 9 && newRow >= 0 && newRow <= 9) { + if (!hasLocationError(newRow, newCol, battleSeaPlayer.ships[selectedShip].getDirection(), + battleSeaPlayer, selectedShip)) { + battleSeaPlayer.ships[selectedShip].setLocation(newRow, newCol); + battleSeaPlayer.playerGrid.addShip(battleSeaPlayer.ships[selectedShip]); + battleSeaPlayer.playerGrid.printShips(); + return "Ship " + input + " relocated " + "in (" + newRow + ", " + newCol + ") successfully!"; + } else { + return "Ship " + input + " can not relocate in (" + newRow + ", " + newCol + ")."; + } + } else { + return "Invalid coordinate."; } + } else { + return "This command is for before starting the game."; } } - private static void changeShipsDirection(BattleSeaPlayer battleSeaPlayer, String shipName) { - battleSeaPlayer.playerGrid.printShips(); - System.out.println(); - String input; - - input = shipName.toUpperCase(); - int selectedShip = convertLetterToInt(input); - int row = battleSeaPlayer.ships[selectedShip].getRow(); - int col = battleSeaPlayer.ships[selectedShip].getColumn(); - int dir = battleSeaPlayer.ships[selectedShip].getDirection(); - if (dir == 0) { - dir = 1; - } else { - dir = 0; - } - if (!hasLocationError(row, col, dir, battleSeaPlayer, selectedShip)) { - battleSeaPlayer.ships[selectedShip].setLocation(row, col); - battleSeaPlayer.ships[selectedShip].setDirection(dir); - battleSeaPlayer.playerGrid.addShip(battleSeaPlayer.ships[selectedShip]); + private String changeShipsDirection(BattleSeaPlayer battleSeaPlayer, String shipName) { + if (!turn.isReady) { battleSeaPlayer.playerGrid.printShips(); - System.out.println("Ship " + input + " rotated successfully!" ); + System.out.println(); + String input; + + input = shipName.toUpperCase(); + int selectedShip = convertLetterToInt(input); + int row = battleSeaPlayer.ships[selectedShip].getRow(); + int col = battleSeaPlayer.ships[selectedShip].getColumn(); + int dir = battleSeaPlayer.ships[selectedShip].getDirection(); + if (dir == 0) { + dir = 1; + } else { + dir = 0; + } + if (!hasLocationError(row, col, dir, battleSeaPlayer, selectedShip)) { + battleSeaPlayer.ships[selectedShip].setLocation(row, col); + battleSeaPlayer.ships[selectedShip].setDirection(dir); + battleSeaPlayer.playerGrid.addShip(battleSeaPlayer.ships[selectedShip]); + battleSeaPlayer.playerGrid.printShips(); + return "Ship " + input + " rotated successfully!"; + } else { + return "Ship " + input + " can not rotated."; + } } else { - System.out.println("Ship " + input + " can not rotated."); + return"This command is for before starting the game."; } - } - private static int convertLetterToInt(String letter) { + private int convertLetterToInt(String letter) { int toReturn = -1; switch (letter) { case "A": diff --git a/src/main/java/model/BattleSea/BattleSeaPlayer.java b/src/main/java/model/BattleSea/BattleSeaPlayer.java index cb1f226..a1945be 100644 --- a/src/main/java/model/BattleSea/BattleSeaPlayer.java +++ b/src/main/java/model/BattleSea/BattleSeaPlayer.java @@ -1,5 +1,7 @@ package model.BattleSea; +import model.Player; + public class BattleSeaPlayer { private static final int[] shipsLength = {2, 2, 3, 4, 4, 5}; private static final int[] shipsWidth = {1, 1, 1, 1, 1, 2}; @@ -8,9 +10,11 @@ public class BattleSeaPlayer { public Ship[] ships; public Grid playerGrid; - public Grid oppGrid; + private Player player; + boolean isReady; + - public BattleSeaPlayer() { + public BattleSeaPlayer(Player player) { if (numOfShips != 6) throw new IllegalArgumentException("ERROR! Num of ships must be 6."); ships = new Ship[numOfShips]; @@ -19,7 +23,8 @@ public BattleSeaPlayer() { ships[i] = tempShip; } playerGrid = new Grid(); - oppGrid = new Grid(); + this.player = player; + isReady =false; } public int numOfShipsLeft() { diff --git a/src/main/java/model/BattleSea/Grid.java b/src/main/java/model/BattleSea/Grid.java index 8a0610a..b6af494 100644 --- a/src/main/java/model/BattleSea/Grid.java +++ b/src/main/java/model/BattleSea/Grid.java @@ -14,6 +14,8 @@ public Grid() { grid = new Location[NUM_ROWS][NUM_COLS]; + points = 25; + for (int row = 0; row < grid.length; row++) { for (int col = 0; col < grid[row].length; col++) { Location tempLoc = new Location(); @@ -24,7 +26,7 @@ public Grid() { public void markHit(int row, int col) { grid[row][col].markHit(); - points++; + points--; } public void markMiss(int row, int col) { diff --git a/src/main/java/model/DotsAndBoxes/DotsAndBoxes.java b/src/main/java/model/DotsAndBoxes/DotsAndBoxes.java index 39e1fa1..eb97a44 100644 --- a/src/main/java/model/DotsAndBoxes/DotsAndBoxes.java +++ b/src/main/java/model/DotsAndBoxes/DotsAndBoxes.java @@ -11,9 +11,6 @@ public class DotsAndBoxes extends Game { private static HashMap dotsAndBoxes; private ArrayList edges; - private Player host; - private Player guest; - private Player turn; private boolean playerMovedInThisTurn = false; private int hostScore; private int guestScore; @@ -36,11 +33,9 @@ public boolean hasPlayerMovedInThisTurn() { } public DotsAndBoxes(Player host) { - super(); + super(host); dotsAndBoxes.put(getGameID(), this); edges = new ArrayList<>(); - this.host = host; - turn = host; } public boolean isBoardFull() { @@ -127,7 +122,8 @@ public String makeTable() { int i = 1; StringBuilder stringBuilder = new StringBuilder(); for (Edge edge : edges) { - stringBuilder.append("Line ").append(i).append(": ").append(edge.toString()); + stringBuilder.append("Line ").append(i).append(": ").append(edge.toString()).append('\n'); + i++; } return stringBuilder.toString(); } @@ -140,26 +136,6 @@ public Player winByForfeit() { return winner; } - @Override - public void turn() { // flips turn - if (turn.equals(host)) { - turn = guest; - } else { - turn = host; - } - playerMovedInThisTurn = false; - } - - @Override - public boolean join(Player guest) { // another player joins and game can be start - if (this.guest == null) { - this.guest = guest; - return true; - } else { - return false; - } - } - @Override public Player judge() { // judges whole game when finished (in this one, board is full) if (hostScore > guestScore) @@ -181,6 +157,11 @@ public Player getGuest() { return guest; } + @Override + public void setScore() { + + } + public static HashMap getDotsAndBoxes() { return dotsAndBoxes; } diff --git a/src/main/java/model/Game.java b/src/main/java/model/Game.java index 59e3f0a..f8fef25 100644 --- a/src/main/java/model/Game.java +++ b/src/main/java/model/Game.java @@ -6,16 +6,26 @@ import java.util.Random; public abstract class Game { - private final static ArrayList games; + private final static ArrayList names; + private static HashMap games; private long gameID; + protected Player host; + protected Player guest; + protected Player turn; + protected boolean moved; static { - games = new ArrayList<>(Arrays.asList("Battle Sea", "Dots And Boxes")); + names = new ArrayList<>(Arrays.asList("Battle Sea", "Dots And Boxes")); + games = new HashMap<>(); } - public Game() { + public Game(Player host) { gameID = IDGenerator(); + games.put(gameID, this); + this.host = host; + turn = host; + moved = false; } private long IDGenerator() { @@ -23,21 +33,44 @@ private long IDGenerator() { return random.nextLong(); } - public void setScore(){ - //TODO - } - public long getGameID() { return gameID; } - public static ArrayList getGames() { - return games; + public Player getHost() { + return host; + } + + public void join(Player guest) { + this.guest = guest; + } + + public Player getGuest() { + return guest; } - public abstract void turn(); + public void turn() { + if (turn.equals(host)) { + turn = guest; + } else { + turn = host; + } + moved = false; + } - public abstract boolean join(Player guest); + public boolean isMoved() { + return moved; + } + + public abstract void setScore(); //TODO + + public static ArrayList getNames() { + return names; + } + + public static HashMap getGames() { + return games; + } public abstract Player judge(); } diff --git a/src/main/java/model/GameLog.java b/src/main/java/model/GameLog.java index 9052e4b..0b7531e 100644 --- a/src/main/java/model/GameLog.java +++ b/src/main/java/model/GameLog.java @@ -32,11 +32,15 @@ public GameLog(String game, Player host, Player guest, LocalDate date, Result re switch (result) { case WIN: + host.setScore(host.getScore() + 10); + host.setLevel(host.getLevel() + 1); if (host.getWins().containsKey(game)) { host.getWins().put(game, host.getWins().get(game) + 1); } else { host.getWins().put(game, 1); } + + guest.setScore(host.getScore() - 5); if (guest.getDefeats().containsKey(game)) { guest.getDefeats().put(game, guest.getDefeats().get(game) + 1); } else { @@ -44,11 +48,16 @@ public GameLog(String game, Player host, Player guest, LocalDate date, Result re } break; case DEFEAT: + + guest.setScore(host.getScore() + 10); + guest.setLevel(host.getLevel() + 1); if (guest.getWins().containsKey(game)) { guest.getWins().put(game, guest.getWins().get(game) + 1); } else { guest.getWins().put(game, 1); } + + host.setScore(host.getScore() - 5); if (host.getDefeats().containsKey(game)) { host.getDefeats().put(game, host.getDefeats().get(game) + 1); } else { diff --git a/src/main/java/model/Player.java b/src/main/java/model/Player.java index 508aa5c..eb2a5dc 100644 --- a/src/main/java/model/Player.java +++ b/src/main/java/model/Player.java @@ -98,7 +98,7 @@ public double getMoney() { return money; } - public long getScore() { + public int getScore() { return score; } diff --git a/src/main/java/view/account/LoginMenu.java b/src/main/java/view/account/LoginMenu.java index 2377a35..843f9dc 100644 --- a/src/main/java/view/account/LoginMenu.java +++ b/src/main/java/view/account/LoginMenu.java @@ -19,45 +19,43 @@ public static LoginMenu getLoginMenu() { @Override public void run() { String[] commands; + label: while (true) { String command = scanner.nextLine(); commands = command.split("\\s"); - if (commands[0].equalsIgnoreCase("register")) { - if (commands.length == 3) { - next(RegisterMenu.getRegisterMenu()); - break; - } else { - System.out.println("you should enter your username and password after the keyword < register >"); - } - } else if (commands[0].equalsIgnoreCase("login")) { - if (commands.length == 2) { - login(commands[1]); - if (Client.getClient().getResponse().equals("Admin logged in")) { - next(AdminMenu.getAdminMenu()); - break; - } else if (Client.getClient().getResponse().equals("Player logged in")) { - next(PlayerMenu.getPlayerMenu()); - break; - } - } else { - System.out.println("you should enter your username after the keyword < login >"); - } - } else if (commands[0].equalsIgnoreCase("delete")) { - if (commands.length == 2) { - delete(commands[1]); - if (Client.getClient().getResponse().equals("Deleted")) { + switch (commands[0]) { + case "register": + if (commands.length == 3) { next(RegisterMenu.getRegisterMenu()); - break; + break label; + } else { + System.out.println("you should enter your username and password after the keyword < register >"); + } + break; + case "login": + if (login(commands)) + break label; + break; + case "delete": + if (commands.length == 2) { + delete(commands[1]); + if (Client.getClient().getResponse().equals("Deleted")) { + next(RegisterMenu.getRegisterMenu()); + break label; + } + } else { + System.out.println("you should enter your username after the keyword < delete >"); } - } else { - System.out.println("you should enter your username after the keyword < delete >"); - } - } else if (command.equalsIgnoreCase("back")) { - back(); - } else { - System.out.println("Wrong command"); + break; + case "back": + back(); + break; + default: + System.out.println("Wrong command"); + break; } } + } private void delete(String username) { @@ -66,10 +64,22 @@ private void delete(String username) { Client.getClient().send("user delete " + username + " " + password); } - private void login(String username) { - System.out.println("Enter your password : "); - String password = scanner.nextLine(); - Client.getClient().send("user login " + username + " " + password); + private boolean login(String[] commands) { + if (commands.length == 2) { + System.out.println("Enter your password : "); + String password = scanner.nextLine(); + Client.getClient().send("user login " + commands[1] + " " + password); + if (Client.getClient().getResponse().equals("Admin logged in")) { + next(AdminMenu.getAdminMenu()); + return true; + } else if (Client.getClient().getResponse().equals("Player logged in")) { + next(PlayerMenu.getPlayerMenu()); + return true; + } else return false; + } else { + System.out.println("you should enter your username after the keyword < login >"); + return false; + } } @Override diff --git a/src/main/java/view/game/BattleSeaMenu.java b/src/main/java/view/game/BattleSeaMenu.java index 98d5d54..7071844 100644 --- a/src/main/java/view/game/BattleSeaMenu.java +++ b/src/main/java/view/game/BattleSeaMenu.java @@ -1,8 +1,9 @@ package view.game; +import view.Client; import view.Menu; -public class BattleSeaMenu extends Menu { +public class BattleSeaMenu extends Menu implements Game { private static final BattleSeaMenu battleSeaMenu = new BattleSeaMenu(); private BattleSeaMenu() { @@ -12,9 +13,38 @@ public static BattleSeaMenu getBattleSeaMenu() { return battleSeaMenu; } + private void changeCoordinate() { + System.out.print("Ship Name: >"); + char ship = (char) scanner.nextByte(); + scanner.nextLine(); + if (ship == 'A' || ship == 'B' || ship == 'C' || ship == 'D' || ship == 'E' || ship == 'F') { + System.out.print("Coordinates (x y): >"); + int x = scanner.nextInt(); + int y = scanner.nextInt(); + scanner.nextLine(); + if (x > 0 && x < 11 && y > 0 && y < 11) { + Client.getClient().send("game BattleSea changeCoordination " + ship + " " + x + " " + y); + System.out.println(Client.getClient().getResponse()); + } else { + System.out.println("Wrong coordination!"); + } + } else { + System.out.println("Wrong ship name!"); + } + } + @Override public void run() { - + while (true) { + switch (scanner.nextLine().trim()) { + case "turn": + turn(); + break; + case "change coordinate": + changeCoordinate(); + break; + } + } } @Override diff --git a/src/main/java/view/game/DotsAndBoxesMenu.java b/src/main/java/view/game/DotsAndBoxesMenu.java index a154041..3215f93 100644 --- a/src/main/java/view/game/DotsAndBoxesMenu.java +++ b/src/main/java/view/game/DotsAndBoxesMenu.java @@ -1,7 +1,5 @@ package view.game; -import model.DotsAndBoxes.DotsAndBoxes; -import model.Player; import view.Client; import view.Menu; diff --git a/src/main/java/view/game/Game.java b/src/main/java/view/game/Game.java new file mode 100644 index 0000000..eca653f --- /dev/null +++ b/src/main/java/view/game/Game.java @@ -0,0 +1,15 @@ +package view.game; + +import view.Client; +import view.Menu; + +public interface Game { + default void turn() { + Client.getClient().send("game turn " + Menu.gameID); + System.out.println(Client.getClient().getResponse()); + } + + default void update() { + + } +} diff --git a/src/main/java/view/game/GameMenu.java b/src/main/java/view/game/GameMenu.java index 4402726..eaf6305 100644 --- a/src/main/java/view/game/GameMenu.java +++ b/src/main/java/view/game/GameMenu.java @@ -36,13 +36,20 @@ private void open() { } } + private void join() { + + } + @Override public void run() { while (true) { - switch (scanner.nextLine()) { + switch (scanner.nextLine().trim()) { case "open": open(); return; + case "join": + join(); + return; case "back": back(); return; diff --git a/src/main/java/view/primary/AdminMenu.java b/src/main/java/view/primary/AdminMenu.java index 1dcfad0..7228e5c 100644 --- a/src/main/java/view/primary/AdminMenu.java +++ b/src/main/java/view/primary/AdminMenu.java @@ -50,7 +50,7 @@ private void addEvent() { if (localDate.isAfter(LocalDate.of(syear, smonth, sday)) || localDate.isAfter(LocalDate.of(fyear, fmonth, fday))) { System.out.println("Invalid Start or End Date!"); } else if (score < 1) { - System.out.println("Score can not be zero on negative!"); + System.out.println("Score can not be zero or negative!"); } else { Client.getClient().send("user addEvent " + game + " " + syear + " " + smonth + " " + sday + " " + fyear + " " + fmonth + " " + fday + " " + score); } diff --git a/src/main/java/resource/Nothing.txt b/src/main/resources/Nothing.txt similarity index 100% rename from src/main/java/resource/Nothing.txt rename to src/main/resources/Nothing.txt diff --git a/src/test/java/AdminTest.java b/src/test/java/AdminTest.java new file mode 100644 index 0000000..eca867c --- /dev/null +++ b/src/test/java/AdminTest.java @@ -0,0 +1,20 @@ +/* +import model.Admin; +import model.User; +import org.junit.Assert; + +import java.util.ArrayList; + +public class AdminTest { + public void addNewAdmin() { + Admin admin = new Admin("firstName", "lastName", + "userName", "password", + "example@exp.exp", "09000000000"); + ArrayList admins = new ArrayList<>(); + Admin.addAdmins(admins); + + Assert.assertEquals(Admin.getAdmins().get("userName").getUsername(), "userName"); + Assert.assertEquals(Admin.getAdmins().size(), 1); + } +} +*/ diff --git a/src/test/java/PlayerTest.java b/src/test/java/PlayerTest.java new file mode 100644 index 0000000..d0c220d --- /dev/null +++ b/src/test/java/PlayerTest.java @@ -0,0 +1,21 @@ +import model.Player; +import model.User; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; + +public class PlayerTest { + + @Test + public void addNewPlayer() { + Player player = new Player("firstName", "lastName", + "userName", "password", + "example@exp.exp", "09000000000"); + ArrayList players = new ArrayList<>(); + Player.addPlayers(players); + + Assert.assertEquals(Player.getPlayers().get("userName").getUsername(), "userName"); + Assert.assertEquals(Player.getPlayers().size(), 1); + } +}