
1. Lucrul cu mouse-ul
Motorul de joc are două metode de lucru cu mouse-ul:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
și adăugați orice cod doriți la ele. Motorul jocului le va apela atunci când utilizatorul face clic pe butoanele mouse-ului.
-
onMouseLeftClick(int x, int y)
— apelat de motor când se face clic pe butonul stâng al mouse-ului. Parametrii săi sunt coordonatele celulei terenului de joc în care a avut loc clicul. Celula din stânga sus are coordonatele (0, 0). Trebuie să anulați această metodă pentru a o utiliza. -
onMouseRightClick(int x, int y)
— apelat când se face clic pe butonul din dreapta al mouse-ului. Această metodă funcționează caonMouseLeftClick(int x, int y)
metoda.
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() {
// Set the size of the playing field to 3x3
setScreenSize(3, 3);
// Paint the playing field white
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) {
// Set "X" in the cell where the left mouse click occurred
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell where the right mouse click occurred
setCellValue(x, y, "");
}
}
2. Lucrul cu tastatura
Motorul de joc are două metode de lucru cu tastatura:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— apelat când este apăsată orice tastă. Parametrul cheie este tasta apăsată (sau Key.NEKNOWN). -
onKeyReleased(Key key)
— apelat când se eliberează orice tastă. Parametrul cheie este cheia corespunzătoare (sau 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() {
// Set the size of the playing field to 3x3
setScreenSize(3, 3);
// Paint the playing field white
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) {
// When the space bar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the space bar is released, the center cell changes back to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
Important! În versiunea actuală a motorului de joc, tipul de cheie are un set limitat de nouă valori:Valoare | Tasta apăsată de utilizator |
---|---|
Tasta.ENTER | Utilizatorul a apăsat pe Enter |
Cheie.ESCAPE | Utilizatorul a apăsat pe Esc |
Tasta.PAUZĂ | Utilizatorul a apăsat pe Pauză |
Cheie.SPAȚIU | Utilizatorul a apăsat pe Space |
Tasta.STÂNGA | Utilizatorul a apăsat tasta săgeată stânga |
Cheie.DREPTA | Utilizatorul a apăsat tasta săgeată dreapta |
Tasta.SUS | Utilizatorul a apăsat tasta săgeată în sus |
Tasta în jos | Utilizatorul a apăsat tasta jos |
Cheie.NECUNOSCUT | Utilizatorul a apăsat o altă tastă decât cele de mai sus |
3. Lucrul cu cronometrul
Multe jocuri se petrec în timp real, adică chiar dacă utilizatorul nu face nimic, evenimentele apar în continuare în joc. Pentru a vă permite să implementați astfel de jocuri, am adăugat un cronometru motorului de joc. Funcționează cam așa: porniți cronometrul și setați intervalul cronometrului. De exemplu, 500 de milisecunde. Apoi, la fiecare jumătate de secundă, motorul de joc apeleazăonTurnTimer()
metoda. Din nou și din nou pentru totdeauna - până când cronometrul este oprit. Deci, cum folosești cronometrul?
-
Porniți cronometrul.
Pentru a face acest lucru, există o metodă specială. Metoda ia ca argument intervalul dintre apeluri în milisecunde (1 milisecundă = 1/1000 secundă). Trebuie să-l apelați o singură dată, iar motorul de joc va începe să apeleze metoda de fiecare dată în milisecunde.
void setTurnTimer(int timeMs)
onTurn()
-
Ignorați metoda onTurn(int).
Pentru a face acest lucru, trebuie să declarați o metodă în clasa care moștenește . Această metodă va fi apelată de motorul jocului. Mai mult, cu fiecare apel motorul de joc va transmite metodei un identificator secvenţial pentru apel (1, 2, 3, …).
void onTurn(int step)
Game
-
Opriți cronometrul.
Dacă cronometrul nu mai este necesar, de exemplu, când utilizatorul finalizează jocul, îl puteți dezactiva. Pentru a face acest lucru, trebuie pur și simplu să apelați metoda.
stopTurnTimer()
-
Accelerați sau schimbați cronometrul.
În unele jocuri, rata cu care apar evenimentele se accelerează constant, așa că ar fi convenabil să ne grăbim cronometrul (reducerea timpului dintre apeluri). Nimic nu ar putea fi mai ușor: apelați
setTurnTimer(int timeMs)
din nou cu o nouă valoare, iar timpul dintreonTurn()
apeluri se va schimba.
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Create a playing field that is 3 cells x 3 cells
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer, the interval between calls is 500ms.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // If 100 calls have been made, turn off the timer
}
if (step % 2 == 1) {
// If this call is odd, set the cell background to red
setCellColor(1, 1, Color.RED);
}
else {
// If this call is even, set the cell background to blue
setCellColor(1, 1, Color.BLUE);
}
}
…
}
În acest exemplu simplu, am creat un câmp care este de 3 celule x 3 celule. Apoi am pornit un cronometru care va apela onTurn()
metoda la fiecare jumătate de secundă. La fiecare jumătate de secundă, culoarea celulei se va schimba, dar conținutul acesteia nu se va schimba. După 50 de secunde, culoarea nu se va mai schimba. Asta este tot pentru acum! Dacă doriți să aflați mai multe despre secțiunea „Jocuri”, iată o documentație utilă care vă poate ajuta:
GO TO FULL VERSION