Here is my code:
Expand|Select|Wrap|Line Numbers
- if (board[row][col] == playerKing)
- {
- // row/col is the current row/col of the Current Player
- if (canJumpKing(player, row, col, row+1, col+1, row+2, col+2))
- moves.add(new CheckersMove(row, col, row+2, col+2));
- if (canJumpKing(player, row, col, row-1, col+1, row-2, col+2))
- moves.add(new CheckersMove(row, col, row-2, col+2));
- if (canJumpKing(player, row, col, row+1, col-1, row+2, col-2))
- moves.add(new CheckersMove(row, col, row+2, col-2));
- if (canJumpKing(player, row, col, row-1, col-1, row-2, col-2))
- moves.add(new CheckersMove(row, col, row-2, col-2));
- if (row<col)
- for (int i=1; i<(7-col); i++) {
- if (canJumpKing(player, row, col, row+i, col+i, row+1+i, col+1+i))
- moves.add(new CheckersMove(row, col, row+1+i, col+1+i)); }
- if (row>col)
- for (int i=1; i<Math.min(7-row,7-col); i++) {
- if (canJumpKing(player, row, col, row+i, col+i, row+1+i, col+1+i))
- moves.add(new CheckersMove(row, col, row+1+i, col+1+i)); }
- if (row<col)
- for (int i=1; i<row; i++) {
- if (canJumpKing(player, row, col, row-i, col-i, row-1-i, col-1-i))
- moves.add(new CheckersMove(row, col, row-1-i, col-1-i)); }
- if (row>col)
- for (int i=1; i<col; i++) {
- if (canJumpKing(player, row, col, row-i, col-i, row-1-i, col-1-i))
- moves.add(new CheckersMove(row, col, row-1-i, col-1-i)); }
- for (int i=1; i<Math.min(row,7-col); i++) {
- if (canJumpKing(player, row, col, row-i, col+i, row-1-i, col+1+i))
- moves.add(new CheckersMove(row, col, row-1-i, col+1+i)); }
- for (int i=1; i<Math.min(7-row,col); i++) {
- if (canJumpKing(player, row, col, row+i, col-i, row+1+i, col-1-i))
- moves.add(new CheckersMove(row, col, row+1+i, col-1-i)); }
- }
Expand|Select|Wrap|Line Numbers
- private boolean canJumpKing(int player, int r1, int c1, int r2, int c2, int r3, int c3) {
- if (r3 < 0 || r3 >= 8 || c3 < 0 || c3 >= 8)
- return false;
- if (board[r3][c3] != EMPTY)
- return false;
- for (int i = 1; i < r3 - r1 - 1; i++) {
- if (((r3 > r2) && (c3 > c2)))
- if ((board[r1 + i][c1 + i] != EMPTY) && (board[r1 + i + 1][c1 + i + 1] != EMPTY))
- return false; }
- for (int i = 1; i < c1 - c3 - 1; i++) {
- if (((r3 < r2) && (c3 < c2)))
- if ((board[r1 - i][c1 - i] != EMPTY) && (board[r1 - i - 1][c1 - i - 1] != EMPTY))
- return false; }
- for (int i = 1; i < (r3 - r1 - 1); i++) {
- if (((r3 > r2) && (c3 < c2)))
- if ((board[r1 + i][c1 - i] != EMPTY) && (board[r1 + i + 1][c1 - i - 1] != EMPTY))
- return false; }
- for (int i = 1; i <= (c3 - c1 - 2); i++) {
- if (((r3 < r2) && (c3 > c2)))
- if ((board[r1 - i][c1 + i] != EMPTY) && (board[r1 - i - 1][c1 + i + 1] != EMPTY))
- return false; }
- for (int i = 1; i < r3 - r1 - 1; i++) {
- if (((r3 > r2) && (c3 > c2)))
- if (board[r1][c1] == RED_KING)
- if ((board[r1 + i][c1 + i] == RED))
- return false; }
- for (int i = 1; i < c1 - c3 - 1; i++) {
- if (((r3 < r2) && (c3 < c2)))
- if (board[r1][c1] == RED_KING)
- if ((board[r1 - i][c1 - i] == RED))
- return false; }
- for (int i = 1; i < (r3 - r1 - 1); i++) {
- if (((r3 > r2) && (c3 < c2)))
- if (board[r1][c1] == RED_KING)
- if ((board[r1 + i][c1 - i] == RED))
- return false; }
- for (int i = 1; i <= (c3 - c1 - 2); i++) {
- if (((r3 < r2) && (c3 > c2)))
- if (board[r1][c1] == RED_KING)
- if ((board[r1 - i][c1 + i] == RED))
- return false; }
- for (int i = 1; i < r3 - r1 - 1; i++) {
- if (((r3 > r2) && (c3 > c2)))
- if (board[r1][c1] == BLACK_KING)
- if ((board[r1 + i][c1 + i] == BLACK))
- return false; }
- for (int i = 1; i < c1 - c3 - 1; i++) {
- if (((r3 < r2) && (c3 < c2)))
- if (board[r1][c1] == BLACK_KING)
- if ((board[r1 - i][c1 - i] == BLACK))
- return false; }
- for (int i = 1; i < (r3 - r1 - 1); i++) {
- if (((r3 > r2) && (c3 < c2)))
- if (board[r1][c1] == BLACK_KING)
- if ((board[r1 + i][c1 - i] == BLACK))
- return false; }
- for (int i = 1; i <= (c3 - c1 - 2); i++) {
- if (((r3 < r2) && (c3 > c2)))
- if (board[r1][c1] == BLACK_KING)
- if ((board[r1 - i][c1 + i] == BLACK))
- return false; }
- if (board[r1][c1] == RED_KING) {
- if (board[r2][c2] == RED)
- return false;
- if (board[r2][c2] != BLACK && board[r2][c2] != BLACK_KING)
- return false;
- return true; }
- else {
- if (board[r1][c1] == BLACK)
- return false;
- if (board[r2][c2] != RED && board[r2][c2] != RED_KING)
- return false;
- return true; }
- }
Expand|Select|Wrap|Line Numbers
- if (toRow == 0 && board[toRow][toCol] == RED)
- board[toRow][toCol] = RED_KING;
- if (toRow == 7 && board[toRow][toCol] == BLACK)
- board[toRow][toCol] = BLACK_KING;