JavaRush /Java Blog /Random-TW /JavaRush 上的「遊戲」部分:遊戲引擎

JavaRush 上的「遊戲」部分:遊戲引擎

在 Random-TW 群組發布
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