
1. Trabalhando com o mouse
O motor de jogo tem dois métodos para trabalhar com o mouse:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
e adiciona qualquer código que desejar a eles. O mecanismo do jogo os chamará quando o usuário clicar nos botões do mouse.
-
onMouseLeftClick(int x, int y)
— chamado pelo mecanismo quando o botão esquerdo do mouse é clicado. Seus parâmetros são as coordenadas da célula do campo de jogo onde ocorreu o clique. A célula superior esquerda tem coordenadas (0, 0). Você precisa substituir esse método para usá-lo. -
onMouseRightClick(int x, int y)
— chamado quando o botão direito do mouse é clicado. Este método funciona como oonMouseLeftClick(int x, int y)
método.
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. Trabalhando com o teclado
O motor do jogo tem dois métodos para trabalhar com o teclado:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— chamado quando qualquer tecla é pressionada. O parâmetro chave é a tecla pressionada (ou Key.UNKNOWN). -
onKeyReleased(Key key)
— chamado quando qualquer tecla é liberada. O parâmetro chave é a chave correspondente (ou 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);
}
}
}
Importante! Na versão atual do mecanismo de jogo, o tipo de chave tem um conjunto limitado de nove valores:Valor | Tecla pressionada pelo usuário |
---|---|
Chave.ENTER | O usuário pressionou Enter |
Key.ESCAPE | O usuário pressionou Esc |
Key.PAUSE | O usuário pressionou Pausa |
Chave.ESPAÇO | O usuário pressionou espaço |
Chave ESQUERDA | O usuário pressionou a tecla de seta para a esquerda |
Chave.DIREITA | O usuário pressionou a tecla de seta para a direita |
Key.UP | O usuário pressionou a tecla de seta para cima |
Tecla.PARA BAIXO | O usuário pressionou a tecla para baixo |
Chave.DESCONHECIDA | O usuário pressionou uma tecla diferente das acima |
3. Trabalhando com o cronômetro
Muitos jogos acontecem em tempo real, ou seja, mesmo que o usuário não faça nada, os eventos ainda ocorrem no jogo. Para permitir que você implemente esses jogos, adicionamos um cronômetro ao mecanismo do jogo. Funciona mais ou menos assim: você liga o cronômetro e define o intervalo do cronômetro. Por exemplo, 500 milissegundos. Então, a cada meio segundo, o mecanismo do jogo chama oonTurnTimer()
método. De novo e de novo para sempre - até que o cronômetro seja desligado. Então, como você usa o timer?
-
Ligue o temporizador.
Para fazer isso, existe um método especial. O método toma como argumento o intervalo entre as chamadas em milissegundos (1 milissegundo = 1/1000 segundo). Você só precisa chamá-lo uma vez e o mecanismo do jogo começará a chamar o método a cada milissegundos.
void setTurnTimer(int timeMs)
onTurn()
-
Substitua o método onTurn(int).
Para fazer isso, você precisa declarar um método na classe que herda . Este método será chamado pelo mecanismo do jogo. Além do mais, a cada chamada o game engine passará para o método um identificador sequencial para a chamada (1, 2, 3, …).
void onTurn(int step)
Game
-
Desligue o temporizador.
Se o cronômetro não for mais necessário, por exemplo, quando o usuário terminar o jogo, você poderá desligá-lo. Para fazer isso, basta chamar o método.
stopTurnTimer()
-
Acelerar ou alterar o temporizador.
Em alguns jogos, a taxa de ocorrência dos eventos é constantemente acelerada, por isso seria conveniente acelerar nosso cronômetro (reduzir o tempo entre as chamadas). Nada poderia ser mais fácil: ligue
setTurnTimer(int timeMs)
novamente com um novo valor e o tempo entreonTurn()
as chamadas mudará.
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);
}
}
…
}
Neste exemplo simples, criamos um campo com 3 células x 3 células. Em seguida, iniciamos um timer que chamará o onTurn()
método a cada meio segundo. A cada meio segundo, a cor da célula mudará, mas seu conteúdo não mudará. Após 50 segundos, a cor não mudará mais. É tudo por agora! Se você quiser saber mais sobre a seção "Jogos", aqui está uma documentação útil que pode ajudar:
GO TO FULL VERSION