一、简介
开发者实施计算机游戏分为三个阶段:- 游戏的初始化是准备动作:设置比赛场地的大小和绘制,在初始位置创建和安装游戏对象,以及游戏开始时必须执行的其他动作。
- 游戏过程。这包括游戏对象的移动、玩家动作、赚取的分数,以及必须以一定时间间隔或通过按下按钮执行的其他动作。
- 结束游戏。这包括停止动画、宣布胜利或失败以及游戏结束时需要执行的其他操作。
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() {
// Тут выполняем все действия по инициализации игры и ее an objectов
}
}
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);
}
}
在此示例中,比赛场地的大小设置为 3x3,网格显示关闭,并且在蓝色背景的中心设置橙色半单元大小的“X”符号。这将是玩家开始游戏时首先看到的东西。
5. 与运动场的细胞一起工作
我们可以将运动场划分为单元格这一事实很棒,但是我们可以对单元格本身做什么呢?可以设置运动场的每个单元格:- 单元格颜色(单元格背景颜色);
- 文本(文本或数字);
- 文字颜色;
- 文本大小相对于单元格大小的百分比。
-
void setCellColor(int x, int y, Color color) — 设置坐标为 (x, y) 的单元格颜色:
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) 的单元格中:
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) 的单元格中:
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 和内容值:
setCellValueEx(0, 2, Color.BLUE, "56");
-
void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) — 设置坐标为 (x, y) 的单元格背景颜色 cellColor、内容值和内容颜色 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、内容值、内容颜色 textColor 和内容大小 textSize:
setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);
6. 使用颜色
游戏引擎中的颜色由Color 枚举控制,其中包含 148 种颜色的唯一值。还有特殊的价值“无”——没有颜色。使用颜色的示例: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)(含)的随机整数。
GO TO FULL VERSION