JavaRush/Курсы/Java Syntax Pro/Детальный разбор Игрового Движка

Детальный разбор Игрового Движка

Открыта

1. Работа с клетками игрового поля

То, что мы можем поделить игровое поле на ячейки — это отлично. А что мы можем делать с самими ячейками?

Каждой клетке игрового поля можно задать:

  • цвет клетки (цвет фона ячейки);
  • текст (текст или число);
  • цвет текста;
  • размер текста в процентах относительно размера клетки.

Рассмотрим методы для работы с клетками игрового поля:

void 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);

Color getCellColor(int x, int y) – возвращает цвет клетки с координатами (x, y).

Пример:

Color myColor = getCellColor(2, 0);

void 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, "");

String getCellValue(int x, int y) – возвращает текст, содержащийся в клетке с координатами (x, y).

Примеры:

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

void setCellTextSize(int x, int y, int size) – устанавливает размер контента в клетке с координатами (x, y). size — высота текста в процентах от высоты клетки.

Пример:

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

int getCellTextSize(int x, int y) – возвращает размер контента в клетке с координатами (x, y).

Пример:

int size = getCellTextSize(2 , 0);

void 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);

int getCellNumber(int x, int y) – возвращает число, содержащееся в клетке с координатами (x, y). Если в клетке содержится не число, возвращает 0.

Примеры:

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

void setCellTextColor(int x, int y, Color color) – устанавливает цвет контента (текста) в клетке с координатами (x, y).

Примеры:

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

Color getCellTextColor(int x, int y) – возвращает цвет контента (текста) в клетке с координатами (x, y).

Пример:

Color textColor = getCellTextColor(1, 3);

Для удобства есть несколько методов setCellValueEx() с разным набором параметров:

void setCellValueEx(int x, int y, Color cellColor, String value) – устанавливает клетке с координатами (x, y) цвет фона cellColor и контент value.

Пример:

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

void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) – устанавливает клетке с координатами (x, y) цвет фона cellColor, контент value и цвет контента textColor.

Пример:

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

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


2. Работа с цветом

У игрового движка JavaRush есть специальный тип Color, который содержит уникальные значения для 148 цветов. А также специальное значение NONE (отсутствие цвета).

Пример работы с цветом:

Color myColor = Color.WHITE;  // переменной myColor присваивается белый цвет.
Color redColor = Color.RED; // переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; // переменной blueColor присваивается синий.

Закрасить ячейку в красный цвет можно командой:

setCellColor(0, 2, Color.RED);

Проверить, что ячейка определенного цвета, можно командой типа:

if (getCellColor(0,2) == Color.GREEN)
{
}

Иногда вам может понадобиться получить массив всех существующих цветов. Для этого используйте метод values().

Например:

// переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();

Получить номер цвета в палитре цветов очень просто: для этого нужно использовать метод ordinal():

Color color = Color.RED;
int redIndex = color.ordinal();  // Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); // Номер синего цвета

Также вы легко можете получить цвет по его номеру:

// переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];


3. Диалоговые окна

В конце игры игроку нужно сообщить о победе или поражении. Для этого и других случаев у игрового движка JavaRush есть специальный метод
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize), который выводит на игровой экран диалоговое окно с сообщением message. Параметры этого метода такие:

  • cellColor – цвет фона диалогового окна
  • message – текст сообщения
  • textColor – цвет текста сообщения
  • textSize – размер текста сообщения

Диалоговое окно закрывается само, если пользователь нажал пробел или кликнул по нему мышкой.

Пример вызова такого метода:

// отображаем на экране диалоговое окно с сообщением в нем
showMessageDialog(Color.BLACK, "EPIC FAIL", Color.RED, 80);


4. Утилитные методы

При написании игр часто используются случайные числа. Чтобы упростить получение случайных чисел, можно использовать утилитные методы движка:

int getRandomNumber(int max) — возвращает случайное целое число от 0 до (max–1) включительно.

int getRandomNumber(int min, int max) – возвращает случайное целое число от min до (max–1) включительно.


5. JDK 11+

Во время запуска из IntelliJ IDEA класса, который наследуется от класса Game, можно получить такую ошибку:

Error: JavaFX runtime components are missing, and are required to run this application

В этом случае для каждого такого класса нужно один раз выполнить:
  1. Откройте меню Run → EditConfiguration
  2. Пропишите VM options:
    --module-path ./lib/javafx-sdk-16/lib --add-modules=javafx.controls,javafx.fxml,javafx.base

    ВНИМАНИЕ:

    В последних версиях IntelliJ IDEA поле VM options не отображается по умолчанию. Для его отображения нажми Alt + V

  3. Нажимайте: Apply → OK
  4. Запускайте игру.
Комментарии (204)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grigoryvvv
Уровень 28
Expert
3 августа, 14:12
03.08.2026 / 20 уровень
Win32Trojan
Уровень 2
3 августа, 19:06
Win32Trojan
Уровень 2
2 августа, 20:48
2026-02-08 / level 20 / 1649 материи Начинаю светить фонарём в небо, где изображение летучей мыши.
Gray
Уровень 37
30 июня, 16:46
int sum; int count; public void showResult() { for (int i = 0; i < 10; i++){ for (int j = 0; j < 10; j++) { if (getCellColor(i,j) == Color.GREEN){ count++; sum += getCellNumber(i,j); } } } printSum(sum); printCountOfGreenCells(count); }
Real User
Уровень 40
20 апреля, 07:12
Т.е. вот так неправильно
int wide = getScreenHeight();
int height = getScreenHeight();
int greenCount = 0;
int sumCount = 0;
for (int x = 0; x < wide; x++) {
    for (int y = 0; y < height; y++) {
        Color color = getCellColor(x , y);
        if(color == Color.GREEN) {
            greenCount ++;
            sumCount += getCellNumber(x, y);
        }
    }
}
printSum(sumCount);
printCountOfGreenCells(greenCount);
А вот так правильно ?
public void showResult() {
       int wide = getScreenHeight();
       int height = getScreenHeight();
       int greenCount = 0;
       int sumCount = 0;
       for (int x = 0; x < 10; x++) {
           for (int y = 0; y < 10; y++) {
               Color color = getCellColor(x , y);
               if(color == Color.GREEN) {
                   greenCount ++;
                   sumCount += getCellNumber(x, y);
               }
           }
       }
       printSum(sumCount);
       printCountOfGreenCells(greenCount);
   }
Тесты у вас ребята отстой , я вам скажу
Maria Grigorenko
Уровень 21
8 апреля, 17:31
У меня засчиталось это решение ↓, но по условиям задачи «Считаем клетки» это решение не должно быть правильным вроде бы, т.к. одно условие не бьётся: Подсчитать сумму всех чисел в зеленых клетках и вывести в консоли: Сумма всех чисел = [сумма] public void showResult() { int sum = 0; int count = 0; for(int i = 0; i < 10; ++i){ for(int j = 0; j < 10; ++j){ sum+= getCellNumber(i, j); if(getCellColor(i, j) == Color.GREEN) { count++; } } } printSum(sum); printCountOfGreenCells(count); }
23 декабря 2025, 13:00
Хм. С помощью DeepSeek выяснил, что javarush использует JavaFX. А также, что эта технология устарела и не поставляется с IDEA, по умолчанию. Однако, в проекте javarush он должен быть. Но, в моей версии его нет (проверял с помощью предложенных DeepSeek команд для командной строки). Подскажите, такое возможно? И как подобное исправить? Я скачал и подключил JavaFX к IDEA. Ошибки перестали появляться. Но и окно игры не запускается тоже. Только информационное окошко с сообщением об отсутствии метода main. Подскажите, как это исправить?
Зепп БранниганAdmin в JavaRushModerator
29 декабря 2025, 12:27
Если у Вас актуальная версия нашего плагина, то отдельно скачивать игровой движок не нужно, т.к. он уже идет под капотом плагина.
Samat Khasanov
Уровень 20
19 ноября 2025, 16:52
для ссылки
Anonymous #3555639
Уровень 35
21 октября 2025, 07:28
как быть с версией выше? причём пробовал и с версиями ниже 24
Den Winchester
Уровень 32
5 октября 2025, 21:32
В последних версиях IntelliJ IDEA поле VM options не отображается по умолчанию.
Для его отображения нажми Alt + V
Это ещё что за Alt +&nbspV ? ))
Sandra M
Уровень 1
2 сентября 2025, 08:33
Не хочу писать игры 😢 это будет сложный и нудный уровень для меня 😩
Закирка Джава МОНСТРШколяр в Школа
18 октября 2025, 09:43
тогда скипай, это просто чтобы руки набить скорее и общее понимание получить, чем реально научиться игры писать.
Sandra M
Уровень 1
10 ноября 2025, 13:02
я в итоге скипнула, не жалею)