Skip to content

Commit

Permalink
Clean up some code
Browse files Browse the repository at this point in the history
  • Loading branch information
sas12028 committed Mar 30, 2017
1 parent f5cbb91 commit 398630a
Showing 1 changed file with 37 additions and 30 deletions.
67 changes: 37 additions & 30 deletions CheckersGameState3.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,29 +38,44 @@ else if (p==3){
}
}

private boolean equal(int pos){
return (pos == this.player || pos - 2 == this.player);
private boolean current_player(int sq, int[] board){
return (board[sq] == this.player || board[sq] - 2 == this.player);
}

private boolean within_bounds(int x){
private boolean can_kill(int sq, int[] board){
return valid_square(sq) && !empty(board, sq) && !current_player(sq, board);
}

private boolean valid_square(int x){
return (x >= 0 && x <= 34 && x % 9 != 8);
}

private boolean can_move(int orig, int delta){
return (within_bounds(orig + delta) && this.board[orig + delta] == 0);
private boolean empty(int[] board , int sq){
return board[sq] == 0;
}

private boolean can_move(int orig, int delta, int[] board){
return (valid_square(orig + delta) && empty(board, orig + delta));
}

private boolean can_jump(int orig, int delta, int[] board){
return (within_bounds(orig + delta) && !equal(board[orig + delta]) && board[orig + delta] != 0 && within_bounds(orig + 2 * delta) && board[orig + 2 * delta] == 0);
return (can_kill(orig+delta, board) && valid_square(orig + (2 * delta)) && empty(board, orig + 2 * delta));
}

private boolean any_jumps(int orig, int delta1, int delta2, int[] board, boolean king){
boolean forward = can_jump(orig, delta1, board) || can_jump(orig, delta2, board);
if(!king)
return forward;
boolean backward = can_jump(orig, delta1 * -1, board) || can_jump(orig, delta2 * -1, board);
return backward || forward;
}

public List<Move> actions(){
LinkedList<Move> actions = new LinkedList<Move>();
for(int i = 0; i < this.board.length; i++){
if(this.board[i] == this.player || this.board[i] == (this.player + 2)){
if(current_player(i, this.board)){
if(this.player == 1){
if(this.board[i] == 3){
generate_moves(i, -4, -5, actions, true);
generate_moves(i, 4, 5, actions, true);
}
else{
Expand All @@ -69,7 +84,6 @@ public List<Move> actions(){
}
else{
if(this.board[i] == 4){
generate_moves(i, 4, 5, actions, true);
generate_moves(i, -4, -5, actions, true);
}
else{
Expand All @@ -83,38 +97,31 @@ public List<Move> actions(){


private void generate_moves(int origin, int delta1, int delta2, List<Move> actions, boolean king){
if(can_move(origin, delta1)){
if(can_move(origin, delta1, this.board)){
String act = origin + "," + (origin + delta1);
actions.add(new Move(act));
}
else if(can_jump(origin, delta1, this.board)){
int jump = origin + 2 * delta1;
int[] b2 = this.board.clone();
b2[origin + delta1] = 0;
String act = origin + "," + jump;
calculate_jumps(act, b2, jump, delta1, delta2, actions, king);
}
if(can_move(origin, delta2)){
if(can_move(origin, delta2, this.board)){
String act = origin + "," + (origin + delta2);
actions.add(new Move(act));
}
else if(can_jump(origin, delta2, this.board)){
int jump = origin + 2 * delta2;
String act = origin + "," + jump;
int[] b2 = this.board.clone();
b2[origin + delta2] = 0;
calculate_jumps(origin + "," + jump, b2, jump, delta1, delta2, actions, king);
if(king && can_move(origin, -1 * delta1, this.board)){
String act = origin + "," + (origin - delta1);
actions.add(new Move(act));
}
if(king && can_move(origin, -1 * delta2, this.board)){
String act = origin + "," + (origin - delta2);
actions.add(new Move(act));
}
calculate_jumps("" + origin, this.board, origin, delta1, delta2, actions, king);
}


private void calculate_jumps(String path, int[] b, int orig, int delta1, int delta2, List<Move> actions, boolean king){
if(!can_jump(orig, delta1, b) && !can_jump(orig, delta2, b) && !king){
actions.add(new Move(path));
return;
}
if(king && !can_jump(orig, delta1, b) && !can_jump(orig, delta2, b) && !can_jump(orig, -1 * delta1, b) && !can_jump(orig, -1 * delta2, b)){
actions.add(new Move(path));
if(!any_jumps(orig, delta1, delta2, b, king)){
if(path.contains(",")){
actions.add(new Move(path));
}
return;
}
if(can_jump(orig, delta1, b)){
Expand Down

0 comments on commit 398630a

Please sign in to comment.