public Move move(int r, int c, int tr, int tc) {
		Move move = Move.instance(r, c, tr, tc, this);
		
		if (move.isJump()) {			
			board.clearCell(move.getJr(), move.getJc());
		}		
		
		history.push(move);
		board.move(r, c, tr, tc);
		
		if (move.isPromote() && (BLACK_PIECE.equals(move.getType()) || WHITE_PIECE.equals(move.getType()))) {
			board.promote(tr, tc);
		}
		
		return move;
	}