1.繼承
要使用 CodeGym 遊戲引擎,您需要使用繼承。但是,如果您不知道那是什麼怎麼辦?一方面,你確實需要了解和研究這個話題。另一方面,該引擎被特別設計得非常簡單,所以你對繼承稍有了解就可以搞定。
那麼什麼是繼承呢?簡單來說,繼承就是兩個類之間的一種關係。其中一個充當父類,另一個成為子(後代)類。更重要的是,父類甚至可能不知道它有子類。換句話說,父類不會從擁有後代類中獲得太多好處。
但是繼承給子類帶來了很多好處。其中最重要的是,父類的所有變量和方法都出現在子類中,就好像把父類的代碼直接複製到子類中一樣。這並不完全準確,但足以對繼承有一個基本的了解。
下面是一些示例,可以幫助您更好地理解繼承。
示例 1 — 這是最簡單的示例
|
類在關鍵字的幫助下Child 繼承類。Parent extends |
|
示例 2——使用父類的變量
|
類Child 可以使用類的age 和name 字段Parent ,就好像它們是在Child 類本身中聲明的一樣。 |
|
示例 3——使用父類的方法
|
該類Child 可以像在類中聲明一樣使用父類的變量和方法Child 。在這個例子中,我們使用getName() 方法。 |
|
省略一些細節,我們可以說,從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——方法覆蓋
|
該printInfo() 方法將顯示以下短語:
|
|
將情況稍微過分簡化,繼承導致父類的代碼被複製到子類中。但是如果一個後代類已經存在一個祖先類中的方法,那麼這個方法就不會從祖先類中復制。這裡我們說子類中的方法重寫父類中的方法。看下面的例子。也許這會讓事情變得更清楚:
以下是從編譯器的角度來看 Child 類的顯示方式: |
---|
|
示例 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()
該方法,則調用該類的方法。Child
printInfo()
Child
例子:
|
此代碼在屏幕上顯示以下文本:
|
|
此代碼在屏幕上顯示以下文本:
|
這一切都是因為從編譯器的角度(一個非常簡化的版本)來看,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
尖括號中指示的值是列表可以存儲的數據類型。
以下是一些使用列表的方法:
代碼 | 簡要描述;簡介 |
---|---|
|
創建一個新的字符串列表 |
|
添加一個元素到列表的末尾 |
|
將元素添加到列表的開頭 |
|
通過索引獲取元素 |
|
通過索引更改元素 |
|
獲取列表中的元素個數 |
|
從列表中刪除一個元素 |
有關列表的更多信息,您可以閱讀以下文章:
4.隨機數
CodeGym 遊戲引擎有兩種可用於生成隨機數的方法。這些方法是:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
第一種方法 ——返回, , , ...getRandomNumber(int max)
範圍內的隨機數。在引擎蓋下,它使用包中的類,但這不會改變您使用隨機數的方式。0
1
2
max-1
Random
java.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
。
在遊戲中使用隨機數的方法有很多種。你只受限於你的想像力。編寫您自己的遊戲,完善它們,並享受這個過程。
每個人都可以玩遊戲,但只有程序員才能創造遊戲。
GO TO FULL VERSION