JavaRush /Java 博客 /Random-ZH /JavaRush 上的“游戏”部分:游戏引擎

JavaRush 上的“游戏”部分:游戏引擎

已在 Random-ZH 群组中发布
JavaRush 中的“游戏”是一个新部分,其中包含用于编写流行计算机游戏的大型任务项目。制作它们比看起来更容易:每个项目都分为两打子任务。通过逐步完成任务,您将编写您的游戏,然后您可以为其添加独特的“功能”并与朋友分享。章节该游戏使用简单的 JavaRush 游戏引擎。在这篇文章中,我们将讨论它的主要功能以及编写游戏的过程是什么样的。
  1. 介绍
  2. 游戏初始化
  3. 创造一个竞争环境
  4. 原始程序
  5. 与运动场的细胞一起工作
  6. 使用颜色
  7. 对话框
  8. 实用方法
  9. 游戏引擎限制

一、简介

开发者实施计算机游戏分为三个阶段:
  1. 游戏的初始化是准备动作:设置比赛场地的大小和绘制,在初始位置创建和安装游戏对象,以及游戏开始时必须执行的其他动作。

  2. 游戏过程。这包括游戏对象的移动、玩家动作、赚取的分数,以及必须以一定时间间隔或通过按下按钮执行的其他动作。

  3. 结束游戏。这包括停止动画、宣布胜利或失败以及游戏结束时需要执行的其他操作。

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:
章节
请注意,单元格编号从左上角开始。要设置比赛场地的大小,请使用void setScreenSize(int width, int height)方法。它设定了比赛场地的大小。它将水平(宽度)和垂直(高度)的单元格数量作为参数。通常在游戏开始时调用一次。例子:
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. 与运动场的细胞一起工作

我们可以将运动场划分为单元格这一事实很棒,但是我们可以对单元格本身做什么呢?可以设置运动场的每个单元格:
  • 单元格颜色(单元格背景颜色);
  • 文本(文本或数字);
  • 文字颜色;
  • 文本大小相对于单元格大小的百分比。
让我们考虑一下使用运动场单元格的方法
  1. 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);

  2. Color getCellColor(int x, int y) - 返回坐标为 (x, y) 的单元格的颜色:

    Color myColor = getCellColor(2, 0);

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

  4. String getCellValue(int x, int y) - 返回坐标为 (x, y) 的单元格中包含的文本:

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

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

  8. int getCellNumber(int x, int y) - 返回坐标为 (x, y) 的单元格中包含的数字。如果单元格不包含数字,则返回 0:

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

  9. void 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. void setCellValueEx(int x, int y, Color cellColor, String value) — 设置坐标为 (x, y) 的单元格背景颜色 cellColor 和内容值:

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) — 设置坐标为 (x, y) 的单元格背景颜色 cellColor、内容值和内容颜色 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、内容值、内容颜色 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.实用方法

编写游戏时经常使用随机数。为了更容易获得随机数,您可以使用废料引擎方法:
  1. int getRandomNumber(int max) - 返回 0 到 (max–1)(含)之间的随机整数。

  2. int getRandomNumber(int min, int max) - 返回从 min 到 (max–1)(含)的随机整数。

9. 游戏引擎限制

为了在网站上运行游戏,它们会在服务器上被翻译成 JavaScript。在这方面,出现了一些限制。特别是,当使用 JavaRush 引擎编写游戏时,您不能使用文件,也不能使用System类的所有方法,除了currentTimeMillis()setOut()setErr()arrayscopy()。您还可以使用errout字段。如果违反这些限制,游戏当然可以编译和运行,但无法发布。您也将无法发布无限循环的游戏。就这样!如果您想了解有关游戏部分的更多信息,这里有一些有用的文档可以提供帮助:
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION