diff --git a/src/CheckersGameState3.java b/src/CheckersGameState3.java index 3b6ba66..ad06c10 100644 --- a/src/CheckersGameState3.java +++ b/src/CheckersGameState3.java @@ -11,6 +11,65 @@ public CheckersGameState3(int player, int[] board){ this.board = board; } + public CheckersGameState3(int player, String[] board){ + this.player = player; + this.board = to_array(board); + } + + public int convert(String s){ + if(s.equals("-")){ + return 0; + } + else if(s.equals("b")){ + return 1; + } + else if(s.equals("w")){ + return 2; + } + else if(s.equals("B")){ + return 3; + } + else{ + return 4; + } + } + + public int[] to_array(String[] board){ + int[] b = new int[35]; + int i = 0; + int j = 0; + int added = 0; + boolean leading = false; + while(i < 35 ){ + if(i % 9 == 8){ + b[i] = 0; + } + else if(leading){ + b[i] = convert(board[j]); + } + else{ + b[i] =convert(board[j+1]); + } + if(i % 9 == 8){ + + i++; + continue; + } + j = j + 2; + i++; + added++; + if(added == 4){ + added = 0; + leading = !leading; + } + if(j == 35){ + added =0; + leading = false; + } + } + return b; + } + String player(){ if(this.player == 1){ return "black"; @@ -134,24 +193,32 @@ private void calculate_jumps(String path, int[] b, int orig, int delta1, int del int jump = orig + 2 * delta1; int[] b2 = b.clone(); b2[orig + delta1] = 0; + b2[orig + 2 * delta1] = b2 [orig]; + b2[orig] = 0; calculate_jumps(path + "," + jump, b2, jump, delta1, delta2, jumps, king); } if(can_jump(orig, delta2, b)){ int jump = orig + 2 * delta2; int[] b3 = b.clone(); b3[orig + delta2] = 0; + b3[orig + 2 * delta2] = b3[orig]; + b3[orig] = 0; calculate_jumps(path + "," + jump, b3, jump, delta1, delta2, jumps, king); } if(king && can_jump(orig, -1 * delta1, b)){ int jump = orig + -2 * delta1; int[] b4 = b.clone(); b4[orig + (-1 * delta1)] = 0; + b4[orig + (-2 * delta1)] = b4[orig]; + b4[orig] = 0; calculate_jumps(path + "," + jump, b4, jump, delta1, delta2, jumps, king); } if(king && can_jump(orig, -1 * delta2, b)){ int jump = orig + -2 * delta2; int[] b5 = b.clone(); b5[orig + -1 * delta2] = 0; + b5[orig + (-2 * delta2)] = b5[orig]; + b5[orig] = 0; calculate_jumps(path + "," + jump, b5, jump, delta1, delta2, jumps, king); } } diff --git a/src/Move.java b/src/Move.java index 41820a8..07d5fa4 100644 --- a/src/Move.java +++ b/src/Move.java @@ -1,7 +1,6 @@ public interface Move { // Starting and ending Positions - public int src, dest; // Returns a list of captured positions public int[] captures(); // Returns the string representation of a move diff --git a/src/Move3.java b/src/Move3.java index da66283..8c3ce5f 100644 --- a/src/Move3.java +++ b/src/Move3.java @@ -1,6 +1,6 @@ -public class Move3{ +public class Move3 implements Move{ - int origin, destination; + int src, dest; String[] steps; int[] kills; String check; @@ -8,13 +8,13 @@ public class Move3{ public Move3(String steps){ String[] s = steps.split(","); this.steps = s; - this.origin = Integer.parseInt(s[0]); - this.destination = Integer.parseInt(s[s.length - 1]); + this.src = Integer.parseInt(s[0]); + this.dest = Integer.parseInt(s[s.length - 1]); kills = calculate_kills(s); } public int[] calculate_kills(String[] steps){ - int diff = this.origin - this.destination; + int diff = this.src - this.dest; if(Math.abs(diff) == 4 || Math.abs(diff) == 5){ return null; } @@ -26,14 +26,14 @@ public int[] calculate_kills(String[] steps){ } public int origin(){ - return origin; + return src; } public int destination(){ - return destination; + return dest; } - public int[] kills(){ + public int[] captures(){ return kills; }