⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sudokumodel.java

📁 数独游戏源码 J2ME编写的手机数独游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      newVal = (byte) ( (newVal + 1) % 10);
    }
    return newVal;
  }

  public void handleEvent(int keyCode) {
    int g = canvas.getGameAction(keyCode);

    if ( (input == NOGUIDE) && (keyCode <= canvas.KEY_NUM9) &&
        (keyCode >= canvas.KEY_NUM0)) {
      if (!logic.isCarved(yCursor, xCursor)) {
        logic.setValueWithoutChecks(yCursor, xCursor,
                                              (byte) (keyCode -SuDoKuCanvas.KEY_NUM0));
        canvas.writeNumber(xCursor, yCursor, (byte) (keyCode - SuDoKuCanvas.KEY_NUM0),
                           (byte) (SuDoKuCanvas.CURSOR | SuDoKuCanvas.CORRECT));

      }
      return;
    }

    if ( g != 0 ) {
      if (g == SuDoKuCanvas.LEFT) {

        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (logic.isCarved(yCursor, xCursor) ?
                            SuDoKuCanvas.CARVEDINSTONE : SuDoKuCanvas.CORRECT));

        xCursor = (byte) ( (xCursor + 8) % 9);
        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (byte) (SuDoKuCanvas.CURSOR |
                                   (logic.
                                    isCarved(yCursor, xCursor) ?
                                    SuDoKuCanvas.CARVEDINSTONE :
                                    SuDoKuCanvas.CORRECT)));

      }
      else if (g == SuDoKuCanvas.RIGHT) {

        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (logic.isCarved(yCursor, xCursor) ?
                            SuDoKuCanvas.CARVEDINSTONE : SuDoKuCanvas.CORRECT));

        xCursor = (byte) ( (xCursor + 1) % 9);
        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (byte) (SuDoKuCanvas.CURSOR |
                                   (logic.
                                    isCarved(yCursor, xCursor) ?
                                    SuDoKuCanvas.CARVEDINSTONE :
                                    SuDoKuCanvas.CORRECT)));
      }
      else if (g == SuDoKuCanvas.UP) {

        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (logic.isCarved(yCursor, xCursor) ?
                            SuDoKuCanvas.CARVEDINSTONE : SuDoKuCanvas.CORRECT));

        yCursor = (byte) ( (yCursor + 8) % 9);
        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (byte) (SuDoKuCanvas.CURSOR |
                                   (logic.
                                    isCarved(yCursor, xCursor) ?
                                    SuDoKuCanvas.CARVEDINSTONE :
                                    SuDoKuCanvas.CORRECT)));

      }
      else if (g == SuDoKuCanvas.DOWN) {

        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (logic.isCarved(yCursor, xCursor) ?
                            SuDoKuCanvas.CARVEDINSTONE : SuDoKuCanvas.CORRECT));

        yCursor = (byte) ( (yCursor + 1) % 9);
        canvas.writeNumber(xCursor, yCursor,
                           logic.getValue(yCursor, xCursor),
                           (byte) (SuDoKuCanvas.CURSOR |
                                   (logic.
                                    isCarved(yCursor, xCursor) ?
                                    SuDoKuCanvas.CARVEDINSTONE :
                                    SuDoKuCanvas.CORRECT)));

      }
      else if (g == SuDoKuCanvas.FIRE) {
        if (!logic.isCarved(yCursor, xCursor) &&
            (input != NOGUIDE)) {
     
          logic.setValueWithoutChecks(yCursor, xCursor,
                                                findNextValue(yCursor, xCursor));
          canvas.writeNumber(xCursor, yCursor,
                             (byte) logic.getValue(yCursor, xCursor),
                             (byte) (SuDoKuCanvas.CURSOR | SuDoKuCanvas.CORRECT));

        }
      }
    }


    if (logic.isSolved()) midlet.notifyGameOver(level, canvas.gameDuration,true);
    else if(logic.writtenCnt==81)midlet.notifyGameOver(level, canvas.gameDuration,false);
  }

  public void loadGame(){
    level = store.getCurrentLevel();//�ȼ�
   
    String strPuzzle = store.getCurrentPuzzleAsString();
    String strSolution = store.getCurrentSolutionAsString();
 
    input = store.getInput();
    canvas.gameDuration = store.getTime();
    if(strPuzzle==null||strSolution==null)logic = SuDoKuLogic.getPuzzle(shuffle(strPuzzles[level][Math.abs(rand.nextInt()) % NUM]));
    else  logic = SuDoKuLogic.getPuzzle(strSolution, strPuzzle);
    xCursor = 4;
    yCursor = 4;

    writeAllNumbers();
    canvas.writeNumber(xCursor, yCursor,
                       logic.getValue(yCursor, xCursor),
                       (byte) (SuDoKuCanvas.CURSOR |
                               (logic.
                                isCarved(yCursor, xCursor) ?
                                SuDoKuCanvas.CARVEDINSTONE : SuDoKuCanvas.CORRECT)));
    
  }

  public void saveGame() {
    store.save(level, 
                 logic.getPuzzleAsString(),
                 logic.getSolutionAsString(), canvas.getBackground(),
                 canvas.gameDuration, input);
  }

  protected String shuffle(String s) {
    String sReturn = s;
    byte[] ba;
    byte b, t, i, j;

    for (b = 0; b < 3; b++) {
      ba = getShuffledArray( (byte) 3);
      sReturn = swapCols(s, ba, b);
      ba = getShuffledArray( (byte) 3);
      sReturn = swapRows(s, ba, b);
    }

    ba = getShuffledArray( (byte) 9);
    sReturn = swapNumbers(sReturn, ba);

    return sReturn;
  }

  protected String swapCols(String s, byte[] ba, byte b) {
    char[] caReturn = s.toCharArray();
    ;
    byte i, j;

    for (j = 0; j < ba.length; j++)
      if (j != ba[j])
        for (i = 0; i < 9; i++)
          caReturn[9 * i + 3 * b + j] = s.charAt(9 * i + 3 * b + ba[j]);

    return new String(caReturn);
  }

  protected String swapRows(String s, byte[] ba, byte b) {
    char[] caReturn = s.toCharArray();
    ;
    byte i, j;

    for (i = 0; i < ba.length; i++)
      if (i != ba[i])
        for (j = 0; j < 9; j++)
          caReturn[9 * (3 * b + i) + j] = s.charAt(9 * (3 * b + ba[i]) + j);

    return new String(caReturn);
  }

  protected String swapNumbers(String sOrig, byte[] ba) {
    StringBuffer sbReturn = new StringBuffer(sOrig.length());
    byte yNum, yCiS;

    for (byte i = 0; i < sOrig.length(); i++) {
      yNum = (byte) (sOrig.charAt(i) - '0');
      yCiS = (byte) (yNum / 10);
      yNum = (byte) (yNum % 10);
      sbReturn.append( (char) ('0' + ba[yNum - 1] + 1 + 10 * yCiS));
    }


    return sbReturn.toString();
  }

  protected byte[] getShuffledArray(byte n) {
    byte[] baReturn = new byte[n];
    byte b, t, i, j;

    for (b = 0; b < n; b++)
      baReturn[b] = b;

    for (b = 0; b < 2 * n; b++) {
      i = (byte) (Math.abs(rand.nextInt()) % n);
      j = (byte) (Math.abs(rand.nextInt()) % n);
      t = baReturn[i];
      baReturn[i] = baReturn[j];
      baReturn[j] = t;
    }

    return baReturn;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -