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);
Game
y escribe cualquier código en ellos. Y el propio motor del juego los llamará cuando el usuario presione los botones del mouse.
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.onMouseRightClick(int x, int y)
- llamado cuando haces clic derecho. Funciona de manera similar al 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. 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);
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.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).
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 archivoonTurnTimer()
. Un número infinito de veces hasta que se apague el cronómetro. ¿Cómo utilizar el temporizador?
-
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étodoonTurn()
cada vez en milisegundos. -
Anulamos el método onTurn(int).
Para hacer esto, debe declarar un método
void onTurn(int step)
en una clase heredada de la claseGame
. 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. -
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()
. -
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 llamadasonTurn()
cambiará.
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:
GO TO FULL VERSION