1.繼承

要使用 CodeGym 遊戲引擎,您需要使用繼承。但是,如果您不知道那是什麼怎麼辦?一方面,你確實需要了解和研究這個話題。另一方面,該引擎被特別設計得非常簡單,所以你對繼承稍有了解就可以搞定。

那麼什麼是繼承呢?簡單來說,繼承就是兩個類之間的一種關係。其中一個充當父類,另一個成為子(後代)類。更重要的是,父類甚至可能不知道它有子類。換句話說,父類不會從擁有後代類中獲得太多好處。

但是繼承給子類帶來了很多好處。其中最重要的是,父類的所有變量和方法都出現在子類中,就好像把父類的代碼直接複製到子類中一樣。這並不完全準確,但足以對繼承有一個基本的了解。

下面是一些示例,可以幫助您更好地理解繼承。

示例 1 — 這是最簡單的示例

public class Parent
{
}
類在關鍵字的幫助下Child繼承類。Parentextends
public class Child extends Parent
{
}

示例 2——使用父類的變量

public class Parent
{
  public int age;
  public String name;
}
Child可以使用類的agename字段Parent,就好像它們是在Child類本身中聲明的一樣。
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

示例 3——使用父類的方法

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
該類Child可以像在類中聲明一樣使用父類的變量和方法Child。在這個例子中,我們使用getName()方法。
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

省略一些細節,我們可以說,從Java編譯器的角度來看,我們只是將父類的代碼複製到子類的代碼中:

public class Child extends Parent
{
   public int age;        // An inherited variable
   public String name;    // An inherited variable
   public getName() {     // An inherited method
      return name;
   }

   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}
這是Child從編譯器的角度看類的樣子


2. 方法覆蓋

有時候會出現這樣的情況,我們讓我們的Child類繼承了一個非常有用的Parent類,導致子類繼承了父類的所有變量和方法。但是其中一些方法可能無法完全按照我們希望的方式工作,或者根本無法按照我們希望的方式工作。

在這種情況下你會怎麼做?我們可以重寫我們不喜歡其實現的方法。這是一件很簡單的事情:在我們的Child類中,我們只需聲明一個與類中的方法具有相同簽名的方法Parent,然後在其中編寫我們自己的代碼。

示例 1——方法覆蓋

public class Parent
{
   public String name;
   public void setName(String nameNew) {
      name = nameNew;
   }

   public getName() {
      return name;
   }
}
printInfo()方法將顯示以下短語:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

將情況稍微過分簡化,繼承導致父類的代碼被複製到子類中。但是如果一個後代類已經存在一個祖先類中的方法,那麼這個方法就不會從祖先類中復制。這裡我們說子類中的方法重寫父類中的方法。看下面的例子。也許這會讓事情變得更清楚:

以下是從編譯器的角度來看 Child 類的顯示方式:
public class Child extends Parent
{
   public String name;    // An inherited variable

   public void setName(String nameNew)  // The overridden method replaces the inherited one
   {
      name = nameNew + ", No!!!";
   }

   public getName()    // An inherited method
   {
      return name;
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

示例 2 - 一點繼承魔法(和方法覆蓋)

public class Parent
{
   public getName() {
      return "Luke";
   }

   public void printInfo()
   {
      System.out.println( getName() );
   }
}
public class Child extends Parent
{
   public getName() {
      return "Luke, I am your father";
   }
}

如果printInfo()在一個類型上調用該方法Parent,它又會調用該類getName()的方法Parent

如果printInfo()在一個對像上調用該方法Child,它又會調用該類getName()的方法Child

換句話說,該printInfo()方法只在類中聲明Parent,但如果在對像上調用getName()該方法,則調用該類的方法。ChildprintInfo()Child

例子:

Parent parent = new Parent();
parent.printnInfo();
此代碼在屏幕上顯示以下文本:
Luke
Child child = new Child();
child.printnInfo();
此代碼在屏幕上顯示以下文本:
Luke, I am your father

這一切都是因為從編譯器的角度(一個非常簡化的版本)來看,Child該類的代碼如下所示:

public class Child extends Parent
{
   public getName() {
      return "Luke, I am your father";
   }

   public void printInfo()
   {
      System.out.println(getName());
   }
}
這是Child從編譯器的角度看類的樣子


3. 清單

這裡有一個關於列表的簡短提示 ( List)。列表與數組有很多共同點:

  • 它們可以存儲大量特定類型的數據。
  • 他們讓你通過索引獲取元素。
  • 元素的索引從0.

列表的優點:

與數組不同,列表可以動態改變大小。創建後,列表的大小立即為0. 隨著項目被添加到列表中,其大小增加。創建列表的示例:

ArrayList<String> myList = new ArrayList<String>();
創建一個新的ArrayList

尖括號中指示的值是列表可以存儲的數據類型。

以下是一些使用列表的方法:

代碼 簡要描述;簡介
ArrayList<String> list = new ArrayList<String>();
創建一個新的字符串列表
list.add("name");
添加一個元素到列表的末尾
list.add(0, "name");
將元素添加到列表的開頭
String name = list.get(5);
通過索引獲取元素
list.set(5, "new name");
通過索引更改元素
int count = list.size();
獲取列表中的元素個數
list.remove(4);
從列表中刪除一個元素

有關列表的更多信息,您可以閱讀以下文章:



4.隨機數

CodeGym 遊戲引擎有兩種可用於生成隨機數的方法。這些方法是:

int getRandomNumber(int max)
int getRandomNumber(int min, int max)

第一種方法 ——返回, , , ...getRandomNumber(int max)範圍內的隨機數。在引擎蓋下,它使用包中的類,但這不會改變您使用隨機數的方式。012max-1Randomjava.util

getRandomNumber(int)接受一個整數作為參數。該數字將是隨機數生成器可以返回的數字的上限。下限為 0。注意!隨機數生成器永遠不會返回上限值。例如,如果您調用getRandomNumber(3),它將隨機返回 0、1 或 2。如您所見,它不會返回 3。以這種方式使用隨機數生成器相當簡單,但適用於許多情況。

第二種方法——getRandomNumber(int min, int max)返回範圍內的隨機整數[min, max-1]。它永遠不會返回小於 的數字min,也永遠不會返回大於 的數字max-1

如何在實踐中使用這些方法?

1. 骰子

假設你想模擬擲骰子並得到一個範圍內的隨機數1-6。你會怎麼做?這可以用這樣的代碼來完成:

int dice = getRandomNumber(1, 7);

此方法將返回範圍內的隨機整數1-6

2. 目標練習

假設您要模擬對目標的射擊,並且射擊的準確性包括一個隨機分量,該分量的範圍從 到-10不等+10。這可以用這樣的代碼來完成:

int dx = getRandomNumber(-10, 11);

-10此方法將返回範圍為的隨機整數+10

在遊戲中使用隨機數的方法有很多種。你只受限於你的想像力。編寫您自己的遊戲,完善它們,並享受這個過程。

每個人都可以玩遊戲,但只有程序員才能創造遊戲。