JavaRush /Java блог /Random UA /Розділ "Ігри" на JavaRush: Ігровий рушій

Розділ "Ігри" на JavaRush: Ігровий рушій

Стаття з групи Random UA
"Ігри" від JavaRush - новий розділ, який містить великі завдання-проекти з написання популярних комп'ютерних ігор. Робити їх простіше, ніж здається: кожен проект поділено на два десятки підзавдань. Виконуючи завдання крок за кроком, ви напишете свою гру, а потім зможете додати до неї унікальні «фічі» та поділитися нею з друзями. РозділІгри використовують простий ігровий движок JavaRush . У цьому матеріалі розповімо про його ключові можливості і про те, як виглядає процес написання гри.
  1. Вступ
  2. Ініціалізація гри
  3. Створення ігрового поля
  4. Примітивна програма
  5. Робота з клітинами ігрового поля
  6. Робота з кольором
  7. Діалогові вікна
  8. Утилітні методи
  9. Обмеження ігрового рушія

1. Введення

У реалізації комп'ютерної гри з боку розробника є три стадії:
  1. Ініціалізація гри - це підготовчі дії: встановлення розміру та промальовування ігрового поля, створення та встановлення ігрових об'єктів у початкове положення, а також інші дії, які необхідно виконати на початку гри.

  2. Ігровий процес. До нього відносяться рух ігрових об'єктів, дії гравця, облік зароблених очок, а також інші дії, які необхідно виконувати з певною періодичністю або натисканням кнопок.

  3. Завершення гри. До нього відносяться зупинка анімації, повідомлення про перемогу чи поразку, а також інші дії, які необхідно виконати наприкінці гри.

2. Ініціалізація гри

Ініціалізація гри складається лише з двох кроків:

Крок 1: створюємо основний клас гри.

Для розробки своєї гри на основі ігрового движка JavaRush вам потрібно створити клас і успадкувати його від класу Game (com.codegym.engine.cell.Game). Це дасть вашому класу можливість викликати методи ігрового движка, а движку - викликати ваші методи. Приклад:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Крок 2: перевизначаємо метод initialize().

У цьому методі відбуватимуться всі дії, необхідні старту гри: створення ігрового поля, створення ігрових об'єктів, тощо. Вам потрібно просто оголосити цей метод у класі, успадкованому від класу Game . Приклад:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее об'єктов
    }
}
Метод initialize() - це аналог методу main() : саме з нього починає виконуватися весь код, написаний для гри.

3. Створення ігрового поля

Створення ігрового поля теж складається лише з двох кроків.

Крок 1: ділимо ігрове поле на клітини.

Все ігрове поле ділиться ігровим рушієм на клітини. Мінімальний розмір – 3x3, максимальний – 100x100. Ігровий екран має постійний розмір. Його можна поділити на різну кількість клітин. Наприклад, ширина 7 і висота 9:
Розділ
Зверніть увагу, що нумерація клітин починається з лівого верхнього кута. Для встановлення розміру ігрового поля використовуйте метод void setScreenSize(int width, int height) . Він визначає розмір ігрового поля. Як параметри приймає кількість клітин по горизонталі (width) і по вертикалі (height). Зазвичай він викликається один раз під час запуску гри. Приклад:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
При написанні гри може знадобитися отримати поточну ширину та висоту ігрового поля. Для цього знадобляться методи int getScreenWidth() та int getScreenHeight() .

Крок 2: вмикаємо або вимикаємо сітку (необов'язково).

Якщо вам не подобається, що на ігровому полі відображається чорна сітка, що розділяє комірки, її можна вимкнути. Метод void showGrid(boolean isShow) включає та вимикає сітку, що розділяє клітини. За промовчанням сітка відображається. Щоб її вимкнути, викличте цей метод із параметром false:
showGrid(false);
Результат:
Розділ
Щоб знову увімкнути сітку, викличте:
showGrid(true);

4. Примітивна програма

Приклад програми:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
У цьому прикладі ігровому полю визначається розмір 3х3, відключається відображення сітки і по центру встановлюється помаранчевий символ «Х» розміром у половину клітини на синьому тлі. Це буде перше, що побачить гравець під час запуску гри.

5. Робота з клітинами ігрового поля

Те, що ми можемо поділити ігрове поле на осередки - це добре, а що ми можемо робити з самими осередками? Кожній клітинці ігрового поля можна задати:
  • колір клітини (колір фону осередку);
  • текст (текст чи число);
  • колір тексту;
  • розмір тексту у відсотках щодо розміру клітини.
Розглянемо методи для роботи з клітинами ігрового поля :
  1. setCellColor(int x, int y, Color color) - встановлює клітині з координатами (x, y) колір color:

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

  2. Color getCellColor(int x, int y) - повертає колір клітини з координатами (x, y):

    Color myColor = getCellColor(2, 0);

  3. setCellValue(int x, int y, String value) — поміщає в клітинку з координатами (x, y) текст value:

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

  4. String getCellValue(int x, int y) - повертає текст, що міститься в клітині з координатами (x, y):

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

  5. setCellTextSize(int x, int y, int size) — встановлює розмір контенту в клітині з координатами (x, y). size – висота тексту у відсотках від висоти клітини:

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

  6. int getCellTextSize(int x, int y) - повертає розмір контенту в клітині з координатами (x, y):

    int size = getCellTextSize(2 , 0);

  7. setCellNumber(int x, int y, int value) — поміщає в клітинку з координатами (x, y) число value:

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

  8. int getCellNumber(int x, int y) - повертає число, що міститься в клітині з координатами (x, y). Якщо в клітині міститься не число, повертає 0:

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

  9. setCellTextColor(int x, int y, Color color) - встановлює колір контенту (тексту) в клітці з координатами (x, y):

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

  10. Color getCellTextColor(int x, int y) — повертає колір контенту (тексту) у клітині з координатами (x, y):

    Color textColor = getCellTextColor(1, 3);
Для зручності є кілька методів setCellValueEx() з різним набором параметрів:
  1. setCellValueEx(int ​​x, int y, Color cellColor, String value) - встановлює клітині з координатами (x, y) колір фону cellColor і контент value:

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

  2. setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor) — встановлює клітині з координатами (x, y) колір фону cellColor, контент value і колір контенту textColor:

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

  3. void setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor, int textSize); — встановлює клітині з координатами (x, y) колір тла cellColor, контент value, колір контенту textColor та розмір контенту textSize:

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

6. Робота з кольором

За кольори в ігровому движку відповідає enum Color , який містить унікальні значення для 148 кольорів. А також спеціальне значення NONE – відсутність кольору. Приклад роботи з кольором:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Іноді може знадобитися масив всіх існуючих кольорів. Для цього використовуйте метод values() . Наприклад:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Отримати номер кольору на панелі дуже просто:
Color color = Color.RED;
int redIndex = color.ordinal()
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ