From 35fccac794eef2922e9e610637f0932408387f00 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 24 Apr 2020 19:10:30 +0200 Subject: [PATCH] Fikser noen bugs rundt flagg og diverse Closes #75 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fikser noen tiles i Dizzy Dash som var feil vei Fikser resetting av hasTouchedFlagThisTurn Fikser at RoboRallyGame sin setProgram ikke godtar et tomt program Utvider flaggtesten til å inkludere alle flagg --- .../fiasko/roborally/objects/Board.java | 8 ++- .../roborally/objects/RoboRallyGame.java | 6 +-- src/main/resources/boards/Dizzy_Dash.txt | 4 +- .../fiasko/roborally/objects/PhaseTest.java | 50 +++++++++++++------ src/test/resources/boards/win_test_board.txt | 6 +-- 5 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/objects/Board.java b/src/main/java/inf112/fiasko/roborally/objects/Board.java index a28027b..8d85106 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/Board.java +++ b/src/main/java/inf112/fiasko/roborally/objects/Board.java @@ -890,7 +890,13 @@ public class Board { * @param hasTouched If the robot has touched a flag this turn */ public void setHasTouchedFlagThisTurn(RobotID robotID, boolean hasTouched) { - robots.get(robotID).setHasTouchedFlagThisTurn(hasTouched); + Robot aliveRobot = robots.get(robotID); + Robot deadRobot = getRobotFromDeadRobots(robotID); + if (aliveRobot != null) { + aliveRobot.setHasTouchedFlagThisTurn(hasTouched); + } else if (deadRobot != null) { + deadRobot.setHasTouchedFlagThisTurn(hasTouched); + } } /** diff --git a/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java b/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java index 862805c..1401b3d 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java +++ b/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java @@ -131,7 +131,7 @@ public class RoboRallyGame implements DrawableGame, InteractableGame { @Override public void setProgram(List program) { - if (program.size() != 5) { + if (program.size() != 5 && program.size() != 0) { throw new IllegalArgumentException("Invalid program chosen."); } this.program = program; @@ -307,8 +307,8 @@ public class RoboRallyGame implements DrawableGame, InteractableGame { * Resets the boolean for if the robot has touched a flag this turn, to set up the next turn. */ private void resetHasTouchedFlagThisTurnForAllRobots() { - for (Robot robot : gameBoard.getAliveRobots()) { - robot.setHasTouchedFlagThisTurn(false); + for (RobotID robotID : RobotID.values()) { + gameBoard.setHasTouchedFlagThisTurn(robotID, false); } } diff --git a/src/main/resources/boards/Dizzy_Dash.txt b/src/main/resources/boards/Dizzy_Dash.txt index b7b034f..a341463 100644 --- a/src/main/resources/boards/Dizzy_Dash.txt +++ b/src/main/resources/boards/Dizzy_Dash.txt @@ -1,8 +1,8 @@ 12 16 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 01;1 12;3 11;3 11;3 12;5 01;1 01;1 12;3 11;3 11;3 12;5 01;1 -01;1 11;1 03;1 01;1 11;1 04;7 01;1 11;1 03;1 01;1 11;5 01;1 -01;1 11;1 21;1 03;1 11;1 01;1 01;1 11;1 22;1 03;1 11;5 01;1 +01;1 11;1 03;1 01;1 11;5 04;7 01;1 11;1 03;1 01;1 11;5 01;1 +01;1 11;1 21;1 03;1 11;5 01;1 01;1 11;1 22;1 03;1 11;5 01;1 01;1 12;1 11;7 11;7 12;7 17;1 04;7 12;1 11;7 11;7 12;7 01;1 01;1 01;1 01;1 01;1 04;5 01;1 01;1 01;1 01;1 04;1 01;1 01;1 01;1 19;1 04;5 01;1 01;1 01;1 01;1 04;1 01;1 01;1 01;1 01;1 diff --git a/src/test/java/inf112/fiasko/roborally/objects/PhaseTest.java b/src/test/java/inf112/fiasko/roborally/objects/PhaseTest.java index b272121..78971af 100644 --- a/src/test/java/inf112/fiasko/roborally/objects/PhaseTest.java +++ b/src/test/java/inf112/fiasko/roborally/objects/PhaseTest.java @@ -71,21 +71,41 @@ public class PhaseTest { } @Test - public void playerWinsAfterTouchingAllFlagsInCorrectOrder() { + public void playerWinsAfterTouchingAllFlagsInCorrectOrder() throws IOException { FakeGame testGame = new FakeGame(); - List robot = new ArrayList<>(); + List robots = new ArrayList<>(); List player = new ArrayList<>(); - robot.add(new Robot(RobotID.ROBOT_1, new Position(0, 0))); - player.add(new Player(RobotID.ROBOT_1, "Player 1")); + RobotID robotID = RobotID.ROBOT_1; + Robot robot = new Robot(robotID, new Position(0, 0)); + robots.add(robot); + player.add(new Player(robotID, "Player 1")); + board = BoardLoaderUtil.loadBoard("boards/win_test_board.txt", robots); + Phase testPhase = new Phase(board, player, 0, testGame); - try { - board = BoardLoaderUtil.loadBoard("boards/win_test_board.txt", robot); - Phase testPhase = new Phase(board, player, 0, testGame); - testPhase.checkAllFlags(); - assertEquals("Player 1", testGame.getWinningPlayerName()); - } catch (IOException e) { - e.printStackTrace(); - } + assertEquals(0, robot.getLastFlagVisited()); + assertFalse(robot.hasTouchedFlagThisTurn()); + testPhase.checkAllFlags(); + assertEquals(1, robot.getLastFlagVisited()); + assertTrue(robot.hasTouchedFlagThisTurn()); + robot.setHasTouchedFlagThisTurn(false); + assertNull(testGame.getWinningPlayerName()); + board.moveRobot(robotID, Direction.EAST); + testPhase.checkAllFlags(); + assertEquals(2, robot.getLastFlagVisited()); + assertTrue(robot.hasTouchedFlagThisTurn()); + assertNull(testGame.getWinningPlayerName()); + robot.setHasTouchedFlagThisTurn(false); + board.moveRobot(robotID, Direction.EAST); + testPhase.checkAllFlags(); + assertEquals(3, robot.getLastFlagVisited()); + assertTrue(robot.hasTouchedFlagThisTurn()); + assertNull(testGame.getWinningPlayerName()); + robot.setHasTouchedFlagThisTurn(false); + board.moveRobot(robotID, Direction.EAST); + testPhase.checkAllFlags(); + assertEquals(4, robot.getLastFlagVisited()); + assertTrue(robot.hasTouchedFlagThisTurn()); + assertEquals("Player 1", testGame.getWinningPlayerName()); } @Test @@ -98,11 +118,11 @@ public class PhaseTest { } @Test - public void robotDoesNotRegistersWrongFlag() { - assertEquals(robot4.getLastFlagVisited(), 0); + public void robotDoesNotRegisterWrongFlag() { + assertEquals(0, robot4.getLastFlagVisited()); assertFalse(robot4.hasTouchedFlagThisTurn()); phase.checkAllFlags(); - assertEquals(robot4.getLastFlagVisited(), 0); + assertEquals(0, robot4.getLastFlagVisited()); assertFalse(robot4.hasTouchedFlagThisTurn()); } diff --git a/src/test/resources/boards/win_test_board.txt b/src/test/resources/boards/win_test_board.txt index 4a5d0df..a6dbcf7 100644 --- a/src/test/resources/boards/win_test_board.txt +++ b/src/test/resources/boards/win_test_board.txt @@ -1,3 +1,3 @@ -1 1 -17;1 -0 \ No newline at end of file +4 1 +17;1 18;1 19;1 20;1 +0 0 0 0 \ No newline at end of file