1. Praca z myszką
Silnik gry posiada dwie metody pracy z myszą:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
i piszesz w nich dowolny kod. A sam silnik gry wywoła je, gdy użytkownik naciśnie przyciski myszy.
onMouseLeftClick(int x, int y)
— wywoływane przez silnik po kliknięciu lewym przyciskiem myszy. Jako argumenty otrzymuje współrzędne komórki pola gry, w której nastąpiło kliknięcie. Lewa górna komórka ma współrzędne (0,0). Aby skorzystać z tej metody, należy ją zastąpić.onMouseRightClick(int x, int y)
— wywoływane po kliknięciu prawym przyciskiem myszy. Działa podobnie jak metodaonMouseLeftClick(int x, int y)
.
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.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. Praca z klawiaturą
Silnik gry posiada dwie metody pracy z klawiaturą:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— wywoływane po naciśnięciu dowolnego klawisza klawiatury. Wartość naciśniętego klawisza (lub Key.UNKNOWN) jest przekazywana do metody jako argument klucza.onKeyReleased (Key key)
— wywoływane po zwolnieniu dowolnego klawisza klawiatury. Argument klucza przyjmuje wartość odpowiedniego klucza (lub Key.UNKNOWN).
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.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);
}
}
}
Ważny! W aktualnej wersji silnika typ klucza może przyjmować tylko ograniczony zestaw wartości (9 szt.):
Oznaczający | Co kliknął użytkownik |
---|---|
Klawisz ENTER | Użytkownik nacisnął przycisk Enter |
Klucz.ESCAPE | Użytkownik nacisnął przycisk Esc |
Klawisz.PAUZA | Użytkownik kliknął przycisk Wstrzymaj |
Klucz.SPACJA | Użytkownik nacisnął spację |
Klawisz.LEWY | Użytkownik nacisnął strzałkę w lewo |
Klucz.PRAWY | Użytkownik nacisnął strzałkę w prawo |
Klucz.UP | Użytkownik nacisnął strzałkę w górę |
Klawisz.DÓŁ | Użytkownik nacisnął strzałkę w dół |
Klucz.NIEZNANY | Dowolny klucz z wyjątkiem tych wymienionych powyżej |
3. Praca z timerem
Wiele gier toczy się w czasie rzeczywistym, co oznacza, że nawet jeśli użytkownik nic nie zrobi, zdarzenia w grze będą nadal wykonywane. Aby umożliwić wdrażanie takich gier, do silnika gry dodaliśmy funkcję timera. Działa to mniej więcej tak: włączasz timer i ustawiasz czas, po którym ma się wyłączyć. Na przykład 500 milisekund. Następnie co pół sekundy silnik gry wywołuje plikonTurnTimer()
. Nieskończoną liczbę razy, aż do wyłączenia timera. Jak korzystać z timera?
-
Włącz minutnik.
Jest na to specjalna metoda
void setTurnTimer(int timeMs)
. Jako argument metoda przyjmuje czas trwania interwału między wywołaniami w milisekundach (1/1000 sekundy). Wystarczy raz ją wywołać, a silnik gry zacznie wywoływać metodęonTurn()
za każdym razem, gdy upłynie kilka milisekund. -
Zastąp metodę onTurn(int).
Aby to zrobić, musisz zadeklarować metodę
void onTurn(int step)
w klasie odziedziczonej z klasyGame
. Ta metoda zostanie wywołana przez silnik gry. W takim przypadku silnik każdorazowo przekaże do metody numer seryjny takiego wywołania (1,2,3,...). -
Wyłącz minutnik.
Jeżeli licznik czasu nie jest już potrzebny, gdy np. użytkownik ukończył grę, można go wyłączyć. Aby to zrobić, wystarczy zadzwonić do
stopTurnTimer()
. -
Przyspiesz lub zmień timer.
W niektórych grach wydarzenia stale przyspieszają, więc wygodnie byłoby przyspieszyć nasz timer (skrócić czas między rozmowami). Nie ma nic prostszego: zadzwoń
setTurnTimer(int timeMs)
ponownie, z nową wartością, a czas pomiędzy połączeniamionTurn()
ulegnie zmianie.
import com.javarush.engine.cell.Color;
import com.javarush.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);
}
}
…
}
W tym prostym przykładzie utworzyliśmy pole komórek 3x3. Następnie włączyliśmy timer, który będzie wywoływał metodę co pół sekundy onTurn()
. Co pół sekundy zmieni się kolor komórki, ale jej zawartość nie ulegnie zmianie. Po 50 sekundach kolor przestanie się zmieniać. To wszystko! Jeśli chcesz dowiedzieć się więcej o sekcji Gry, oto przydatna dokumentacja, która może Ci pomóc:
GO TO FULL VERSION