(日本語訳) Chain Castle – Lesson 2 Chapter 4

Libra
Libra
スポンサーリンク

Capter 4 演算子

前のセクションで、足し算や掛け算の様な、いくつかの基本的な算術演算子を使いました。このチャプタではMoveが実装している演算子についてより詳しく見ていきましょう。

現在、Moveは次の算術演算子を実装しています。「足す:+」「引く:-」「掛ける:*」「割る:/」「剰余演算:%」。以下はこれらを利用するサンプルです。

main() {
    let a: u64;
    a = 1 + 2;
    a = 3 - 2;
    a = 2 * 3;
    a = 6 / 2;
    a = 5 % 2;
    return;
}

Moveはまた「大なり:>」や「小なり:<」「等しい:==」「大なりイコール:>=」「小なりイコール:<=」「ノットイコール:!=」といった比較演算子を実装しています。対応するサンプルを以下に示します。

main() {
    let a: bool;
    a = (1 == 1);
    a = (1 == 2);

    a = (1 != 2);
    a = (1 != 1);;

    a = (2 > 1);
    a = (1 > 1);;

    a = (1 >= 1);
    a = (0 >= 1);

    a = (1 < 2);
    a = (2 < 1);

    a = (1 <= 1);
    a = (2 <= 1);

    return;
}

それに加えて、いくつかのビット演算子やブール演算子もMoveに実装されています。それらは後のチャプタで詳細に見ていきます。

実習

私たちのゲームでは、城のシリアルナンバーは、現在のブロック高によってランダムに生成されます。
ランダムな数値を生成する最も基本的なアルゴリズムは剰余演算で実装されるものです。

次はC言語でシンプルな擬似乱数の生成を実装したサンプルです。
明らかに、この様なプログラムで生成される乱数のシーケンスはnextの初期値に依存します。

static unsigned long next = 1;
int myrand(void) {
    next = next * 1103515245 + 12345;
    return ((unsigned)(next / 65536) % 32768);
}

上のプロシージャにちょっと手を入れてseedをインプットすることでランダムな数を生成する次のプログラムをゲットできます。

int myrand(int seed) {
    rand = seed * 1103515245 + 12345;
    return ((unsigned)(rand / 65536) % 32768);
}

他の言語と同様の方法で、特定の範囲のランダム数を生成するために剰余演算を利用できます。詳細にはmからnの間の乱数を生成するには次の様にします。

myrand(seed) % (n - m + 1) + m;
  1. 上記の乱数生成プログラムを参考に。Mathモジュールの中に、myrand()という乱数を生成するプロシージャをつけ加えて、その機能を実装してください。
  2. 現在のブロック高をベースに、8桁のシリアルナンバー(107から 108-1の間の数)を生成します。publicプロシージャのgenerateSerial()BuildCastleモジュール内に付け加えて、その中からMathモジュールのmyrandプロシージャを呼んでください。
    • 現在のブロックの高さは、Blockモジュールのget_current_height()メソッドによって獲得できます。
    • Blockモジュールのアドレスは0x00です。
    • MathモジュールとBlockモジュールを正しい場所でインポートしてください。
  3. main()内でSerialNumを定義して、generateSerial()プロシージャで初期化してください。
Move Castle
タイトルとURLをコピーしました