- 公開日:2018-10-25 最終更新日:2018-10-17
- プロナビTOP / プログラミング初心者向け技術系ノウハウ・まとめ, プログラミング初心者向けお役立ちコンテンツ, キッズプログラミング
今回はランダムの使い方を紹介します。ランダムは、ゲームづくりの様々な場面に用いられています。まずは、ランダムを使ってできることから見ていきましょう
①ハートの回復量をランダムにすることができます
②敵の出現位置をランダムにすることもできます
③敵に与えるダメージをランダムにすることもできます
それでは、それぞれの作り方を順番に紹介していきます
その他のランダムの使い方は、最後の方にのせておきます
1. ハートの回復量をランダムにする
まずはハートを出します
次のようにコードを書きかえます
|
1 2 3 4 5 6 7 8 9 |
<span class=“token comment”>// ここからハート</span> <span class=“token keyword”>const</span> item1 <span class=“token operator”>=</span> <span class=“token keyword”>new</span> <span class=“token class-name”>RPGObject</span><span class=“token punctuation”>(</span><span class=“token punctuation”>(</span><span class=“token string”>‘▼ スキン’</span><span class=“token punctuation”>,</span> Skin<span class=“token punctuation”>.</span>ハート<span class=“token punctuation”>)</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>locate</span><span class=“token punctuation”>(</span><span class=“token number”>7</span><span class=“token punctuation”>,</span> <span class=“token number”>5</span><span class=“token punctuation”>,</span> <span class=“token string”>‘map1’</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>on</span><span class=“token punctuation”>(</span><span class=“token punctuation”>(</span><span class=“token string”>‘▼ イベント’</span><span class=“token punctuation”>,</span> <span class=“token string”>‘ふまれた’</span><span class=“token punctuation”>)</span><span class=“token punctuation”>,</span> event <span class=“token operator”>=></span> <span class=“token punctuation”>{</span> event<span class=“token punctuation”>.</span>item<span class=“token punctuation”>.</span>hp <span class=“token operator”>+=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>1</span><span class=“token punctuation”>,</span> <span class=“token number”>10</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// ←この行を書きかえる</span> item1<span class=“token punctuation”>.</span><span class=“token function”>destroy</span><span class=“token punctuation”>(</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token punctuation”>}</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// ここまでハート</span> |
random のカッコの中にある2つの数字は、ランダムが一番小さかったときの数字と、ランダムが一番大きかったときの数字です。ただし一番上の数字は含まれないので、この例では、1〜9までがハートの回復量になります。この数字をかえれば、ランダムの範囲を変えることができます
プレイを押して、ゲームをプレイしてみましょう!
2. 敵の出現位置をランダムにする
まずは、なんでもいいので、モンスターを出してみましょう
今回はスライムを出してみます
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class=“token comment”>// ここからスライム</span> <span class=“token keyword”>const</span> item1 <span class=“token operator”>=</span> <span class=“token keyword”>new</span> <span class=“token class-name”>RPGObject</span><span class=“token punctuation”>(</span><span class=“token punctuation”>(</span><span class=“token string”>‘▼ スキン’</span><span class=“token punctuation”>,</span> Skin<span class=“token punctuation”>.</span>スライム<span class=“token punctuation”>)</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>family <span class=“token operator”>=</span> <span class=“token punctuation”>(</span><span class=“token string”>‘▼ ファミリー’</span><span class=“token punctuation”>,</span> Family<span class=“token punctuation”>.</span>ドクリツ<span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>hp <span class=“token operator”>=</span> <span class=“token number”>3</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>atk <span class=“token operator”>=</span> <span class=“token number”>1</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>locate</span><span class=“token punctuation”>(</span><span class=“token number”>7</span><span class=“token punctuation”>,</span> <span class=“token number”>5</span><span class=“token punctuation”>,</span> <span class=“token string”>‘map1’</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>endless</span><span class=“token punctuation”>(</span><span class=“token keyword”>async</span> <span class=“token punctuation”>(</span>self<span class=“token punctuation”>,</span> count<span class=“token punctuation”>)</span> <span class=“token operator”>=></span> <span class=“token punctuation”>{</span> <span class=“token keyword”>await</span> self<span class=“token punctuation”>.</span><span class=“token function”>attack</span><span class=“token punctuation”>(</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// こうげきする</span> <span class=“token comment”>/*+ じどう*/</span> <span class=“token punctuation”>}</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// ここまでスライム</span> |
locate のカッコの中にある2つの数字は、左から数えたマス目ひく1の数字と、上から数えたマス目ひく1の数字でした(数学で習う座標とおなじ)。これを、次のように書きかえます
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class=“token comment”>// ここからスライム</span> <span class=“token keyword”>const</span> item1 <span class=“token operator”>=</span> <span class=“token keyword”>new</span> <span class=“token class-name”>RPGObject</span><span class=“token punctuation”>(</span><span class=“token punctuation”>(</span><span class=“token string”>‘▼ スキン’</span><span class=“token punctuation”>,</span> Skin<span class=“token punctuation”>.</span>スライム<span class=“token punctuation”>)</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>family <span class=“token operator”>=</span> <span class=“token punctuation”>(</span><span class=“token string”>‘▼ ファミリー’</span><span class=“token punctuation”>,</span> Family<span class=“token punctuation”>.</span>ドクリツ<span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>hp <span class=“token operator”>=</span> <span class=“token number”>3</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span>atk <span class=“token operator”>=</span> <span class=“token number”>1</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>locate</span><span class=“token punctuation”>(</span><span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>0</span><span class=“token punctuation”>,</span> <span class=“token number”>15</span><span class=“token punctuation”>)</span><span class=“token punctuation”>,</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>0</span><span class=“token punctuation”>,</span> <span class=“token number”>10</span><span class=“token punctuation”>)</span><span class=“token punctuation”>,</span> <span class=“token string”>‘map1’</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> item1<span class=“token punctuation”>.</span><span class=“token function”>endless</span><span class=“token punctuation”>(</span><span class=“token keyword”>async</span> <span class=“token punctuation”>(</span>self<span class=“token punctuation”>,</span> count<span class=“token punctuation”>)</span> <span class=“token operator”>=></span> <span class=“token punctuation”>{</span> <span class=“token keyword”>await</span> self<span class=“token punctuation”>.</span><span class=“token function”>attack</span><span class=“token punctuation”>(</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// こうげきする</span> <span class=“token comment”>/*+ じどう*/</span> <span class=“token punctuation”>}</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// ここまでスライム</span> |
左から0〜14マス目、上から0〜9マス目の範囲にしました。これで、出現位置は「マップ全体のどこか」になります。今回は両方をランダムにしましたが、片方は数字のままにしておいて、片方だけをランダムにすることもできます
また、数字を調節すれば、マップ内のある範囲だけでランダムにすることも可能です
プレイを押して、出現位置を確かめてみましょう!
3. ダメージをランダムにする
最後に、ダメージをランダムにするには、どうすればいいでしょうか?
プレイヤーの攻撃力をランダムにするだけなら、次のように書けばよいですね
|
1 2 |
player<span class=“token punctuation”>.</span>atk <span class=“token operator”>=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>1</span><span class=“token punctuation”>,</span> <span class=“token number”>10</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> |
しかし、この方法では、ゲームが始まった時に一度だけランダムになるだけで、その後はずっと同じダメージ量になってしまいます。これでは、能力値がランダムになったとは言えますが、ダメージがランダムになっているとは言えませんね
ダメージをランダムにするには、プレイヤーが攻撃するたびに、攻撃力をランダムに変化させます。次のコードを、コードの中のプレイヤーについて書かれている行よりも下のどこかに書き加えましょう
|
1 2 3 4 |
player<span class=“token punctuation”>.</span><span class=“token function-variable function”>onこうげきするとき</span> <span class=“token operator”>=</span> <span class=“token punctuation”>(</span><span class=“token punctuation”>)</span> <span class=“token operator”>=></span> <span class=“token punctuation”>{</span> player<span class=“token punctuation”>.</span>atk <span class=“token operator”>=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>1</span><span class=“token punctuation”>,</span> <span class=“token number”>10</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token punctuation”>}</span><span class=“token punctuation”>;</span> |
ちょっと長いコードですが、大丈夫です。 player.on まで書くと、「onなになにするとき」という候補がいくつか出てくるので、 onこうげきするとき を選ぶだけで OK なのです。あとは、{ と } の間に、プレイヤーの攻撃力をランダムにするコードを書きましょう
では、プレイを押して、モンスターと戦ってみましょう!
イベント
「onなになにするとき」のことを、イベントと呼びます。イベントは、多くのプログラミング言語で使われる有名なシステムです。イベントの大きな利点は、実行したい処理を「実行したいこと」と「実行したいとき」に分けることで、複雑な処理をシンプルにできることです
今回の例でいうと、次のように考えました
- 実行したいこと→プレイヤーの攻撃力をランダムにすること
- 実行したいとき→プレイヤーが攻撃するとき
今回書いたコードを応用して、「実行したいこと」を「プレイヤーの体力を増やすこと」に変えれば、回復魔法のような仕組みが作れますし、「実行したいとき」を「プレイヤーの体力が変わったとき」に変えれば、ダメージを受けるほど強くなる特殊能力のような仕組みも作れます
その他のランダムの使い方
HackforPlay の random (ランダム)関数には、全部で4通りの使い方があります。ここまでのランダムは、その内の1つである、最小〜最大までの範囲を使うランダムを用いてきました。他の使い方もみていきましょう
2つ目の使い方は、最大だけを書くランダムです。1つ目使い方の省略形と言えます。この場合、最小値は0ということになります
|
1 2 |
player<span class=“token punctuation”>.</span>hp <span class=“token operator”>=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>5</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// 0〜4までのランダム。0だったら、戦う前にやられちゃいます</span> |
3つ目の使い方は、小数を含む範囲を使うランダムです。「少数を含む」とは、1.5 や 0.9 などの細かいところまで含めてランダムにするということです。使い方は、どちらか一方に小数を含む数字を書くだけです
|
1 2 |
player<span class=“token punctuation”>.</span>hp <span class=“token operator”>=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token number”>1</span><span class=“token punctuation”>,</span> <span class=“token number”>3.5</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> <span class=“token comment”>// 1.0〜3.5 までのランダム</span> |
4つ目の使い方は、配列を使って、「どれかひとつを選ぶ」というランダムです。これは例を見た方が早いでしょう
|
1 2 |
player<span class=“token punctuation”>.</span>hp <span class=“token operator”>=</span> <span class=“token function”>random</span><span class=“token punctuation”>(</span><span class=“token punctuation”>[</span><span class=“token number”>1</span><span class=“token punctuation”>,</span> <span class=“token number”>3</span><span class=“token punctuation”>,</span> <span class=“token number”>9</span><span class=“token punctuation”>]</span><span class=“token punctuation”>)</span><span class=“token punctuation”>;</span> |
[1, 3, 9] というのが配列です。こう書いて、「1と3と9が入っている配列」と言います。ランダムの結果は、1か3か9のいずれかに、等しい確率で決まります。これを上手く利用すれば、等確率でないランダムや、たまにものすごくラッキーなことが起こるランダムも作ることができます
ランダムを使うと、ゲームの幅がとても広がります。ぜひ、上手く活用してみて下さい


































