diff --git a/src/CheckersGameState2.java b/src/CheckersGameState2.java index 4d47c51..2d6f554 100644 --- a/src/CheckersGameState2.java +++ b/src/CheckersGameState2.java @@ -4,8 +4,6 @@ import java.util.Arrays; public class CheckersGameState2 implements CheckersGameState { - // TODO: Fix king infinite recursion - // 0 = empty // 1 = black piece // 2 = white piece @@ -18,16 +16,19 @@ public class CheckersGameState2 implements CheckersGameState { public static void main(String args[]) { CheckersGameState2 state = new CheckersGameState2(); + System.out.println("This is the initial board followed by an entire game played."); + System.out.println("We do this by always choosing the first move."); state.printState(); - for(int i = 0; i<100; i++){ - List actions = state.actions(); - if(actions.size()==0){break;} + List actions = state.actions(); + while(actions.size() > 0){ for(Move move : actions) { System.out.println((Move2)move+" ~~ "+((Move2)move).destination()); } state = (CheckersGameState2)state.result(actions.get(0)); state.printState(); + actions = state.actions(); } + System.out.println("\n\nNow this tests a diamond movement edge case:"); int[] b = new int[32]; b[5] = 3; b[8] = 2; diff --git a/src/State2TestOutput.txt b/src/State2TestOutput.txt new file mode 100644 index 0000000..4c5e773 --- /dev/null +++ b/src/State2TestOutput.txt @@ -0,0 +1,671 @@ +This is the initial board followed by an entire game played. +We do this by always choosing the first move. + - b - b - b - b + b - b - b - b - + - b - b - b - b + - - - - - - - - + - - - - - - - - + w - w - w - w - + - w - w - w - w + w - w - w - w - +(5:1):(4:0) ~~ 12 +(5:1):(4:2) ~~ 13 +(5:3):(4:2) ~~ 13 +(5:3):(4:4) ~~ 14 +(5:5):(4:4) ~~ 14 +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 + - b - b - b - b + b - b - b - b - + - - - b - b - b + b - - - - - - - + - - - - - - - - + w - w - w - w - + - w - w - w - w + w - w - w - w - +(2:0):(3:1) ~~ 16 +(2:2):(3:1) ~~ 16 +(2:2):(3:3) ~~ 17 +(2:4):(3:3) ~~ 17 +(2:4):(3:5) ~~ 18 +(2:6):(3:5) ~~ 18 +(2:6):(3:7) ~~ 19 + - b - b - b - b + b - b - b - b - + - - - b - b - b + b - - - - - - - + - w - - - - - - + - - w - w - w - + - w - w - w - w + w - w - w - w - +(6:0):(5:1) ~~ 8 +(6:2):(5:1) ~~ 8 +(5:3):(4:2) ~~ 13 +(5:3):(4:4) ~~ 14 +(5:5):(4:4) ~~ 14 +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 + - b - b - b - b + - - b - b - b - + - b - b - b - b + b - - - - - - - + - w - - - - - - + - - w - w - w - + - w - w - w - w + w - w - w - w - +(3:1):(4:2) ~~ 13 +(2:2):(3:3) ~~ 17 +(2:4):(3:3) ~~ 17 +(2:4):(3:5) ~~ 18 +(2:6):(3:5) ~~ 18 +(2:6):(3:7) ~~ 19 +(1:1):(2:0) ~~ 20 + - b - b - b - b + - - b - b - b - + - b - b - b - b + b - w - - - - - + - - - - - - - - + - - w - w - w - + - w - w - w - w + w - w - w - w - +(5:1):(3:3) ~~ 17 +(5:3):(3:1) ~~ 16 + - b - b - b - b + - - b - b - b - + - - - b - b - b + b - - - - - - - + - - - b - - - - + - - w - w - w - + - w - w - w - w + w - w - w - w - +(2:2):(4:4) ~~ 14 +(2:4):(4:2) ~~ 13 + - b - b - b - b + - - b - b - b - + - - - b - b - b + b - - - w - - - + - - - - - - - - + - - - - w - w - + - w - w - w - w + w - w - w - w - +(5:3):(3:5) ~~ 18 +(5:5):(3:3) ~~ 17 + - b - b - b - b + - - b - b - b - + - - - - - b - b + b - - - - - - - + - - - - - b - - + - - - - w - w - + - w - w - w - w + w - w - w - w - +(2:4):(4:6) ~~ 15 +(2:6):(4:4) ~~ 14 + - b - b - b - b + - - b - b - b - + - - - - - b - b + b - - - - - w - + - - - - - - - - + - - - - - - w - + - w - w - w - w + w - w - w - w - +(5:5):(3:7) ~~ 19 +(5:7):(3:5) ~~ 18 + - b - b - b - b + - - b - b - b - + - - - - - - - b + b - - - - - - - + - - - - - - - b + - - - - - - w - + - w - w - w - w + w - w - w - w - +(2:6):(3:5) ~~ 18 +(1:1):(2:0) ~~ 20 +(1:1):(2:2) ~~ 21 +(1:3):(2:2) ~~ 21 +(1:3):(2:4) ~~ 22 +(1:5):(2:4) ~~ 22 + - b - b - b - b + - - b - b - b - + - - - - - - - b + b - - - - - - - + - - - - - w - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(7:1):(6:0) ~~ 4 +(6:2):(5:1) ~~ 8 +(6:2):(5:3) ~~ 9 +(6:4):(5:3) ~~ 9 +(6:4):(5:5) ~~ 10 +(6:6):(5:5) ~~ 10 +(5:7):(4:6) ~~ 15 +(4:0):(3:1) ~~ 16 +(3:7):(2:6) ~~ 23 + - - - b - b - b + b - b - b - b - + - - - - - - - b + b - - - - - - - + - - - - - w - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(3:5):(4:4) ~~ 14 +(3:5):(4:6) ~~ 15 +(1:1):(2:0) ~~ 20 +(1:1):(2:2) ~~ 21 +(1:3):(2:2) ~~ 21 +(1:3):(2:4) ~~ 22 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 + - - - b - b - b + b - b - b - b - + - - - - - - - b + b - - - w - - - + - - - - - - - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(6:0):(5:1) ~~ 8 +(6:2):(5:1) ~~ 8 +(6:2):(5:3) ~~ 9 +(6:4):(5:3) ~~ 9 +(6:4):(5:5) ~~ 10 +(6:6):(5:5) ~~ 10 +(5:7):(4:6) ~~ 15 +(4:0):(3:1) ~~ 16 +(3:7):(2:6) ~~ 23 + - - - b - b - b + - - b - b - b - + - b - - - - - b + b - - - w - - - + - - - - - - - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(4:4):(5:3) ~~ 9 +(4:4):(5:5) ~~ 10 +(1:1):(2:0) ~~ 20 +(1:1):(2:2) ~~ 21 +(1:3):(2:2) ~~ 21 +(1:3):(2:4) ~~ 22 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 + - - - b - b - b + - - b - b - b - + - b - w - - - b + b - - - - - - - + - - - - - - - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(6:2):(4:4) ~~ 14 +(6:4):(4:2) ~~ 13 + - - - b - b - b + - - - - b - b - + - b - - - - - b + b - - - b - - - + - - - - - - - b + - - - - - - - - + - w - w - w - w + w - w - w - w - +(1:1):(2:0) ~~ 20 +(1:1):(2:2) ~~ 21 +(1:3):(2:2) ~~ 21 +(1:3):(2:4) ~~ 22 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 + - - - b - b - b + - - - - b - b - + - b - - - - - b + b - - - b - - - + - - - - - - - b + w - - - - - - - + - - - w - w - w + w - w - w - w - +(7:3):(6:2) ~~ 5 +(6:4):(5:3) ~~ 9 +(6:4):(5:5) ~~ 10 +(6:6):(5:5) ~~ 10 +(5:1):(4:2) ~~ 13 +(5:7):(4:6) ~~ 15 +(4:0):(3:1) ~~ 16 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - b - b + - - b - b - b - + - b - - - - - b + b - - - b - - - + - - - - - - - b + w - - - - - - - + - - - w - w - w + w - w - w - w - +(2:0):(3:1) ~~ 16 +(1:3):(2:2) ~~ 21 +(1:3):(2:4) ~~ 22 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 + - - - - - b - b + - - b - b - b - + - b - - - - - b + b - - - b - - - + - w - - - - - b + - - - - - - - - + - - - w - w - w + w - w - w - w - +(4:0):(2:2) ~~ 21 + - - - - - b - b + - - b - b - b - + - b - - - - - b + - - - - b - - - + - - - - - - - b + - - b - - - - - + - - - w - w - w + w - w - w - w - +(1:3):(3:1) ~~ 16 + - - - - - b - b + - - b - b - b - + - b - - - - - b + - - - - b - - - + - w - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:2):(5:3) ~~ 9 +(6:4):(5:3) ~~ 9 +(6:4):(5:5) ~~ 10 +(6:6):(5:5) ~~ 10 +(5:1):(4:0) ~~ 12 +(5:1):(4:2) ~~ 13 +(5:7):(4:6) ~~ 15 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - b - b + - - - - b - b - + - b - b - - - b + - - - - b - - - + - w - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(3:1):(4:0) ~~ 12 +(3:1):(4:2) ~~ 13 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 + - - - - - b - b + - - - - b - b - + - b - b - - - b + w - - - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:4):(5:5) ~~ 10 +(6:6):(5:5) ~~ 10 +(5:1):(4:2) ~~ 13 +(5:3):(4:2) ~~ 13 +(5:7):(4:6) ~~ 15 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - b - b + - - - - - - b - + - b - b - b - b + w - - - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(4:0):(6:2) ~~ 5 + - - - - - b - b + - - w - - - b - + - - - b - b - b + - - - - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(7:5):(6:4) ~~ 6 +(5:3):(4:2) ~~ 13 +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - - - b + - - w - b - b - + - - - b - b - b + - - - - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:2):(7:1) ~~ 0 +(6:2):(7:3) ~~ 1 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 + - W - - - - - b + - - - - b - b - + - - - b - b - b + - - - - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(5:3):(4:2) ~~ 13 +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - W - - - - - b + - - - - b - b - + - - - - - b - b + - - b - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(7:1):(6:0) ~~ 4 +(7:1):(6:2) ~~ 5 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 + - - - - - - - b + W - - - b - b - + - - - - - b - b + - - b - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:4):(5:3) ~~ 9 +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 +(4:2):(3:1) ~~ 16 +(4:2):(3:3) ~~ 17 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - - - b + W - - - - - b - + - - - b - b - b + - - b - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:0):(5:1) ~~ 8 +(6:0):(7:1) ~~ 0 +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 + - - - - - - - b + - - - - - - b - + - W - b - b - b + - - b - b - - - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(5:5):(4:6) ~~ 15 +(5:7):(4:6) ~~ 15 +(4:2):(3:1) ~~ 16 +(4:2):(3:3) ~~ 17 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - - - b + - - - - - - b - + - W - b - - - b + - - b - b - b - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(5:1):(3:3):(5:5) ~~ 10 + - - - - - - - b + - - - - - - b - + - - - b - W - b + - - - - - - b - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(6:6):(4:4) ~~ 14 + - - - - - - - b + - - - - - - - - + - - - b - - - b + - - - - b - b - + - - - - - - - b + - - - - - - - - + - - - - - w - w + w - w - w - w - +(1:5):(2:4) ~~ 22 +(1:5):(2:6) ~~ 23 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 + - - - - - - - b + - - - - - - - - + - - - b - - - b + - - - - b - b - + - - - - - - - b + - - - - w - - - + - - - - - - - w + w - w - w - w - +(7:7):(6:6) ~~ 7 +(5:3):(4:2) ~~ 13 +(4:4):(3:3) ~~ 17 +(4:4):(3:5) ~~ 18 +(4:6):(3:5) ~~ 18 +(3:7):(2:6) ~~ 23 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - b - b - + - - - - - - - b + - - - - w - - - + - - - - - - - w + w - w - w - w - +(2:4):(3:3) ~~ 17 +(2:4):(3:5) ~~ 18 +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 +(0:4):(1:5) ~~ 26 +(0:6):(1:5) ~~ 26 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - b - b - + - - - w - - - b + - - - - - - - - + - - - - - - - w + w - w - w - w - +(4:4):(2:2) ~~ 21 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - - - b - + - - - - - - - b + - - b - - - - - + - - - - - - - w + w - w - w - w - +(1:7):(2:6) ~~ 23 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:4):(1:3) ~~ 25 +(0:4):(1:5) ~~ 26 +(0:6):(1:5) ~~ 26 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - - - b - + - - - - - - - b + - - b - - - w - + - - - - - - - - + w - w - w - w - +(3:7):(1:5) ~~ 26 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - - - b - + - - - - - - - - + - - b - - - - - + - - - - - b - - + w - w - w - w - +(0:4):(2:6) ~~ 23 +(0:6):(2:4) ~~ 22 + - - - - - - - - + - - - - - - b - + - - - b - - - b + - - - - - - b - + - - - - - - - - + - - b - - - w - + - - - - - - - - + w - w - - - w - +(6:6):(5:5) ~~ 10 +(5:3):(4:2) ~~ 13 +(5:3):(4:4) ~~ 14 +(4:6):(3:5) ~~ 18 +(4:6):(3:7) ~~ 19 +(2:2):(1:1) ~~ 24 +(2:2):(1:3) ~~ 25 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - b - + - - - - - - - - + - - b - - - w - + - - - - - - - - + w - w - - - w - +(2:6):(3:5) ~~ 18 +(2:6):(3:7) ~~ 19 +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:6):(1:5) ~~ 26 +(0:6):(1:7) ~~ 27 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - b - + - - - - - w - - + - - b - - - - - + - - - - - - - - + w - w - - - w - +(4:6):(2:4) ~~ 22 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - b - b - - - + - - - - - - - - + w - w - - - w - +(0:0):(1:1) ~~ 24 +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:6):(1:5) ~~ 26 +(0:6):(1:7) ~~ 27 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - b - b - - - + - w - - - - - - + - - w - - - w - +(2:2):(0:0) ~~ 28 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - - - b - - - + - - - - - - - - + B - w - - - w - +(0:2):(1:1) ~~ 24 +(0:2):(1:3) ~~ 25 +(0:6):(1:5) ~~ 26 +(0:6):(1:7) ~~ 27 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - - - b - - - + - w - - - - - - + B - - - - - w - +(0:0):(2:2) ~~ 21 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - B - b - - - + - - - - - - - - + - - - - - - w - +(0:6):(1:5) ~~ 26 +(0:6):(1:7) ~~ 27 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - B - b - - - + - - - - - w - - + - - - - - - - - +(2:4):(0:6) ~~ 31 + - - - - - - - - + - - - - - - - - + - - - b - b - b + - - - - - - - - + - - - - - - - - + - - B - - - - - + - - - - - - - - + - - - - - - B - + + +Now this tests a diamond movement edge case: + - - - - - - - - + - - B - - - - - + - w - w - - - - + - - - - - - - - + - w - w - - - - + - - - - - - - - + - - - - - - - - + - - - - - - - - +(6:2):(4:0):(2:2):(4:4):(6:2) +(6:2):(4:4):(2:2):(4:0):(6:2)