From 5365036371678c9a26da1f55af2fff0b6582c2b9 Mon Sep 17 00:00:00 2001 From: FelixKrull Date: Tue, 8 Feb 2022 11:44:41 +0100 Subject: [PATCH] Implement getUsableFigures --- src/main/java/Game.java | 54 ++++++++++++++++++++++++--- src/main/java/Player.java | 4 +- src/test/java/GameTest.java | 69 +++++++++++++++++++++++++++++++---- src/test/java/PlayerTest.java | 2 +- 4 files changed, 115 insertions(+), 14 deletions(-) diff --git a/src/main/java/Game.java b/src/main/java/Game.java index 20df95d..b66f7b6 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -14,11 +14,25 @@ public class Game { do { dice = p.rollDice(); + + /* + rolldice() + --> dice(1-6) + List getUsableFigures (dice, g, p) + --> {0,1,2,3} + int choose(List figs, p) + --> 1 + setFigure (p.figures.get(1), dice, g, p) + --> nächster Spieler + */ + + c++; //g.checkFieldClear(p.startPos, p, g) if(p.checkFigureInBase(p.figures) > 0 && dice == 6) { int figId = p.choose() - 1; //checkIfKicked + p.figures.get(figId).setPosition(p.startPos); } else { int figId = p.choose() - 1; @@ -35,10 +49,10 @@ public class Game { this.gb = new Gameboard(); gb.initGameboard(); players = new ArrayList<>(); - players.add(new Player("Rot",0, 40, 43)); - players.add(new Player("Blau",10, 44, 47)); - players.add(new Player("Gelb",20, 48, 51)); - players.add(new Player("Grün",30, 52, 55)); + players.add(new Player("Rot",0, 40, 43, 39)); + players.add(new Player("Blau",10, 44, 47, 9)); + players.add(new Player("Gelb",20, 48, 51, 19)); + players.add(new Player("Grün",30, 52, 55, 29)); } public boolean checkDice(int dice, Player p, int countRolls) { @@ -64,4 +78,34 @@ public class Game { } return 0; } -} + + public ArrayList getUsableFigures(int dice, Player p, Game g) { + ArrayList result = new ArrayList<>(); + for(int i = 0; i < p.figures.size(); i++) { + if(figureIsUsable(dice, i, p, g)) { + result.add(i); + } + } + return result; + } + + public boolean figureIsUsable(int dice, int figId, Player p, Game g) { + Figure f = p.figures.get(figId); + + if(p.checkFigureInBase(p.figures) > 0 && dice == 6){ + if(g.checkFieldClear(p.startPos, p, g) == 2) { + return f.getPosition() == p.startPos; //TODO Wenn Figur auf Startpos von anderer Figur blockiert ist + } + return f.getPosition() == -1; + } else if (f.getPosition() <= p.jumpToHome && (f.getPosition() + dice) > p.jumpToHome) { + if((f.getPosition() + dice) <= p.jumpToHome + 4) { + return g.checkFieldClear(f.getPosition() + dice - p.jumpToHome + p.startHome - 1, p, g) != 2; + } else { + return false; + } + } else if(f.getPosition() != -1) { + return g.checkFieldClear((f.getPosition() + dice) % 40, p, g) != 2; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/Player.java b/src/main/java/Player.java index 85a0ab8..96e91e2 100644 --- a/src/main/java/Player.java +++ b/src/main/java/Player.java @@ -9,13 +9,15 @@ public class Player { int startPos; int startHome; int endHome; + int jumpToHome; Scanner scanner; - public Player (String name,int startPos, int startHome, int endHome) { + public Player (String name,int startPos, int startHome, int endHome, int jumpToHome) { this.name = name; this.startPos = startPos; this.startHome = startHome; this.endHome = endHome; + this.jumpToHome = jumpToHome; figures = new ArrayList<>(); for(int i = 0; i < 4; i++) { figures.add(new Figure()); diff --git a/src/test/java/GameTest.java b/src/test/java/GameTest.java index b3e9297..c8523f1 100644 --- a/src/test/java/GameTest.java +++ b/src/test/java/GameTest.java @@ -6,9 +6,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; +import java.util.*; import java.util.stream.Stream; public class GameTest { @@ -20,7 +18,7 @@ public class GameTest { @BeforeEach void setup() { g = new Game(); - p1 = new Player("Rot", 1, 40, 43); + p1 = g.players.get(0); } @ParameterizedTest @@ -87,15 +85,72 @@ public class GameTest { void checkFieldClearTestFieldTakenByOtherPlayer() { int expectedResult = 1; g.players.get(1).figures.get(0).setPosition(1); - int calculatedResult = g.checkFieldClear(1, g.players.get(0), g); + int calculatedResult = g.checkFieldClear(1, p1, g); assertThat(calculatedResult).describedAs("Check Field Clear").isEqualTo(expectedResult); } @Test void checkFieldClearTestFieldTakenByOwnFigure() { int expectedResult = 2; - g.players.get(0).figures.get(1).setPosition(1); - int calculatedResult = g.checkFieldClear(1, g.players.get(0), g); + p1.figures.get(1).setPosition(1); + int calculatedResult = g.checkFieldClear(1, p1, g); assertThat(calculatedResult).describedAs("Check Field Clear").isEqualTo(expectedResult); } + + @ParameterizedTest + @MethodSource("usableFiguresData") + void getUsableFiguresTest(String testname, int dice, Collection positions, ArrayList expectedResult) { + Iterator
figureIt = p1.figures.iterator(); + Iterator posIt = positions.iterator(); + while(figureIt.hasNext()) { + Figure f = figureIt.next(); + f.setPosition(posIt.next()); + } + + List calculatedResult = g.getUsableFigures(dice, p1, g); + assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult); + } + + static Stream usableFiguresData () { + return Stream.of( + Arguments.of( //Würfel 1-6 - Keine Figur im Ziel - Alle Figuren auf dem Spielfeld - StartFeld frei - Keine Figur vor Ziel + "Alle Figuren", + 1, + Arrays.asList(10, 25, 2, 17), + new ArrayList<>(Arrays.asList(0, 1, 2, 3)) + ), + Arguments.of( //Würfel 6 - Keine Figur im Ziel - 1 Figur auf dem Spielfeld - StartFeld frei - Keine Figur vor Ziel + "Figuren die nicht am Spielfeld stehen", + 6, + Arrays.asList(10, -1, -1, -1), + new ArrayList<>(Arrays.asList(1, 2, 3)) + ), + Arguments.of( //Würfel 6 - Keine Figur im Ziel - 1 Figur auf dem Spielfeld - StartFeld besetzt - Keine Figur vor Ziel + "Figur die das Startfeld besetzt", + 6, + Arrays.asList(10, 0, -1, -1), + new ArrayList<>(List.of(1)) + ), + Arguments.of( //Würfel 5 - Keine Figur im Ziel - 1 Figur auf dem Spielfeld - StartFeld besetzt - Figur vor Ziel + "Figur vor dem Ziel - kann man benutzen", + 5, + Arrays.asList(10, 37, -1, -1), + new ArrayList<>(Arrays.asList(0,1)) + ), + Arguments.of( //Würfel 5 - Keine Figur im Ziel - 1 Figur auf dem Spielfeld - StartFeld besetzt - Figur vor Ziel + "Figur vor dem Ziel - kann man nicht benutzen", + 5, + Arrays.asList(10, 39, -1, -1), + new ArrayList<>(List.of(0)) + ), + Arguments.of( //Würfel 5 - Figur im Ziel - 1 Figur auf dem Spielfeld - StartFeld besetzt - Figur vor Ziel + "Nur Figuren die auf ein freies Feld kommen", + 2, + Arrays.asList(10, 12, -1, -1), + new ArrayList<>(List.of(1)) + ) + ); + } } + + diff --git a/src/test/java/PlayerTest.java b/src/test/java/PlayerTest.java index 4e8ad33..960e245 100644 --- a/src/test/java/PlayerTest.java +++ b/src/test/java/PlayerTest.java @@ -19,7 +19,7 @@ public class PlayerTest { @BeforeEach void setup() { - p = new Player("Rot",0, 40, 43); + p = new Player("Rot",0, 40, 43, 39); } @Test