Browse Source

Implement getUsableFigures

AIPlayer
FelixKrull 2 years ago
parent
commit
5365036371
  1. 54
      src/main/java/Game.java
  2. 4
      src/main/java/Player.java
  3. 69
      src/test/java/GameTest.java
  4. 2
      src/test/java/PlayerTest.java

54
src/main/java/Game.java

@ -14,11 +14,25 @@ public class Game {
do {
dice = p.rollDice();
/*
rolldice()
--> dice(1-6)
List<Integer> getUsableFigures (dice, g, p)
--> {0,1,2,3}
int choose(List<Integer> 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<Integer> getUsableFigures(int dice, Player p, Game g) {
ArrayList<Integer> 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;
}
}

4
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());

69
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<Integer> positions, ArrayList<Integer> expectedResult) {
Iterator<Figure> figureIt = p1.figures.iterator();
Iterator<Integer> posIt = positions.iterator();
while(figureIt.hasNext()) {
Figure f = figureIt.next();
f.setPosition(posIt.next());
}
List<Integer> calculatedResult = g.getUsableFigures(dice, p1, g);
assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult);
}
static Stream<Arguments> 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))
)
);
}
}

2
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

Loading…
Cancel
Save