@Override
  protected boolean requestMove(int from, int to) {
    if (_arrPGN.size() <= _jni.getNumBoard() - 1) {
      setMessage("(position allready solved)");
      return super.requestMove(from, to);
    }
    int move = _arrPGN.get(_jni.getNumBoard() - 1)._move;
    int theMove = Move.makeMove(from, to);

    if (Move.equalPositions(move, theMove)) {
      jumptoMove(_jni.getNumBoard());

      updateState();

      setMessage("Correct!");
      _imgStatus.setImageResource(R.drawable.indicator_ok);
      /*
      if(_arrPGN.size() == m_game.getBoard().getNumBoard()-1)
      	play();
      else {
      	jumptoMove(m_game.getBoard().getNumBoard());
      	updateState();
      }*/

      return true;
    } else {
      // check for illegal move
      setMessage(
          "Move "
              + Move.toDbgString(theMove)
              + (checkIsLegalMove(from, to) ? " is not the expected move" : " is an invalid move"));
      _imgStatus.setImageResource(R.drawable.indicator_error);
      m_iFrom = -1;
    }

    updateState();

    return true;
  }
  @Override
  public void play() {
    m_iFrom = -1;
    Log.i("ChessViewPuzzle", "Numboard = " + _jni.getNumBoard());

    _imgStatus.setImageResource(R.drawable.indicator_none);

    String sPGN;

    _iPos++;
    if (_iPos < 1) _iPos = 1;
    if (_iPos > _num) {
      setMessage("You completed all puzzles!!!");
      return;
    }

    if (_seekBar != null) {
      _seekBar.setProgress(_iPos);
    }
    if (_cursor != null) {
      _cursor.moveToPosition(_iPos - 1);
      sPGN = _cursor.getString(_cursor.getColumnIndex(MyPuzzleProvider.COL_PGN));
      Log.i("ChessViewPuzzle", "init: " + sPGN);
      loadPGN(sPGN);

      jumptoMove(0);

      int turn = _jni.getTurn();
      if (turn == BoardConstants.BLACK && false == _view.getFlippedBoard()
          || turn == BoardConstants.WHITE && _view.getFlippedBoard()) _view.flipBoard();

      String sWhite = _mapPGNHead.get("White");
      if (sWhite == null) {
        sWhite = "";
      } else {
        sWhite = sWhite.replace("?", "");
      }
      String sDate = _mapPGNHead.get("Date");
      if (sDate == null) {
        sDate = "";
      } else {
        sDate = sDate.replace("????", "");
        sDate = sDate.replace(".??.??", "");
      }

      if (sWhite.length() > 0 && sDate.length() > 0) {
        sWhite += ", ";
      }

      _tvPuzzleText.setText(
          "# " + _iPos + " - " + sWhite
              + sDate); // + "\n\n" + _mapPGNHead.get("Event") + ", " +
                        // _mapPGNHead.get("Date").replace(".??.??", ""));
      // _tvPuzzle.setText(");

      _imgTurn.setImageResource(
          (turn == BoardConstants.WHITE ? R.drawable.turnwhite : R.drawable.turnblack));

      updateState();
    }
  }