- Введение
- Инициализация игры
- Создание игрового поля
- Примитивная программа
- Работа с клетками игрового поля
- Работа с цветом
- Диалоговые окна
- Утилитные методы
- Ограничения игрового движка
1. Введение
В реализации компьютерной игры со стороны разработчика есть три стадии:- Инициализация игры — это подготовительные действия: установка размера и прорисовка игрового поля, создание и установка игровых объектов в начальное положение, а также другие действия, которые необходимо выполнить в начале игры.
- Игровой процесс. К нему относятся движение игровых объектов, действия игрока, учет заработанных очков, а также другие действия, которые необходимо выполнять с определенной периодичностью или по нажатию кнопок.
- Завершение игры. К нему относятся остановка анимации, сообщение о победе или поражении, а также другие действия, которые необходимо выполнить в конце игры.
2. Инициализация игры
Инициализация игры состоит всего из двух шагов:Шаг 1: создаем основной класс игры.
Для разработки своей игры на основе игрового движка JavaRush, вам нужно создать класс и унаследовать его от класса Game (com.javarush.engine.cell.Game). Это даст вашему классу возможность вызывать методы игрового движка, а движку — вызывать ваши методы. Пример:
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
...
}
Шаг 2: переопределяем метод initialize().
В этом методе будут происходить все действия, необходимые для старта игры: создание игрового поля, создание игровых объектов, и т.д. Вам нужно просто объявить этот метод в классе, унаследованном от класса Game. Пример:
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Тут выполняем все действия по инициализации игры и ее объектов
}
}
Метод initialize() — это аналог метода main(): именно с него начинает выполняться весь код, написанный для игры.
3. Создание игрового поля
Создание игрового поля тоже состоит всего из двух шагов.Шаг 1: делим игровое поле на клетки.
Все игровое поле делится игровым движком на клетки. Минимальный размер — 3x3, максимальный — 100x100. Игровой экран имеет постоянный размер. Его можно разделить на разное количество клеток. Например, ширина 7 и высота 9:
import com.javarush.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. Работа с клетками игрового поля
То, что мы можем поделить игровое поле на ячейки — это отлично, а что мы можем делать с самими ячейками? Каждой клетке игрового поля можно задать:- цвет клетки (цвет фона ячейки);
- текст (текст или число);
- цвет текста;
- размер текста в процентах относительно размера клетки.
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);
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);
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(); // Номер красного цвета
int blueIndex = Color.BLUE.ordinal(); // Номер синего цвета
Также можно получить цвет по его номеру:
// переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];
7. Диалоговые окна
В конце игры игроку нужно сообщить о победе или поражении. Для этого есть специальный метод, который выводит диалоговое окно на игровой экран:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Здесь:
- cellColor — цвет фона диалогового окна;
- message — текст сообщения;
- textColor — цвет текста сообщения;
- textSize — размер текста сообщения.
8. Утилитные методы
При написании игр часто используются случайные числа. Чтобы упростить получение случайных чисел, можно использовать утильные методы движка:- int getRandomNumber(int max) — возвращает случайное целое число от 0 до (max–1) включительно.
- int getRandomNumber(int min, int max) — возвращает случайное целое число от min до (max–1) включительно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ