1. Робота з мишкою
Для роботи з мишкою у ігрового двигуна є два способи:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
, і пишіть у них будь-який код. А ігровий движок сам їх викликатиме, коли користувач натискає кнопки мишки.
onMouseLeftClick(int x, int y)
- Викликається двигуном при кліку лівою кнопкою миші. Як аргументи отримує координати клітини ігрового поля, де стався клік. Ліва верхня комірка має координати (0,0). Для використання цього методу його потрібно перевизначити.onMouseRightClick(int x, int y)
- Викликається при кліку правою кнопкою миші. Працює аналогічно методуonMouseLeftClick(int x, int y)
.
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
setCellColor(x, y, Color.WHITE);
}
}
}
@Override
public void onMouseLeftClick(int x, int y) {
// Ставим символ "X" в клетку по которой кликнули левой кнопкой мыши
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Очищаем клетку по которой кликнули правой кнопкой мыши
setCellValue(x, y, "");
}
}
2. Робота з клавіатурою
Для роботи з клавіатурою у ігрового двигуна є два способи:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
- Викликається при натисканні будь-якої клавіші клавіатури. Як аргумент key метод передається значення натиснутої клавіші (або Key.UNKNOWN).onKeyReleased (Key key)
- Викликається при відпусканні будь-якої клавіші клавіатури. Як аргумент key отримує значення відповідної клавіші (або Key.UNKNOWN).
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
setCellColor(x, y, Color.WHITE);
}
}
}
@Override
public void onKeyPress(Key key) {
// При нажатии пробела, центральная клетка становится желтой
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// При отпускании пробела, центральной клетке возвращается белый цвет
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
Важливо! У поточній версії движка тип Key може приймати лише обмежений набір значень (9 шт):
Значення | Що натиснув користувач |
---|---|
Key.ENTER | Користувач натиснув кнопку Enter |
Key.ESCAPE | Користувач натиснув кнопку Esc |
Key.PAUSE | Користувач натиснув кнопку Pause |
Key.SPACE | Користувач натиснув Пробіл |
Key.LEFT | Користувач натиснув Стрілку Вліво |
Key.RIGHT | Користувач натиснув стрілку праворуч |
Key.UP | Користувач натиснув Стрілку Вгору |
Key.DOWN | Користувач натиснув Стрілку Вниз |
Key.UNKNOWN | Будь-яку клавішу, крім перерахованих вище |
3. Робота з таймером
Багато ігор відбуваються в реальному часі, тобто навіть якщо користувач нічого не робить, події в грі все одно виконуються. Щоб ви могли реалізовувати такі ігри, ми додали до ігрового двигуна роботу з таймером. Працює це приблизно так: ви включаєте таймер і виставляєте часовий відрізок, через який він має спрацьовувати. Наприклад, 500 мілісекунд. Після цього кожні півсекунди Ігровий Двигун викликає методonTurnTimer()
. Нескінченне число разів, доки таймер не вимкнуть. Як користуватися таймером?
-
Включаємо таймер.
Для цього є спеціальний метод
void setTurnTimer(int timeMs)
. Як аргумент метод приймає тривалість інтервалу між викликами в мілісекундах (1/1000 секунди). Досить один раз викликати його, і ігровий двигун почне викликати методonTurn()
кожні timeMs мілісекунд. -
Перевизначаємо метод onTurn(int).
Для цього необхідно оголосити метод
void onTurn(int step)
у класі, успадкованому від класуGame
. Цей спосіб буде викликатися ігровим двигуном. При цьому двигун щоразу передаватиме в спосіб порядковий номер такого виклику (1,2,3, …). -
Вимикаємо таймер.
Якщо таймер більше не потрібний, коли, наприклад, користувач пройшов гру, його можна вимкнути. Для цього потрібно просто викликати метод
stopTurnTimer()
. -
Прискорюємо чи міняємо таймер.
У деяких іграх події постійно прискорюються, тому зручно було б прискорювати наш таймер (зменшувати час між викликами). Немає нічого простішого: викликайте
setTurnTimer(int timeMs)
знову, з новим значенням, і час між викликамиonTurn()
зміниться.
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Создаем игровое поле 3x3 клетки
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); //Включаем таймер, интервал между вызовами – 500мс.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // если прошло 100 тактов, выключаем таймер
}
if (step % 2 == 1) {
// Если данный такт нечётный, установить клетке красный фон
setCellColor(1, 1, Color.RED);
} else {
//если данный такт чётный, установить клетке синий фон
setCellColor(1, 1, Color.BLUE);
}
}
…
}
У цьому прикладі ми створабо поле розміром 3x3 клітини. Потім включабо таймер, який кожні півсекунди викликатиме метод onTurn()
. Кожні півсекунди змінюватиметься колір клітини, при цьому її контент не зміниться. Через 50 секунд колір перестане змінюватися. На цьому все! Якщо ви хочете дізнатися про розділ "Ігри" більше, ось корисна документація, яка може допомогти.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ