Image from Gyazo
今回はランダムの使い方を紹介します。ランダムは、ゲームづくりの様々な場面に用いられています。まずは、ランダムを使ってできることから見ていきましょう
①ハートの回復量をランダムにすることができます

②敵の出現位置をランダムにすることもできます

③敵に与えるダメージをランダムにすることもできます

それでは、それぞれの作り方を順番に紹介していきます
その他のランダムの使い方は、最後の方にのせておきます

1. ハートの回復量をランダムにする

まずはハートを出します
次のようにコードを書きかえます

// ここからハート
const item1 = new RPGObject(('▼ スキン', Skin.ハート));
item1.locate(7, 5, 'map1');
item1.on(('▼ イベント', 'ふまれた'), event => {
	event.item.hp += random(1, 10); // ←この行を書きかえる
	item1.destroy();
});
// ここまでハート

random のカッコの中にある2つの数字は、ランダムが一番小さかったときの数字と、ランダムが一番大きかったときの数字です。ただし一番上の数字は含まれないので、この例では、1〜9までがハートの回復量になります。この数字をかえれば、ランダムの範囲を変えることができます
プレイを押して、ゲームをプレイしてみましょう!

2. 敵の出現位置をランダムにする

まずは、なんでもいいので、モンスターを出してみましょう
今回はスライムを出してみます

// ここからスライム
const item1 = new RPGObject(('▼ スキン', Skin.スライム));
item1.family = ('▼ ファミリー', Family.ドクリツ);
item1.hp = 3;
item1.atk = 1;
item1.locate(7, 5, 'map1');
item1.endless(async (self, count) => {
	await self.attack(); // こうげきする
	/*+ じどう*/
});
// ここまでスライム

locate のカッコの中にある2つの数字は、左から数えたマス目ひく1の数字と、上から数えたマス目ひく1の数字でした(数学で習う座標とおなじ)。これを、次のように書きかえます

// ここからスライム
const item1 = new RPGObject(('▼ スキン', Skin.スライム));
item1.family = ('▼ ファミリー', Family.ドクリツ);
item1.hp = 3;
item1.atk = 1;
item1.locate(random(0, 15), random(0, 10), 'map1');
item1.endless(async (self, count) => {
	await self.attack(); // こうげきする
	/*+ じどう*/
});
// ここまでスライム

左から0〜14マス目、上から0〜9マス目の範囲にしました。これで、出現位置は「マップ全体のどこか」になります。今回は両方をランダムにしましたが、片方は数字のままにしておいて、片方だけをランダムにすることもできます
また、数字を調節すれば、マップ内のある範囲だけでランダムにすることも可能です
プレイを押して、出現位置を確かめてみましょう!

3. ダメージをランダムにする

最後に、ダメージをランダムにするには、どうすればいいでしょうか?
プレイヤーの攻撃力をランダムにするだけなら、次のように書けばよいですね

player.atk = random(1, 10);

しかし、この方法では、ゲームが始まった時に一度だけランダムになるだけで、その後はずっと同じダメージ量になってしまいます。これでは、能力値がランダムになったとは言えますが、ダメージがランダムになっているとは言えませんね
ダメージをランダムにするには、プレイヤーが攻撃するたびに、攻撃力をランダムに変化させます。次のコードを、コードの中のプレイヤーについて書かれている行よりも下のどこかに書き加えましょう

player.onこうげきするとき = () => {
	player.atk = random(1, 10);
};

ちょっと長いコードですが、大丈夫です。 player.on まで書くと、「onなになにするとき」という候補がいくつか出てくるので、 onこうげきするとき を選ぶだけで OK なのです。あとは、{ と } の間に、プレイヤーの攻撃力をランダムにするコードを書きましょう
では、プレイを押して、モンスターと戦ってみましょう!

イベント

「onなになにするとき」のことを、イベントと呼びます。イベントは、多くのプログラミング言語で使われる有名なシステムです。イベントの大きな利点は、実行したい処理を「実行したいこと」と「実行したいとき」に分けることで、複雑な処理をシンプルにできることです
今回の例でいうと、次のように考えました

  • 実行したいこと→プレイヤーの攻撃力をランダムにすること
  • 実行したいとき→プレイヤーが攻撃するとき

今回書いたコードを応用して、「実行したいこと」を「プレイヤーの体力を増やすこと」に変えれば、回復魔法のような仕組みが作れますし、「実行したいとき」を「プレイヤーの体力が変わったとき」に変えれば、ダメージを受けるほど強くなる特殊能力のような仕組みも作れます

その他のランダムの使い方

HackforPlay の random (ランダム)関数には、全部で4通りの使い方があります。ここまでのランダムは、その内の1つである、最小〜最大までの範囲を使うランダムを用いてきました。他の使い方もみていきましょう
2つ目の使い方は、最大だけを書くランダムです。1つ目使い方の省略形と言えます。この場合、最小値は0ということになります

player.hp = random(5); // 0〜4までのランダム。0だったら、戦う前にやられちゃいます

3つ目の使い方は、小数を含む範囲を使うランダムです。「少数を含む」とは、1.5 や 0.9 などの細かいところまで含めてランダムにするということです。使い方は、どちらか一方に小数を含む数字を書くだけです

player.hp = random(1, 3.5); // 1.0〜3.5 までのランダム

4つ目の使い方は、配列を使って、「どれかひとつを選ぶ」というランダムです。これは例を見た方が早いでしょう

player.hp = random([1, 3, 9]);

[1, 3, 9] というのが配列です。こう書いて、「1と3と9が入っている配列」と言います。ランダムの結果は、1か3か9のいずれかに、等しい確率で決まります。これを上手く利用すれば、等確率でないランダムや、たまにものすごくラッキーなことが起こるランダムも作ることができます
ランダムを使うと、ゲームの幅がとても広がります。ぜひ、上手く活用してみて下さい