JavaRush /Blogue Java /Random-PT /Seção "Jogos" no JavaRush: Manipulação de Eventos

Seção "Jogos" no JavaRush: Manipulação de Eventos

Publicado no grupo Random-PT
“Jogos” do JavaRush é uma nova seção com tarefas interessantes e em grande escala para criar suas próprias versões de jogos populares. É simples: cada projeto de jogo é dividido em subtarefas. Complete-os um por um e o jogo estará pronto. Você pode compartilhar nas redes sociais e convidar amigos para jogar. CapítuloNeste material falaremos detalhadamente sobre métodos de processamento de eventos ao escrever jogos.

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);
Você simplesmente declara esses métodos na classe de jogo herdada de Gamee 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.
  1. 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.

  2. onMouseRightClick(int x, int y)– chamado quando você clica com o botão direito. Funciona de forma semelhante ao método onMouseLeftClick(int x, int y).
Exemplo de uso de métodos:
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);
Se você deseja que ações ocorram quando o usuário pressiona um botão no teclado, declare esses métodos em sua classe de jogo que herda de Game e escreva seu código neles. O próprio mecanismo de jogo irá chamá-los quando o usuário pressionar ou soltar uma tecla do teclado.
  1. 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.

  2. onKeyReleased (Key key)— chamado quando qualquer tecla do teclado é liberada. O argumento key assume o valor da chave correspondente (ou Key.UNKNOWN).
Exemplo de uso de métodos:
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 arquivo onTurnTimer(). Um número infinito de vezes até que o cronômetro seja desligado. Como usar o cronômetro?
  1. 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étodo onTurn()a cada milissegundos.

  2. Substitua o método onTurn(int).

    Para fazer isso, você precisa declarar um método void onTurn(int step)em uma classe herdada da classe Game. 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.

  3. 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().

  4. 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 chamadas onTurn()mudará.

Exemplo:
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:
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION