summaryrefslogtreecommitdiff
path: root/domain/src/main/java
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-06-22 21:12:52 +0200
committerMike Vink <mike1994vink@gmail.com>2021-06-22 21:12:52 +0200
commit3906fcf3d702f13da79c797c91a2dd32d874af49 (patch)
treed57d25f46a28da8319812ffabd7adf483686bc7e /domain/src/main/java
parent2e1a7cbcd36296c5abb1bb6d12fc155e3e3913fb (diff)
update(MancalaImpl) <- playPit returns stateArray
Diffstat (limited to 'domain/src/main/java')
-rw-r--r--domain/src/main/java/mancala/domain/Bowl.java2
-rw-r--r--domain/src/main/java/mancala/domain/Kalaha.java12
-rw-r--r--domain/src/main/java/mancala/domain/Mancala.java2
-rw-r--r--domain/src/main/java/mancala/domain/MancalaImpl.java21
-rw-r--r--domain/src/main/java/mancala/domain/SmallBowl.java16
5 files changed, 48 insertions, 5 deletions
diff --git a/domain/src/main/java/mancala/domain/Bowl.java b/domain/src/main/java/mancala/domain/Bowl.java
index a36c621..07859f7 100644
--- a/domain/src/main/java/mancala/domain/Bowl.java
+++ b/domain/src/main/java/mancala/domain/Bowl.java
@@ -62,4 +62,6 @@ abstract class Bowl {
protected abstract String makeString(String playerBowls, String opponentBowls, String kalahas);
+
+ protected abstract int[] toStateArray(int[] stateArray, int index);
}
diff --git a/domain/src/main/java/mancala/domain/Kalaha.java b/domain/src/main/java/mancala/domain/Kalaha.java
index c85af4a..411a86d 100644
--- a/domain/src/main/java/mancala/domain/Kalaha.java
+++ b/domain/src/main/java/mancala/domain/Kalaha.java
@@ -73,4 +73,16 @@ class Kalaha extends Bowl {
void claimStolenBooty(int booty) {
myStones = myStones + booty;
}
+
+ @Override
+ protected int[] toStateArray(int[] stateArray, int index) {
+ stateArray[index] = getMyStones();
+ if (index == stateArray.length - 2) {
+ stateArray[stateArray.length - 1] = (getMyOwner().hasTheTurn() ? Mancala.PLAYER_TWO : Mancala.PLAYER_ONE);
+ return stateArray;
+ } else {
+ return getNextBowl().toStateArray(stateArray, ++index);
+ }
+ }
+
}
diff --git a/domain/src/main/java/mancala/domain/Mancala.java b/domain/src/main/java/mancala/domain/Mancala.java
index f8a2621..d80e9e5 100644
--- a/domain/src/main/java/mancala/domain/Mancala.java
+++ b/domain/src/main/java/mancala/domain/Mancala.java
@@ -24,7 +24,7 @@ public interface Mancala {
* @param index Index of the recess to be played.
* @return 15 item long Array with the current state of the game. The 15th item indicates which player has the next turn (possible values are 1 or 2).
*/
- void playPit(int index) throws MancalaException;
+ int[] playPit(int index) throws MancalaException;
/**
* Method for returning the amount of stones in de specified pit. Index is as specified below:
diff --git a/domain/src/main/java/mancala/domain/MancalaImpl.java b/domain/src/main/java/mancala/domain/MancalaImpl.java
index a8e6691..0090f2d 100644
--- a/domain/src/main/java/mancala/domain/MancalaImpl.java
+++ b/domain/src/main/java/mancala/domain/MancalaImpl.java
@@ -1,5 +1,6 @@
package mancala.domain;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -27,6 +28,19 @@ public class MancalaImpl implements Mancala {
domainOpponent = domainPlayer.getOpponent();
}
+ public MancalaImpl(int[] stonesArray) {
+ try {
+ domainReference = new SmallBowl(
+ Arrays.stream(stonesArray)
+ .boxed().collect(Collectors.toList())
+ );
+ } catch (DomainSmallBowlException e) {
+ e.printStackTrace();
+ }
+ domainPlayer = domainReference.getMyOwner();
+ domainOpponent = domainPlayer.getOpponent();
+ }
+
@Override
public boolean isPlayersTurn(int player) {
switch (player) {
@@ -40,7 +54,7 @@ public class MancalaImpl implements Mancala {
}
@Override
- public void playPit(int index) throws MancalaException {
+ public int[] playPit(int index) throws MancalaException {
if (isPlayersTurn(Mancala.PLAYER_ONE) && MancalaImpl.PLAYER_TWO_PITS.contains(index)) {
throw new MancalaException("Player one cannot play player two's pits.");
}
@@ -61,6 +75,7 @@ public class MancalaImpl implements Mancala {
domainReference.getNextSmallBowlTimes(skipKalahaIndex).play();
}
+ return domainReference.toStateArray(new int[15], 0);
}
@Override
@@ -93,9 +108,9 @@ public class MancalaImpl implements Mancala {
public int getWinner() {
if (!isEndOfGame()) return Mancala.NO_PLAYERS;
- if (domainPlayer.won()) return Mancala.PLAYER_ONE;
+ if (domainPlayer.won() && domainOpponent.won()) return Mancala.BOTH_PLAYERS;
+ else if (domainPlayer.won()) return Mancala.PLAYER_ONE;
else if (domainOpponent.won()) return Mancala.PLAYER_TWO;
- else if (domainPlayer.won() && domainOpponent.won()) return Mancala.BOTH_PLAYERS;
else return Mancala.NO_PLAYERS;
}
diff --git a/domain/src/main/java/mancala/domain/SmallBowl.java b/domain/src/main/java/mancala/domain/SmallBowl.java
index 216e2ad..b750f61 100644
--- a/domain/src/main/java/mancala/domain/SmallBowl.java
+++ b/domain/src/main/java/mancala/domain/SmallBowl.java
@@ -17,6 +17,9 @@ public class SmallBowl extends Bowl {
if (stonesList.size() % 2 != 0) {
throw new DomainSmallBowlException("Stones List should contain even number of elements.");
}
+ if (stonesList.size() < 4) {
+ throw new DomainSmallBowlException("Stones list should have length greater than or equal to 4.");
+ }
this.myOwner = new Player();
int boardSize = stonesList.size();
@@ -24,7 +27,9 @@ public class SmallBowl extends Bowl {
this.myStones = stonesList.remove(0);
- this.nextBowl = new SmallBowl(boardSize, bowlsToAdd, stonesList, this, this.getMyOwner());
+ if (boardSize == 4) this.nextBowl = new Kalaha(boardSize, bowlsToAdd, stonesList, this, this.getMyOwner());
+ else this.nextBowl = new SmallBowl(boardSize, bowlsToAdd, stonesList, this, this.getMyOwner());
+
referencePoint = this;
}
@@ -145,4 +150,13 @@ public class SmallBowl extends Bowl {
}
}
+ @Override
+ protected int[] toStateArray(int[] stateArray, int index) {
+ stateArray[index] = getMyStones();
+ if (index == stateArray.length - 2) {
+ return stateArray;
+ } else {
+ return getNextBowl().toStateArray(stateArray, ++index);
+ }
+ }
}