"Juegos" de JavaRush es una nueva sección que contiene grandes proyectos de tareas para escribir juegos de computadora populares. Realizarlos es más fácil de lo que parece: cada proyecto se divide en dos docenas de subtareas. Al completar las tareas paso a paso, escribirás tu juego y luego podrás agregarle "características" únicas y compartirlo con amigos. CapítuloLos juegos utilizan el sencillo motor de juego JavaRush . En este artículo hablaremos sobre sus características clave y cómo es el proceso de escribir un juego.
  1. Introducción
  2. Inicialización del juego
  3. Creando un campo de juego
  4. programa primitivo
  5. Trabajando con las células del campo de juego.
  6. trabajando con color
  7. Cuadros de diálogo
  8. Métodos de utilidad
  9. Limitaciones del motor de juego

1. Introducción

Hay tres etapas en la implementación de un juego de computadora por parte del desarrollador:
  1. La inicialización del juego consiste en acciones preparatorias: establecer el tamaño y el dibujo del campo de juego, crear e instalar objetos del juego en la posición inicial, así como otras acciones que deben realizarse al comienzo del juego.

  2. Proceso de juego. Esto incluye el movimiento de los objetos del juego, las acciones de los jugadores, la contabilidad de los puntos obtenidos, así como otras acciones que deben realizarse en ciertos intervalos o presionando botones.

  3. Terminando el juego. Esto incluye detener animaciones, informar victoria o derrota y otras acciones que deben realizarse al final del juego.

2. Inicialización del juego

Inicializar el juego consta de sólo dos pasos:

Paso 1: crea la clase principal del juego.

Para desarrollar su juego basado en el motor de juego JavaRush, debe crear una clase y heredarla de la clase Game (com.javarush.engine.cell.Game). Esto le dará a su clase la capacidad de llamar a métodos en el motor del juego y la capacidad al motor de llamar a sus métodos. Ejemplo:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Paso 2: anule el método inicializar().

En este método se realizarán todas las acciones necesarias para iniciar el juego: crear el campo de juego, crear objetos del juego, etc. Sólo necesitas declarar este método en una clase que hereda de la clase Game . Ejemplo:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее un objetoов
    }
}
El método inicialize() es un análogo del método main() : es donde comienza a ejecutarse todo el código escrito para el juego.

3. Crear un campo de juego

Crear un campo de juego también consta de sólo dos pasos.

Paso 1: divide el campo de juego en celdas.

Todo el campo de juego está dividido en celdas por el motor del juego. El tamaño mínimo es 3x3, el máximo es 100x100. La pantalla del juego tiene un tamaño constante. Se puede dividir en diferentes números de células. Por ejemplo, ancho 7 y alto 9:
Capítulo
Tenga en cuenta que la numeración de celdas comienza desde la esquina superior izquierda. Para establecer el tamaño del campo de juego, utilice el método void setScreenSize(int width, int height) . Establece el tamaño del campo de juego. Toma como parámetros el número de celdas en sentido horizontal (ancho) y vertical (alto). Generalmente se llama una vez cuando comienza el juego. Ejemplo:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Al escribir un juego, es posible que necesites obtener el ancho y alto actuales del campo de juego. Los métodos int getScreenWidth() e int getScreenHeight() son útiles para esto .

Paso 2: enciende o apaga la rejilla (opcional).

Si no te gusta la cuadrícula negra que separa las celdas en el campo de juego, puedes desactivarla. El método void showGrid(boolean isShow) activa y desactiva la cuadrícula que separa las celdas. De forma predeterminada, se muestra la cuadrícula. Para desactivarlo, llame a este método con el parámetro falso:
showGrid(false);
Resultado:
Capítulo
Para volver a encender la red, llame a:
showGrid(true);

4. Programa primitivo

Programa de ejemplo:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
En este ejemplo, el tamaño del campo de juego se establece en 3x3, la visualización de la cuadrícula está desactivada y un símbolo "X" naranja del tamaño de media celda se establece en el centro sobre un fondo azul. Esto será lo primero que verá el jugador al iniciar el juego.

5. Trabajar con las células del campo de juego.

El hecho de que podamos dividir el campo de juego en células es fantástico, pero ¿qué podemos hacer con las propias células? Cada celda del campo de juego se puede configurar:
  • color de celda (color de fondo de la celda);
  • texto (texto o número);
  • color de texto;
  • Tamaño del texto como porcentaje relativo al tamaño de la celda.
Consideremos métodos para trabajar con celdas del campo de juego :
  1. void setCellColor(int x, int y, Color color) — establece el color de la celda con coordenadas (x, y):

    setCellColor(0, 0, Color.RED);
    setCellColor(3, 6, Color.BLACK);
    setCellColor(6, 8, Color.NONE);

  2. Color getCellColor(int x, int y) : devuelve el color de la celda con coordenadas (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) : coloca el valor del texto en la celda con coordenadas (x, y):

    setCellValue(3, 3, "text");
    setCellValue(0, 8, "W");
    setCellValue(4, 1, "2222");
    setCellValue(6, 6, "");

  4. String getCellValue(int x, int y) : devuelve el texto contenido en la celda con coordenadas (x, y):

    String s = getCellValue(3, 3);
    System.out.println(getCellValue(4, 1));

  5. void setCellTextSize(int x, int y, int size) : establece el tamaño del contenido en la celda con coordenadas (x, y). tamaño: altura del texto como porcentaje de la altura de la celda:

    setCellTextSize(2 , 0, 70); //  70% высоты клетки

  6. int getCellTextSize(int x, int y) - devuelve el tamaño del contenido en la celda con coordenadas (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) : coloca el valor numérico en la celda con coordenadas (x, y):

    setCellNumber(3, 3, 40);
    setCellNumber(0, 8, -8);
    setCellNumber(4, 1, 2222);
    setCellNumber(6, 6, 0);

  8. int getCellNumber(int x, int y) : devuelve el número contenido en la celda con coordenadas (x, y). Si la celda no contiene un número, devuelve 0:

    int i = getCellNumber(3, 3);
    System.out.println(getCellNumber(4, 1));

  9. void setCellTextColor(int x, int y, Color color) — establece el color del contenido (texto) en la celda con coordenadas (x, y):

    setCellTextColor(2, 1, Color.GREEN);
    setCellTextColor(0, 1, Color.NONE);

  10. Color getCellTextColor(int x, int y) : devuelve el color del contenido (texto) en una celda con coordenadas (x, y):

    Color textColor = getCellTextColor(1, 3);
Para mayor comodidad, existen varios métodos setCellValueEx() con diferentes conjuntos de parámetros:
  1. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value) : establece la celda con coordenadas (x, y), color de fondo cellColor y valor de contenido:

    setCellValueEx(0, 2, Color.BLUE, "56");

  2. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor) : establece la celda con coordenadas (x, y), color de fondo cellColor, valor de contenido y color de contenido textColor:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);

  3. void setCellValueEx(int ​​​​x, int y, Color cellColor, Valor de cadena, Color textColor, int textSize); — establece la celda con coordenadas (x, y), color de fondo cellColor, valor del contenido, color del contenido textColor y tamaño del contenido textSize:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);

6. Trabajar con color

Los colores en el motor del juego están controlados por la enumeración Color , que contiene valores únicos para 148 colores. Y también el valor especial NINGUNO: ausencia de color. Ejemplo de trabajo con color:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
A veces es posible que desee obtener una variedad de todos los colores existentes. Para hacer esto, use el método valores() . Por ejemplo:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Obtener el número de color en la paleta es muy sencillo:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
También puedes obtener un color por su número:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Cuadros de diálogo

Al final del juego, se debe informar al jugador de la victoria o la derrota. Existe un método especial para esto que muestra un cuadro de diálogo en la pantalla del juego:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Aquí:
  • cellColor : color de fondo del cuadro de diálogo;
  • mensaje — texto del mensaje;
  • textColor : color del texto del mensaje;
  • textSize : tamaño del texto del mensaje.
El cuadro de diálogo se cierra solo si el usuario presiona la barra espaciadora.

8. Métodos de utilidad

Los números aleatorios se utilizan a menudo al escribir juegos. Para que sea más fácil obtener números aleatorios, puede utilizar los métodos del motor de chatarra:
  1. int getRandomNumber(int max) : devuelve un número entero aleatorio de 0 a (max–1) inclusive.

  2. int getRandomNumber(int min, int max) : devuelve un número entero aleatorio desde min hasta (max–1) inclusive.

9. Limitaciones del motor del juego

Para ejecutar juegos en el sitio, se traducen a JavaScript en el servidor. En este sentido, surgen algunas restricciones. En particular, al escribir juegos usando el motor JavaRush, no puedes trabajar con archivos ni usar todos los métodos de la clase System , excepto currentTimeMillis() , setOut() , setErr() , arrayscopy() . También puede utilizar los campos err y out . Al violar estas restricciones, el juego, por supuesto, se podrá compilar y ejecutar, pero no será posible publicarlo. Tampoco podrás publicar un juego con bucles infinitos. ¡Eso es todo! Si desea obtener más información sobre la sección Juegos, aquí tiene documentación útil que puede ayudar: