diff --git a/.classpath b/.classpath
index 2ab91e7..d25bc2e 100644
--- a/.classpath
+++ b/.classpath
@@ -1,12 +1,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/net/woodyfolsom/msproj/GameState.java b/src/net/woodyfolsom/msproj/GameState.java
index a629174..0c30e8e 100644
--- a/src/net/woodyfolsom/msproj/GameState.java
+++ b/src/net/woodyfolsom/msproj/GameState.java
@@ -4,14 +4,16 @@ import java.util.ArrayList;
import java.util.List;
public class GameState {
- private int blackPrisoners = 0;
- private int whitePrisoners = 0;
+ private int blackPrisoners;
+ private int whitePrisoners;
private GameBoard gameBoard;
private GameConfig gameConfig;
private Player playerToMove;
- private List moveHistory = new ArrayList();
+ private List moveHistory;
public GameState(GameConfig gameConfig) {
+ this.blackPrisoners = 0;
+ this.whitePrisoners = 0;
this.gameConfig = gameConfig;
int size = gameConfig.getSize();
if (size < 1 || size > 19) {
@@ -19,6 +21,7 @@ public class GameState {
}
gameBoard = new GameBoard(size);
playerToMove = Player.BLACK;
+ moveHistory = new ArrayList();
}
public GameState(GameState that) {
@@ -116,6 +119,40 @@ public class GameState {
return whitePrisoners;
}
+ /**
+ * Used for setting up the board. Places the player's stone at the specified coordinates.
+ *
+ * Returns false if the requested intersection is occupied or the resulting position is illegal.
+ * Returns false if the requested action is PASS, RESIGN or NONE.
+ * Returns false if the moveHistory's size is already >0 (method should only be used to set up board).
+ *
+ * Does NOT advance the playerToMove or add the action to the move history.
+ *
+ * @param player
+ * @param action
+ * @return
+ */
+ public boolean placeStone(Player player, Action action) {
+ if (action.isPass() || action.isResign() || action.isNone()) {
+ return false;
+ }
+
+ if (moveHistory.size() > 0) {
+ return false;
+ }
+
+ Player actualPTM = playerToMove;
+
+ playerToMove = player;
+
+ boolean validMove = playStone(player,action);
+
+ moveHistory.clear();
+ playerToMove = actualPTM;
+
+ return validMove;
+ }
+
public boolean playStone(Player player, String move) {
return playStone(player, Action.getInstance(move));
}
@@ -315,6 +352,8 @@ public class GameState {
sb.append(" BLACK(X) has captured ");
sb.append(getBlackPrisoners());
sb.append(" stones");
+ } else if (rIndex == boardSize / 2 - 2) {
+ sb.append(" " + playerToMove + " to move");
}
sb.append(System.lineSeparator());
}
diff --git a/src/net/woodyfolsom/msproj/StandAloneGame.java b/src/net/woodyfolsom/msproj/StandAloneGame.java
index c69f22b..f0d2d60 100644
--- a/src/net/woodyfolsom/msproj/StandAloneGame.java
+++ b/src/net/woodyfolsom/msproj/StandAloneGame.java
@@ -1,8 +1,6 @@
package net.woodyfolsom.msproj;
-import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
@@ -110,21 +108,23 @@ public class StandAloneGame {
for (int round = 0; round < rounds; round++) {
round2results.add(referee.play(gameConfig));
}
-
+
DateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmssZ");
try {
- File txtFile = new File("gotournament-" + dateFormat.format(new Date())
- + ".txt");
+ File txtFile = new File("gotournament-"
+ + dateFormat.format(new Date()) + ".txt");
FileWriter writer = new FileWriter(txtFile);
-
+
try {
- logResults(writer, round1results, playerType1.toString(), playerType2.toString());
- logResults(writer, round2results, playerType2.toString(), playerType1.toString());
-
- System.out
- .println("Game tournament saved as " + txtFile.getAbsolutePath());
+ logResults(writer, round1results, playerType1.toString(),
+ playerType2.toString());
+ logResults(writer, round2results, playerType2.toString(),
+ playerType1.toString());
+
+ System.out.println("Game tournament saved as "
+ + txtFile.getAbsolutePath());
} finally {
try {
writer.close();
@@ -139,24 +139,24 @@ public class StandAloneGame {
}
- private void logResults(FileWriter writer, List results, String player1, String player2) throws IOException {
+ private void logResults(FileWriter writer, List results,
+ String player1, String player2) throws IOException {
String header = "Cumulative results for " + results.size()
- + " games (BLACK=" + player1 + ", WHITE=" + player2
- + ")";
-
+ + " games (BLACK=" + player1 + ", WHITE=" + player2 + ")";
+
System.out.println(header);
writer.write(header);
writer.write("\n");
-
+
for (int i = 0; i < results.size(); i++) {
- String resultLine = (i+1) + ". " + results.get(i);
+ String resultLine = (i + 1) + ". " + results.get(i);
System.out.println(resultLine);
writer.write(resultLine);
writer.write("\n");
}
writer.flush();
}
-
+
private Policy getPolicy(PLAYER_TYPE playerType, GameConfig gameConfig,
Player player) {
switch (playerType) {
diff --git a/src/net/woodyfolsom/msproj/ann/PassLearner.java b/src/net/woodyfolsom/msproj/ann/PassLearner.java
index 1aca3db..6f6c307 100644
--- a/src/net/woodyfolsom/msproj/ann/PassLearner.java
+++ b/src/net/woodyfolsom/msproj/ann/PassLearner.java
@@ -8,15 +8,8 @@ import java.io.IOException;
import net.woodyfolsom.msproj.GameRecord;
import net.woodyfolsom.msproj.Referee;
-import net.woodyfolsom.msproj.sgf.SGFLexer;
-import net.woodyfolsom.msproj.sgf.SGFNodeCollection;
-import net.woodyfolsom.msproj.sgf.SGFParser;
-import org.antlr.runtime.ANTLRInputStream;
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
-import org.junit.Test;
public class PassLearner {
private File[] getDataFiles(String dirName) {
@@ -47,7 +40,7 @@ public class PassLearner {
try {
sgfInputStream = new FileInputStream(sgfFile);
GameRecord gameRecord = Referee.replay(sgfInputStream);
- //...
+ // ...
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (RecognitionException re) {
diff --git a/test/net/woodyfolsom/msproj/CaptureTest.java b/test/net/woodyfolsom/msproj/CaptureTest.java
index 16dc9ed..e60dbbc 100644
--- a/test/net/woodyfolsom/msproj/CaptureTest.java
+++ b/test/net/woodyfolsom/msproj/CaptureTest.java
@@ -11,9 +11,12 @@ public class CaptureTest {
public void testCapture() {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B3"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
+
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+
+ assertTrue(gameState.playStone(Player.BLACK, Action.PASS));
assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("B2")));
assertEquals(0,gameState.getBlackPrisoners());
@@ -32,14 +35,14 @@ public class CaptureTest {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B3"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
- gameState.playStone(Player.BLACK, Action.getInstance("C4"));
- gameState.playStone(Player.BLACK, Action.getInstance("D3"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("D3")));
- assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("B2")));
- assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("C3")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C3")));
assertEquals(0,gameState.getBlackPrisoners());
assertEquals(0,gameState.getWhitePrisoners());
@@ -62,14 +65,16 @@ public class CaptureTest {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A1"));
- gameState.playStone(Player.BLACK, Action.getInstance("B2"));
- gameState.playStone(Player.BLACK, Action.getInstance("C1"));
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
//This capture should be allowed.
+ assertTrue(gameState.playStone(Player.BLACK, Action.PASS));
+
System.out.println("State before WHITE move: ");
System.out.println(gameState);
diff --git a/test/net/woodyfolsom/msproj/IllegalMoveTest.java b/test/net/woodyfolsom/msproj/IllegalMoveTest.java
index 739ed99..882f1c8 100644
--- a/test/net/woodyfolsom/msproj/IllegalMoveTest.java
+++ b/test/net/woodyfolsom/msproj/IllegalMoveTest.java
@@ -17,7 +17,7 @@ public class IllegalMoveTest {
public void testIllegalMoveOnOwnStone() {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("B3"));
+ gameState.placeStone(Player.BLACK, Action.getInstance("B3"));
assertFalse(gameState.playStone(Player.BLACK, Action.getInstance("B3")));
}
@@ -33,12 +33,16 @@ public class IllegalMoveTest {
public void testIllegalMoveNoLiberties() {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
- gameState.playStone(Player.BLACK, Action.getInstance("B3"));
- gameState.playStone(Player.BLACK, Action.getInstance("C2"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+
System.out.println(gameState);
+
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
assertFalse(gameState.playStone(Player.WHITE, Action.getInstance("B2")));
+
System.out.println(gameState);
}
@@ -46,12 +50,16 @@ public class IllegalMoveTest {
public void testIllegalMoveFormsTrappedGroup() {
GameConfig gameConfig = new GameConfig(9);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A5"));
- gameState.playStone(Player.BLACK, Action.getInstance("B6"));
- gameState.playStone(Player.BLACK, Action.getInstance("B7"));
- gameState.playStone(Player.BLACK, Action.getInstance("A8"));
- assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("A6")));
+
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A5")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B6")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A8")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A6")));
+
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
assertFalse(gameState.playStone(Player.WHITE, Action.getInstance("A7")));
+
System.out.println(gameState);
}
@@ -59,16 +67,20 @@ public class IllegalMoveTest {
public void testIllegalMoveFormsTrappedGroup2() {
GameConfig gameConfig = new GameConfig(9);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("G1"));
- gameState.playStone(Player.BLACK, Action.getInstance("H2"));
- gameState.playStone(Player.BLACK, Action.getInstance("H3"));
- gameState.playStone(Player.BLACK, Action.getInstance("J4"));
- gameState.playStone(Player.BLACK, Action.getInstance("A8"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("G1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("H2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("H3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("J4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A8")));
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("H1")));
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("J2")));
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
assertTrue(gameState.playStone(Player.WHITE, Action.getInstance("J3")));
+ assertTrue(gameState.playStone(Player.BLACK,Action.PASS));
System.out.println("State before move: ");
System.out.println(gameState);
@@ -80,15 +92,16 @@ public class IllegalMoveTest {
GameConfig gameConfig = new GameConfig(3);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("A1"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("B2"));
- gameState.playStone(Player.WHITE, Action.getInstance("A3"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A3")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
System.out.println("State before move: ");
System.out.println(gameState);
assertFalse("Play by BLACK at A2 should have failed.",gameState.playStone(Player.BLACK, Action.getInstance("A2")));
+
List validMoves = new ValidMoveGenerator().getActions(gameConfig, gameState, Player.BLACK, ActionGenerator.ALL_ACTIONS);
assertEquals(4, validMoves.size());
assertTrue(validMoves.contains(Action.PASS));
diff --git a/test/net/woodyfolsom/msproj/LegalMoveTest.java b/test/net/woodyfolsom/msproj/LegalMoveTest.java
index e0830c5..c08b163 100644
--- a/test/net/woodyfolsom/msproj/LegalMoveTest.java
+++ b/test/net/woodyfolsom/msproj/LegalMoveTest.java
@@ -29,47 +29,50 @@ public class LegalMoveTest {
//Illegal move detected by gokgs.com server
GameConfig gameConfig = new GameConfig(9);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("G5"));
- gameState.playStone(Player.BLACK, Action.getInstance("G7"));
- gameState.playStone(Player.BLACK, Action.getInstance("F6"));
- gameState.playStone(Player.BLACK, Action.getInstance("H6"));
- gameState.playStone(Player.BLACK, Action.getInstance("C7"));
- gameState.playStone(Player.BLACK, Action.getInstance("D7"));
- gameState.playStone(Player.BLACK, Action.getInstance("E7"));
- gameState.playStone(Player.BLACK, Action.getInstance("F7"));
- gameState.playStone(Player.BLACK, Action.getInstance("G8"));
- gameState.playStone(Player.BLACK, Action.getInstance("H9"));
- gameState.playStone(Player.BLACK, Action.getInstance("J7"));
- gameState.playStone(Player.BLACK, Action.getInstance("E5"));
- gameState.playStone(Player.BLACK, Action.getInstance("F4"));
- gameState.playStone(Player.BLACK, Action.getInstance("G3"));
- gameState.playStone(Player.BLACK, Action.getInstance("D4"));
- gameState.playStone(Player.BLACK, Action.getInstance("E3"));
- gameState.playStone(Player.BLACK, Action.getInstance("B4"));
- gameState.playStone(Player.BLACK, Action.getInstance("C3"));
- gameState.playStone(Player.BLACK, Action.getInstance("D2"));
- gameState.playStone(Player.BLACK, Action.getInstance("E1"));
- gameState.playStone(Player.WHITE, Action.getInstance("H8"));
- gameState.playStone(Player.WHITE, Action.getInstance("H7"));
- gameState.playStone(Player.WHITE, Action.getInstance("D9"));
- gameState.playStone(Player.WHITE, Action.getInstance("D8"));
- gameState.playStone(Player.WHITE, Action.getInstance("E8"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("G5")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("G7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("F6")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("H6")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("D7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("E7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("F7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("G8")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("H9")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("J7")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("E5")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("F4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("G3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("D4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("E3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("D2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("E1")));
- gameState.playStone(Player.WHITE, Action.getInstance("A7"));
- gameState.playStone(Player.WHITE, Action.getInstance("A6"));
- gameState.playStone(Player.WHITE, Action.getInstance("B8"));
- gameState.playStone(Player.WHITE, Action.getInstance("B7"));
- gameState.playStone(Player.WHITE, Action.getInstance("B6"));
- gameState.playStone(Player.WHITE, Action.getInstance("C5"));
- gameState.playStone(Player.WHITE, Action.getInstance("D5"));
- gameState.playStone(Player.WHITE, Action.getInstance("D6"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("H8")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("H7")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D9")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D8")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("E8")));
- gameState.playStone(Player.WHITE, Action.getInstance("A3"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A7")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A6")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B8")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B7")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B6")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C5")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D5")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D6")));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("F1"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A3")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("F1")));
+
+ assertTrue(gameState.playStone(Player.BLACK, Action.PASS));
System.out.println("State before move: ");
System.out.println(gameState);
diff --git a/test/net/woodyfolsom/msproj/TerritoryFinderTest.java b/test/net/woodyfolsom/msproj/TerritoryFinderTest.java
index e241e3c..85c09af 100644
--- a/test/net/woodyfolsom/msproj/TerritoryFinderTest.java
+++ b/test/net/woodyfolsom/msproj/TerritoryFinderTest.java
@@ -1,5 +1,7 @@
package net.woodyfolsom.msproj;
+import static org.junit.Assert.assertTrue;
+
import org.junit.Test;
public class TerritoryFinderTest {
@@ -8,11 +10,11 @@ public class TerritoryFinderTest {
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B3"));
- gameState.playStone(Player.BLACK, Action.getInstance("C2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("E5"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("E5")));
TerritoryMarker.markTerritory(gameState.getGameBoard());
System.out.println(gameState);
diff --git a/test/net/woodyfolsom/msproj/policy/MinimaxTest.java b/test/net/woodyfolsom/msproj/policy/MinimaxTest.java
index bbd2393..9d03776 100644
--- a/test/net/woodyfolsom/msproj/policy/MinimaxTest.java
+++ b/test/net/woodyfolsom/msproj/policy/MinimaxTest.java
@@ -1,6 +1,7 @@
package net.woodyfolsom.msproj.policy;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import net.woodyfolsom.msproj.Action;
import net.woodyfolsom.msproj.GameConfig;
import net.woodyfolsom.msproj.GameState;
@@ -14,11 +15,12 @@ public class MinimaxTest {
Policy treeSearch = new Minimax();
GameConfig gameConfig = new GameConfig(6);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B2"));
-
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B2")));
+ assertTrue(gameState.playStone(Player.BLACK, Action.PASS));
+
Action move = treeSearch.getAction(gameConfig, gameState,
Player.WHITE);
@@ -28,7 +30,7 @@ public class MinimaxTest {
System.out.println("NumStateEvaluations: " + treeSearch.getNumStateEvaluations());
assertEquals(Action.getInstance("B3"), move);
- gameState.playStone(Player.WHITE, move);
+ assertTrue(gameState.playStone(Player.WHITE, move));
System.out.println(gameState);
}
@@ -38,10 +40,10 @@ public class MinimaxTest {
Policy treeSearch = new Minimax();
GameConfig gameConfig = new GameConfig(6);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
- gameState.playStone(Player.BLACK, Action.getInstance("C2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B2"));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
Action move = treeSearch.getAction(gameConfig, gameState,
Player.BLACK);
@@ -52,7 +54,7 @@ public class MinimaxTest {
System.out.println("NumStateEvaluations: " + treeSearch.getNumStateEvaluations());
assertEquals("Expected B3 but was: " + move, Action.getInstance("B3"), move);
- gameState.playStone(Player.BLACK, move);
+ assertTrue(gameState.playStone(Player.BLACK, move));
System.out.println(gameState);
}
diff --git a/test/net/woodyfolsom/msproj/policy/MonteCarloUCTTest.java b/test/net/woodyfolsom/msproj/policy/MonteCarloUCTTest.java
index 2831e9c..ca27b57 100644
--- a/test/net/woodyfolsom/msproj/policy/MonteCarloUCTTest.java
+++ b/test/net/woodyfolsom/msproj/policy/MonteCarloUCTTest.java
@@ -1,78 +1,80 @@
package net.woodyfolsom.msproj.policy;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-
+import static org.junit.Assert.assertTrue;
import net.woodyfolsom.msproj.Action;
import net.woodyfolsom.msproj.GameConfig;
import net.woodyfolsom.msproj.GameState;
import net.woodyfolsom.msproj.Player;
-import net.woodyfolsom.msproj.policy.Policy;
import org.junit.Test;
public class MonteCarloUCTTest {
@Test
public void testGenmoveAsW() {
- Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(),10000L);
+ Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(), 2000L);
GameConfig gameConfig = new GameConfig(6);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("PASS"));
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("PASS"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.BLACK, Action.getInstance("PASS"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B2"));
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+
+ // if this were PLACE stone instad of PLAY stone, white should pass as
+ // well, and win.
+ assertTrue(gameState.playStone(Player.BLACK, Action.getInstance("B2")));
Action move = treeSearch.getAction(gameConfig, gameState, Player.WHITE);
-
+
System.out.println(gameState);
System.out.println("Generated move: " + move);
- System.out.println("NumStateEvaluations: " + treeSearch.getNumStateEvaluations());
-
- assertEquals("Expected B3 but was: " + move, "B3", move);
- gameState.playStone(Player.WHITE, move);
+ System.out.println("NumStateEvaluations: "
+ + treeSearch.getNumStateEvaluations());
+
+ assertTrue(gameState.playStone(Player.WHITE, move));
System.out.println(gameState);
}
@Test
public void testGenmoveAsB() {
- Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(),10000L);
+ Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(), 2000L);
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));
- gameState.playStone(Player.BLACK, Action.getInstance("C2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B2"));
+
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
Action move = treeSearch.getAction(gameConfig, gameState, Player.BLACK);
-
+
System.out.println(gameState);
System.out.println("Generated move: " + move);
- System.out.println("NumStateEvaluations: " + treeSearch.getNumStateEvaluations());
-
- assertEquals("Expected B3 but was: " + move, "B3", move);
- gameState.playStone(Player.BLACK, move);
+ System.out.println("NumStateEvaluations: "
+ + treeSearch.getNumStateEvaluations());
+
+ assertTrue(gameState.playStone(Player.BLACK, move));
System.out.println(gameState);
}
-
+
@Test
public void testIllegalMoveRejection() {
- Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(),2000L);
+ Policy treeSearch = new MonteCarloUCT(new RandomMovePolicy(), 1000L);
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
Action move;
-
+
+ // verify that UCT does not generate an illegal move in 20 calls
for (int i = 0; i < 10; i++) {
move = treeSearch.getAction(gameConfig, gameState, Player.BLACK);
System.out.println("Generated move: " + move);
diff --git a/test/net/woodyfolsom/msproj/policy/RandomTest.java b/test/net/woodyfolsom/msproj/policy/RandomTest.java
index cc35d99..b2ca333 100644
--- a/test/net/woodyfolsom/msproj/policy/RandomTest.java
+++ b/test/net/woodyfolsom/msproj/policy/RandomTest.java
@@ -34,22 +34,27 @@ public class RandomTest {
public void testAlternativeToIllegalMove() {
GameConfig gameConfig = new GameConfig(4);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.BLACK, Action.getInstance("A1"));
- gameState.playStone(Player.BLACK, Action.getInstance("A2"));
- gameState.playStone(Player.BLACK, Action.getInstance("A3"));
- gameState.playStone(Player.BLACK, Action.getInstance("A4"));
- gameState.playStone(Player.BLACK, Action.getInstance("B1"));;
- gameState.playStone(Player.BLACK, Action.getInstance("B2"));
- gameState.playStone(Player.BLACK, Action.getInstance("B4"));
- gameState.playStone(Player.BLACK, Action.getInstance("C2"));
- gameState.playStone(Player.BLACK, Action.getInstance("C3"));
- gameState.playStone(Player.BLACK, Action.getInstance("C4"));
- gameState.playStone(Player.BLACK, Action.getInstance("D4"));
- gameState.playStone(Player.WHITE, Action.getInstance("C1"));
- gameState.playStone(Player.WHITE, Action.getInstance("D2"));
- gameState.playStone(Player.WHITE, Action.getInstance("D3"));
+
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C4")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("D4")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("D3")));
+
+ assertTrue(gameState.playStone(Player.BLACK, Action.PASS));
+
System.out.println("State before random WHITE move selection:");
System.out.println(gameState);
+
//This is correct - checked vs. MFOG
//PASS would otherwise be a valid move
List prohibitedMoves = new ArrayList();
@@ -65,11 +70,11 @@ public class RandomTest {
GameConfig gameConfig = new GameConfig(3);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("A1"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("B2"));
- gameState.playStone(Player.WHITE, Action.getInstance("A3"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A3")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
System.out.println("State before move: ");
System.out.println(gameState);
@@ -89,13 +94,13 @@ public class RandomTest {
GameConfig gameConfig = new GameConfig(4);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B3"));
- gameState.playStone(Player.BLACK, Action.getInstance("A3"));
- gameState.playStone(Player.BLACK, Action.getInstance("C3"));
- gameState.playStone(Player.BLACK, Action.getInstance("B4"));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C3")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B4")));
System.out.println("State before move: ");
System.out.println(gameState);
diff --git a/test/net/woodyfolsom/msproj/policy/RootParTest.java b/test/net/woodyfolsom/msproj/policy/RootParTest.java
new file mode 100644
index 0000000..059bf44
--- /dev/null
+++ b/test/net/woodyfolsom/msproj/policy/RootParTest.java
@@ -0,0 +1,87 @@
+package net.woodyfolsom.msproj.policy;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import net.woodyfolsom.msproj.Action;
+import net.woodyfolsom.msproj.GameConfig;
+import net.woodyfolsom.msproj.GameState;
+import net.woodyfolsom.msproj.Player;
+
+import org.junit.Test;
+
+public class RootParTest {
+ @Test
+ public void testGenmoveAsW() {
+ Policy treeSearch = new RootParallelization(2, 2000L);
+ GameConfig gameConfig = new GameConfig(6);
+ GameState gameState = new GameState(gameConfig);
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+
+ // if this were PLACE stone instad of PLAY stone, white should pass as
+ // well, and win.
+ assertTrue(gameState.playStone(Player.BLACK, Action.getInstance("B2")));
+
+ Action move = treeSearch.getAction(gameConfig, gameState, Player.WHITE);
+
+ System.out.println(gameState);
+
+ System.out.println("Generated move: " + move);
+ System.out.println("NumStateEvaluations: "
+ + treeSearch.getNumStateEvaluations());
+
+ assertTrue(gameState.playStone(Player.WHITE, move));
+
+ System.out.println(gameState);
+ }
+
+ @Test
+ public void testGenmoveAsB() {
+ Policy treeSearch = new RootParallelization(2, 2000L);
+ GameConfig gameConfig = new GameConfig(5);
+ GameState gameState = new GameState(gameConfig);
+
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.BLACK, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B2")));
+
+ Action move = treeSearch.getAction(gameConfig, gameState, Player.BLACK);
+
+ System.out.println(gameState);
+
+ System.out.println("Generated move: " + move);
+ System.out.println("NumStateEvaluations: "
+ + treeSearch.getNumStateEvaluations());
+
+ assertTrue(gameState.playStone(Player.BLACK, move));
+
+ System.out.println(gameState);
+ }
+
+ @Test
+ public void testIllegalMoveRejection() {
+ Policy treeSearch = new RootParallelization(2, 2000L);
+ GameConfig gameConfig = new GameConfig(5);
+ GameState gameState = new GameState(gameConfig);
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B3")));
+
+ Action move;
+
+ // verify that UCT does not generate an illegal move in 20 calls
+ for (int i = 0; i < 10; i++) {
+ move = treeSearch.getAction(gameConfig, gameState, Player.BLACK);
+ System.out.println("Generated move: " + move);
+ GameState stateCopy = new GameState(gameState);
+ stateCopy.playStone(Player.BLACK, move);
+ System.out.println(stateCopy);
+ assertFalse(Action.getInstance("B2").equals(move));
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/net/woodyfolsom/msproj/policy/ValidMoveGeneratorTest.java b/test/net/woodyfolsom/msproj/policy/ValidMoveGeneratorTest.java
index c19b929..c50c191 100644
--- a/test/net/woodyfolsom/msproj/policy/ValidMoveGeneratorTest.java
+++ b/test/net/woodyfolsom/msproj/policy/ValidMoveGeneratorTest.java
@@ -28,10 +28,11 @@ public class ValidMoveGeneratorTest {
*/
GameConfig gameConfig = new GameConfig(5);
GameState gameState = new GameState(gameConfig);
- gameState.playStone(Player.WHITE, Action.getInstance("A2"));
- gameState.playStone(Player.WHITE, Action.getInstance("B1"));
- gameState.playStone(Player.WHITE, Action.getInstance("B4"));
- gameState.playStone(Player.WHITE, Action.getInstance("C2"));
+
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("A2")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B1")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("B4")));
+ assertTrue(gameState.placeStone(Player.WHITE, Action.getInstance("C2")));
assertFalse(gameState.playStone(Player.BLACK, Action.getInstance("A1")));