Android! Разработка мобильных


Sudokuv2/src/org/example/sudoku/PuzzleView.java



Pdf көрінісі
бет55/87
Дата26.01.2023
өлшемі3,48 Mb.
#63133
1   ...   51   52   53   54   55   56   57   58   ...   87
 Sudokuv2/src/org/example/sudoku/PuzzleView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_DOWN)
return super.onTouchEvent(event);
select((int) (event.getX() / width),
(int) (event.getY() / height));
game.showKeypadOrError(selX, selY);
Log.d(TAG, "onTouchEvent: x " + selX + ", y " + selY);
return true;
}
В кон�е кон�ов в�е доро�и ведут к вызову �етода 
setSelectedTile()
для из�енения 
чи�ла в ячейке:
 Sudokuv2/src/org/example/sudoku/PuzzleView.java
public void setSelectedTile(int tile) {
if (game.setTileIfValid(selX, selY, tile)) {
invalidate();// можно изменить подсказки
} else {
// Число не подходит для этого тайла
Log.d(TAG, "setSelectedTile: invalid: " + tile);
}
}
Метод 
showKeypadOrError()
ра���отрен в разделе 4�4� «Создание �кранной 
клавиатуры» �етод 
setTileIfValid()
определен в разделе 4�4� «Создание и�ровой 
ло�ики»�
Обратите вни�ание на то� что �ы вызывае� 
invalidate()
без пара�етров� Этот 
вызов по�ечает ве�� �кран как недей�твител�ный� что нарушает �ой �об�твенный 
�овет� данный в при�ечании! Однако в данно� �лучае �то необходи�о� так как л��
бые добавленные или удаленные �ифры �о�ут из�енит� под�казки� которые �ы 
�оздади� в �леду��е� разделе�


84 Глава 4 • Введение в 2D-графику
Добавление подсказок
Можно ли не�но�о по�оч� пол�зовател�� не решая за не�о в�� �оловоло�ку? �ак 
на�чет то�о� чтобы ра�кра�ит� фон каждо�о тайла в зави�и�о�ти от то�о� �кол�ко 
воз�ожных вариантов ра��тановки чи�ел он �ожет и�ет�? Добав�те �леду��ий 
код в 
onDraw
() перед кодо� ри�ования выделения:
 Sudokuv2/src/org/example/sudoku/PuzzleView.java
// Нарисовать подсказки...
// Выбрать цвет подсказки, основываясь на количестве оставшихся ходов
Paint hint = new Paint();
int c[] = { getResources().getColor(R.color.puzzle_hint_0),
getResources().getColor(R.color.puzzle_hint_1),
getResources().getColor(R.color.puzzle_hint_2), };
Rect r = new Rect();
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
int movesleft = 9 - game.getUsedTiles(i, j).length;
if (movesleft < c.length) {
getRect(i, j, r);
hint.setColor(c[movesleft]);
canvas.drawRect(r, hint);
}
}
}
Рис . 4 .6 . Тайлы раскрашены по-разному в зависимости от того,
как много возможных значений могут быть в них введены
Мы и�пол�зуе� три �о�тояния для обозначения от�ут�твия хода� одно�о и двух 
воз�ожных ходов� Е�ли ходов нет� �то означает� что и�рок �делал что�то не так 
и нуждает�я в возврате к более ранне�у �о�тояни� и�ры�


4 .4 . Конец истории 85
Резул�тат будет вы�лядет�� как показано на ри�� 4�6� Найдете ли вы ошибку (или 
ошибки)� допу�енные и�роко�
1
?
Встряска
Что� е�ли пол�зовател� ввел очевидно неверное чи�ло� такое как чи�ло� которое уже 
и�еет�я в блоке три на три? Про�то для забавы �делае� так� чтобы �кран вздра�ивал 
каждый раз при неверно� ходе� Для начала �ы добави� вызов в 
setSelectedTile() 
при 
вводе неправил�но�о чи�ла
.


Достарыңызбен бөлісу:
1   ...   51   52   53   54   55   56   57   58   ...   87




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет