📄 sudokumodel.java
字号:
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 + -