1. 継承
CodeGym ゲーム エンジンを使用するには、継承を使用する必要があります。しかし、それが何なのかわからない場合はどうすればよいでしょうか? 一方で、このトピックを理解し、勉強する必要があります。一方、エンジンは非常にシンプルになるように特別に設計されているため、継承に関する表面的な知識だけで問題なく対処できます。
では、継承とは何でしょうか?簡単に言えば、継承は2 つのクラス間の関係です。そのうちの 1 つは親クラスとして機能し、もう 1 つは子 (子孫) クラスになります。さらに、親クラスは、子孫クラスがあることさえ知らない可能性があります。言い換えれば、親は子孫クラスを持つことであまりメリットを得られません。
しかし、継承は子クラスに多くの利点をもたらします。その中で最も重要なのは、親クラスのコードが子クラスに直接コピーされたかのように、親クラスのすべての変数とメソッドが子クラスに表示されることです。これは完全に正確ではありませんが、継承の基本を理解するには十分です。
継承をより深く理解するのに役立ついくつかの例を次に示します。
例 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 ゲーム エンジンには、乱数の生成に使用できる 2 つのメソッドがあります。これらの方法は次のとおりです。
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 は返されません。この方法で乱数ジェネレーターを使用するのはかなり単純ですが、多くの場合に適しています。
2 番目のメソッド — 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