public SlidePuzzle(int width, int height, String puzzle) {
   history = new History();
   this.width = width;
   this.height = height;
   this.puzzle = puzzle;
   correctPuzzle = Util.createAnswerPanel(puzzle);
   distance = new Distance(width, height, correctPuzzle);
   char[][] chars = Util.createBoard(width, height, puzzle);
   board = new Board(width, height, puzzle);
   int distInt = distance.getAllDistance(chars);
   int maxDistInt = distance.getMaxDistance(chars);
   history.putHistory(puzzle, "", distInt, maxDistInt);
   answerBoard = new AnswerBoard();
   answerBoard.put(puzzle, distInt, distance.getMaxDistance(chars));
 }
  /**
   * * 移動とその距離をhistoryに加える処理。
   *
   * @param operation
   * @param position
   * @param currentDistance
   * @param currentMaxDistance
   */
  private void move(
      String operation, MovedPosition position, int currentDistance, int currentMaxDistance) {
    String boardStr = board.getBoardString();
    char changedChar = position.getC();
    int oldX = position.getOldX();
    int oldY = position.getOldY();
    int newX = position.getNewX();
    int newY = position.getNewY();
    if (history.getOperationHistory(boardStr) == null) {
      char[][] c = Util.createBoard(width, height, boardStr);
      int newDistance =
          distance.getNewDistance(changedChar, oldX, oldY, newX, newY, currentDistance);
      int newMaxDistance = distance.getMaxDistance(c);

      answerBoard.put(boardStr, newDistance, newMaxDistance);
      history.putHistory(boardStr, operation, newDistance, newMaxDistance);
    }
  }