How to stop king to jump in checker game with Java

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Mr Key
    New Member
    • Aug 2010
    • 132

    How to stop king to jump in checker game with Java

    I have been creating English checker game by using Java, everything is working fine, my king is jumping and capture opponents pieces as it should have been. My problem is that when the king is crowned after capturing the opponent pieces it continue to jump back and capture other pieces available. Actually it is supposed to stop right after being crowned as king.

    Here is my code:
    Code:
    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)); }
                            	  	
                  }
    This is my canjumpKing boolean function which gives permission whether to jump and capture or not.
    Code:
     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; }
    			}
    Lastly the code where the king is crowned


    Code:
    if (toRow == 0 && board[toRow][toCol] == RED)
                    board[toRow][toCol] = RED_KING;
                if (toRow == 7 && board[toRow][toCol] == BLACK)
                    board[toRow][toCol] = BLACK_KING;
    After being crowned as a king it supposed to stop jumping and capture opponent pieces and the other player should play first before the king can move.
Working...