1. Trabalhando com o mouse
O mecanismo de jogo possui dois métodos para trabalhar com o mouse:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
e escreve qualquer código neles. E o próprio mecanismo de jogo irá chamá-los quando o usuário pressionar os botões do mouse.
onMouseLeftClick(int x, int y)
— chamado pelo mecanismo quando você clica com o botão esquerdo do mouse. Como argumentos, recebe as coordenadas da célula do campo de jogo onde ocorreu o clique. A célula superior esquerda possui coordenadas (0,0). Para usar este método, ele deve ser substituído.onMouseRightClick(int x, int y)
– chamado quando você clica com o botão direito. Funciona de forma semelhante ao métodoonMouseLeftClick(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. Trabalhando com o teclado
O mecanismo de jogo possui dois métodos para trabalhar com o teclado:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— chamado quando qualquer tecla do teclado é pressionada. O valor da tecla pressionada (ou Key.UNKNOWN) é passado para o método como argumento-chave.onKeyReleased (Key key)
— chamado quando qualquer tecla do teclado é liberada. O argumento key assume o valor da chave correspondente (ou 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);
}
}
}
Importante! Na versão atual do motor, o tipo Key só pode aceitar um conjunto limitado de valores (9 unidades):
Significado | O que o usuário clicou |
---|---|
Tecla.ENTER | O usuário pressionou o botão Enter |
Chave.ESCAPE | O usuário pressionou o botão Esc |
Tecla.PAUSA | O usuário clicou no botão Pausar |
Chave.SPACE | O usuário pressionou Espaço |
Chave.ESQUERDA | O usuário pressionou a seta para a esquerda |
Chave.DIREITA | O usuário pressionou a seta para a direita |
Chave.UP | O usuário pressionou a seta para cima |
Tecla.PARA BAIXO | O usuário pressionou a seta para baixo |
Chave.DESCONHECIDA | Qualquer chave, exceto as listadas acima |
3. Trabalhando com o cronômetro
Muitos jogos acontecem em tempo real, o que significa que mesmo que o usuário não faça nada, os eventos do jogo ainda serão executados. Para que você possa implementar esses jogos, adicionamos a funcionalidade de cronômetro ao mecanismo de jogo. Funciona mais ou menos assim: você liga o cronômetro e define o período de tempo após o qual ele deve desligar. Por exemplo, 500 milissegundos. Depois disso, a cada meio segundo o Game Engine chama o arquivoonTurnTimer()
. Um número infinito de vezes até que o cronômetro seja desligado. Como usar o cronômetro?
-
Ligue o cronômetro.
Existe um método especial para isso
void setTurnTimer(int timeMs)
. Como argumento, o método toma a duração do intervalo entre as chamadas em milissegundos (1/1000 de segundo). Basta chamá-lo uma vez e o mecanismo de jogo começará a chamar o métodoonTurn()
a cada milissegundos. -
Substitua o método onTurn(int).
Para fazer isso, você precisa declarar um método
void onTurn(int step)
em uma classe herdada da classeGame
. Este método será chamado pelo mecanismo de jogo. Nesse caso, o mecanismo transferirá a cada vez o número de série dessa chamada (1,2,3, ...) para o método. -
Desligue o cronômetro.
Caso o cronômetro não seja mais necessário, quando, por exemplo, o usuário tiver concluído o jogo, ele poderá ser desligado. Para fazer isso você só precisa ligar para o
stopTurnTimer()
. -
Acelere ou altere o cronômetro.
Em alguns jogos, os eventos estão constantemente acelerando, por isso seria conveniente acelerar o nosso cronômetro (reduzir o tempo entre as chamadas). Não há nada mais simples: ligue
setTurnTimer(int timeMs)
novamente, com um novo valor, e o tempo entre as chamadasonTurn()
mudará.
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);
}
}
…
}
Neste exemplo simples, criamos um campo de células 3x3. Em seguida, ativamos um cronômetro que chamará o método a cada meio segundo onTurn()
. A cada meio segundo a cor da célula mudará, mas seu conteúdo não mudará. Após 50 segundos a cor irá parar de mudar. Isso é tudo! Se você quiser saber mais sobre a seção Jogos, aqui estão algumas documentações úteis que podem ajudar:
GO TO FULL VERSION