4 .4 . Конец истории
91
Для определения правил�ных ходов �ы �оздади� �а��ив для каждо�о тайла
в табли�е� Для каждой пози�ии �а��ив хранит �пи�ок заполненных тайлов� кото�
рые види�ы в на�тоя�ее вре�я� Е�ли чи�ло появляет�я в �пи�ке� �то значит� что
оно не подходит для теку�е�о тайла� Метод
getUsedTiles()
получает �тот �пи�ок для
заданной пози�ии тайла�
Sudokuv2/src/org/example/sudoku/Game.java
private final int used[][][] = new int[9][9][];
protected int[] getUsedTiles(int x, int y) {
return used[x][y];
}
Ма��ив и�пол�зованных тайлов ра��читыват� довол�но накладно� по�то�у �ы
к�шируе� �тот �а��ив и пере�читывае� е�о лиш� то�да� ко�да �то нужно� вызывая
�етод
calculateUsedTiles()
�
Sudokuv2/src/org/example/sudoku/Game.java
private void calculateUsedTiles() {
for (int x = 0; x < 9; x++) {
for (int y = 0; y < 9; y++) {
used[x][y] = calculateUsedTiles(x, y);
// Log.d(TAG, "used[" + x + "][" + y + "] = "
// + toPuzzleString(used[x][y]));
}
}
}
Метод
calculateUsedTiles()
про�то вызывает
calculateUsedTiles
(
x
�
y
) для каждой по�
зи�ии решетки девят� на девят�:
Sudokuv2/src/org/example/sudoku/Game.java
1 private int[] calculateUsedTiles(int x, int y) {
- int c[] = new int[9];
- // горизонтальная
- for (int i = 0; i < 9; i++) {
5 if (i == x)
-
continue;
- int t = getTile(i, y);
- if (t != 0)
- c[t - 1] = t;
10 }
- //
вертикальная
- for (int i = 0; i < 9; i++) {
- if (i == y)
- continue;
15 int t = getTile(x, i);
- if (t != 0)
- c[t - 1] = t;
- }
- // та
же клетка блока
20 int startx = (x / 3) * 3;
92 Глава 4 • Введение в 2D-графику
- int starty = (y / 3) * 3;
- for (int i = startx; i < startx + 3; i++) {
- for (int j = starty; j < starty + 3; j++) {
- if (i == x && j == y)
25 continue;
- int t = getTile(i, j);
- if (t != 0)
- c[t - 1] = t;
- }
30 }
- // сжатие
- int nused = 0;
- for (int t : c) {
- if (t != 0)
35 nused++;
- }
- int c1[] = new int[nused];
- nused = 0;
- for (int t : c) {
40 if (t != 0)
- c1[nused++] = t;
- }
- return c1;
- }
Мы начинае� � �а��ива из девяти нулей� В �троке 4 �ы проверяе� в�е тайлы�
принадлежа�ие то�у же �оризонтал�но�у ряду� что и теку�ий� и� е�ли тайл не
пу�той� �ы �охраняе� е�о �ифру в �а��иве�
В �троке 12 �ы делае� то же �а�ое для в�ех тайлов вертикал�ной �троки� в �тро�
ке 20 — то же �а�ое для тайлов блока три на три�
По�ледний ша�� который начинает�я в �троке 32� — �то �жатие нулей в �а��иве
перед е�о возвра�ение�� Мы делае� �то для то�о� чтобы ко�анда
array .length
�о�ла
быт� и�пол�зована для бы�тро�о определения количе�тва заполненных тайлов�
которые види�ы в теку�ей пози�ии�
Разное
Для завершения реализа�ии на� понадобят�я е�е не�кол�ко �лужебных функ�
�ий и пере�енных�
easyPuzzle
�
mediumPuzzle
и
hardPuzzle
— наши закодированные
�оловоло�ки Su��ku для про�то�о� �редне�о и вы�око�о уровней �ложно�ти �оот�
Su��ku для про�то�о� �редне�о и вы�око�о уровней �ложно�ти �оот�
для про�то�о� �редне�о и вы�око�о уровней �ложно�ти �оот�
вет�твенно�
Достарыңызбен бөлісу: