JavaRush /Blog Java /Random-ES /Sección "Juegos" en JavaRush: Manejo de eventos

Sección "Juegos" en JavaRush: Manejo de eventos

Publicado en el grupo Random-ES
"Juegos" de JavaRush es una nueva sección con tareas interesantes y de gran escala para crear tus propias versiones de juegos populares. Es muy sencillo: cada proyecto de juego se divide en subtareas. Complétalos uno por uno y el juego estará listo. Puedes compartirlo en las redes sociales e invitar a amigos a jugar. CapítuloEn este material hablaremos en detalle sobre los métodos de procesamiento de eventos al escribir juegos.

1. Trabajar con el ratón

El motor del juego tiene dos métodos para trabajar con el mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Simplemente declara estos métodos en la clase de juego heredada de Gamey escribe cualquier código en ellos. Y el propio motor del juego los llamará cuando el usuario presione los botones del mouse.
  1. onMouseLeftClick(int x, int y)— llamado por el motor al hacer clic con el botón izquierdo del mouse. Como argumentos recibe las coordenadas de la celda del campo de juego donde se produjo el clic. La celda superior izquierda tiene coordenadas (0,0). Para utilizar este método, se debe anular.

  2. onMouseRightClick(int x, int y)- llamado cuando haces clic derecho. Funciona de manera similar al método onMouseLeftClick(int x, int y).
Ejemplo 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. Trabajar con el teclado

El motor del juego tiene dos métodos para trabajar con el teclado:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Si desea que se produzcan acciones cuando el usuario presiona un botón en el teclado, declare estos métodos en su clase de juego que hereda de Game y escriba su código en ellos. El propio motor del juego los llamará cuando el usuario presione o suelte una tecla del teclado.
  1. onKeyPress (Key key)— se llama cuando se presiona cualquier tecla del teclado. El valor de la tecla presionada (o Key.UNKNOWN) se pasa al método como argumento clave.

  2. onKeyReleased (Key key)— se llama cuando se suelta cualquier tecla del teclado. El argumento clave toma el valor de la clave correspondiente (o Key.UNKNOWN).
Ejemplo 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! En la versión actual del motor, el tipo Clave solo puede aceptar un conjunto limitado de valores (9 piezas):
Significado En qué hizo clic el usuario
Tecla.ENTER El usuario presionó el botón Enter.
Tecla.ESCAPE El usuario presionó el botón Esc.
Tecla.PAUSA El usuario hizo clic en el botón Pausa.
Clave.ESPACIO El usuario presionó Espacio
Tecla.IZQUIERDA El usuario presionó la flecha izquierda
Tecla.DERECHA El usuario presionó la flecha derecha.
Tecla Arriba El usuario presionó la flecha hacia arriba
Tecla.ABAJO El usuario presionó la flecha hacia abajo
Clave.DESCONOCIDA Cualquier clave excepto las enumeradas anteriormente

3. Trabajar con el temporizador

Muchos juegos se desarrollan en tiempo real, lo que significa que incluso si el usuario no hace nada, los eventos del juego se siguen ejecutando. Para que puedas implementar este tipo de juegos, hemos agregado la funcionalidad de temporizador al motor del juego. Funciona de esta manera: enciendes el temporizador y configuras el período de tiempo después del cual debe sonar. Por ejemplo, 500 milisegundos. Después de eso, cada medio segundo Game Engine llama al archivo onTurnTimer(). Un número infinito de veces hasta que se apague el cronómetro. ¿Cómo utilizar el temporizador?
  1. Enciende el cronómetro.

    Existe un método especial para esto void setTurnTimer(int timeMs). Como argumento, el método toma la duración del intervalo entre llamadas en milisegundos (1/1000 de segundo). Basta con llamarlo una vez y el motor del juego comenzará a llamar al método onTurn()cada vez en milisegundos.

  2. Anulamos el método onTurn(int).

    Para hacer esto, debe declarar un método void onTurn(int step)en una clase heredada de la clase Game. Este método será llamado por el motor del juego. En este caso, el motor transferirá cada vez el número de serie de dicha llamada (1,2,3, ...) al método.

  3. Apague el cronómetro.

    Si el cronómetro ya no es necesario, cuando, por ejemplo, el usuario haya completado el juego, se puede desactivar. Para ello sólo necesitas llamar al stopTurnTimer().

  4. Acelera o cambia el cronómetro.

    En algunos juegos los eventos se aceleran constantemente, por lo que sería conveniente acelerar nuestro cronómetro (reducir el tiempo entre llamadas). No hay nada más sencillo: setTurnTimer(int timeMs)vuelve a llamar, con un nuevo valor, y el tiempo entre llamadas onTurn()cambiará.

Ejemplo:
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);

        }
    }}
En este sencillo ejemplo creamos un campo de 3x3 celdas. Luego activamos un temporizador que llamará al método cada medio segundo onTurn(). Cada medio segundo cambiará el color de la celda, pero su contenido no cambiará. Después de 50 segundos, el color dejará de cambiar. ¡Eso es todo! Si desea obtener más información sobre la sección Juegos, aquí tiene documentación útil que puede ayudar:
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION