
1. Arbejde med musen
Spilmotoren har to metoder til at arbejde med musen:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
, og tilføjer enhver kode, du ønsker, til dem. Spillemaskinen kalder dem, når brugeren klikker på museknapperne.
-
onMouseLeftClick(int x, int y)
— kaldes af motoren, når der klikkes på venstre museknap. Dens parametre er koordinaterne for cellen på spillefeltet, hvor klikket fandt sted. Den øverste venstre celle har koordinater (0, 0). Du skal tilsidesætte denne metode for at bruge den. -
onMouseRightClick(int x, int y)
— kaldes, når der klikkes på højre museknap. Denne metode fungerer somonMouseLeftClick(int x, int y)
metoden.
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. Arbejde med tastaturet
Spilmotoren har to metoder til at arbejde med tastaturet:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— kaldes, når der trykkes på en vilkårlig tast. Nøgleparameteren er den nedtrykte tast (eller Key.UNKNOWN). -
onKeyReleased(Key key)
— kaldes, når en tast slippes. Nøgleparameteren er den tilsvarende nøgle (eller 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);
}
}
}
Vigtig! I den aktuelle version af spilmotoren har nøgletypen et begrænset sæt på ni værdier:Værdi | Tast trykket af brugeren |
---|---|
Tast.ENTER | Brugeren trykkede på Enter |
Key.ESCAPE | Brugeren trykkede på Esc |
Tast.PAUSE | Brugeren trykkede på Pause |
Nøgle.MELLEMRUM | Brugeren trykkede på mellemrumstasten |
Tast.VENSTRE | Brugeren trykkede på venstre piletast |
Nøgle.HØJRE | Brugeren trykkede på højre piletast |
Tast.OP | Brugeren trykkede på pil op-tasten |
Tast.NED | Brugeren trykkede på ned-tasten |
Nøgle.UKENDT | Brugeren trykkede på en anden tast end ovenstående |
3. Arbejde med timeren
Mange spil foregår i realtid, dvs. selvom brugeren ikke gør noget, sker der stadig begivenheder i spillet. For at gøre det muligt for dig at implementere sådanne spil, har vi tilføjet en timer til spilmotoren. Det fungerer sådan her: du tænder for timeren og indstiller timerintervallet. For eksempel 500 millisekunder. Derefter kalder spilmotorenonTurnTimer()
metoden hvert halve sekund. Igen og igen for evigt - indtil timeren slukkes. Så hvordan bruger du timeren?
-
Tænd timeren.
For at gøre dette er der en speciel metode. Metoden tager som argument intervallet mellem opkald i millisekunder (1 millisekund = 1/1000 sekund). Du behøver kun at kalde det én gang, og spilmotoren vil begynde at kalde metoden hver gang i millisekunder.
void setTurnTimer(int timeMs)
onTurn()
-
Tilsidesæt onTurn(int)-metoden.
For at gøre dette skal du erklære en metode i klassen, der arver . Denne metode vil blive kaldt af spilmotoren. Hvad mere er, med hvert opkald vil spilmotoren videregive en sekventiel identifikator for opkaldet til metoden (1, 2, 3, …).
void onTurn(int step)
Game
-
Sluk timeren.
Hvis timeren ikke længere er nødvendig, for eksempel når brugeren fuldfører spillet, kan du slå den fra. For at gøre dette skal du blot kalde metoden.
stopTurnTimer()
-
Accelerer eller skift timeren.
I nogle spil accelererer hastigheden, hvormed hændelser sker konstant, så det ville være praktisk at fremskynde vores timer (reducere tiden mellem opkald). Intet kunne være nemmere: Ring
setTurnTimer(int timeMs)
igen med en ny værdi, og tiden mellemonTurn()
opkaldene ændres.
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);
}
}
…
}
I dette simple eksempel oprettede vi et felt, der er 3 celler x 3 celler. Så startede vi en timer, der kalder onTurn()
metoden hvert halve sekund. Hvert halve sekund ændres cellefarven, men dens indhold ændres ikke. Efter 50 sekunder vil farven ikke længere ændre sig. Det er alt for nu! Hvis du vil lære mere om afsnittet "Spil", er her noget nyttig dokumentation, der kan hjælpe:
GO TO FULL VERSION