あなたはスマホのゲームをやるだろうか?

やる人にとってはおなじみのガチャ。あれはどうやって抽選をしているのだろうか?

プログラミングでは乱数というの用いてこれを実現している。

今回から数回に分けてこの乱数を扱う。

ゲームを作りたいと思っている人には必須の知識となるとしっかりと学習しよう。

[乱数の生成]

ではさっそくScratchで乱数を発生させてみよう。手始めに1~100の乱数を発生させてみる。

いつもは「旗がクリックされた時」から始めているが今回は「このスプライトがクリックされたとき」を使ってみよう。スプライト(今回は猫ちゃん)をクリックしたときに処理を走らせるものだ。

まずは[見た目]にある「Hello!と言う」ブロックを配置する。

[演算]の中に乱数を発生させるブロックがある。これを配置し1から100までに変更する。

これで1から100までの乱数を生成できる。さっそく猫ちゃんの絵をクリックしてみよう。

なんども猫ちゃんの絵をクリックしてみよう。その度に1~100の範囲の数値を表示するはずだ。

[宝くじゲームの作成]

では乱数を使って簡単なゲームを作成してみよう。

くじを3回引いて獲得賞金を競うものだ。

1~100までの乱数を発生させて

もし1だったら1等ということで1000万円

もし2か3だったら2等ということで100万

同様に4,5,6だったら3等10万

7,8,9,10だったら4等1万

11~20だったら5等1000円

21~40だったら6等100円

それ以外はハズレだ。

このくじを3回引いた獲得賞金を求めてみよう。

[変数の作成]

一度まっさらな状態にして、いつも通り「旗がクリックされたとき」を配置し

何回目かを保持する変数:count

何の番号が出たのかを保持する変数:number

獲得合計金額を保持する変数:sum

を作成する。

図のように配置し、sumとcountを0にする。

3回くじを引くので、「繰り返しブロック」を使っていこう。回数を3回にする。

このように配置して、何回目なのかを表示しよう。ここまでで実行してみるとわかるが

1回目!

2回目!

3回目!

と表示されることがわかる。

繰り返し処理をしながらcountを増やしていく処理はよく出てくるので慣れる必要がある。

繰り返しの中に乱数の生成をいれよう。

これで「○回目!」と表示した後に1〜100の乱数を生成する。

そしてその生成した値を変数numberに保持させておく。

あとはこのnumberの値によって獲得金額を調べていこう。

numberが1のときは大当たり1等だ。それを表示してsumに10000000を加算しよう。

1でなかったときの処理「でなければ」に書いていく

2または3のときが2等だ。それを[演算]にある「または」ブロックを使って実現する。

3等は4,5,6の時だ。これをさきほどのように「または」ブロックを2つ使って実現しても良いが「かつ」を使ったほうがらくに実現できる。

「numberが3より大きい かつ numberが7より小さい」

今回この条件に4,5,6が当てはまるのは特に疑問がないであろう。(発生させている乱数は整数)

あとは同様にやっていくだけなのだが複製を利用するととても楽だ。

図で示したあたりでオプションクリックすると複製できるで、それをそのまま「でなければ」にいれてあげて修正してあげるとよい。

複製し、「でなければ」にまるっと貼り付けたあとに赤丸で囲った部分を修正する。

複製と修正を何度かして、3回の繰り返し処理を終えたところで結果を出力するようにしておけば完成だ。実行してためしてみよう。

3回くじを引き、獲得金額が表示されればOKだ。左上に変数の状態が出ているのでそれを眺めながらやるのも面白い。

さて、いくら獲得できたであろうか?

3000万円を獲得することは出来たであろうか?

ちなみにこの確率は0.01*0.01*0.01で100万分の1だ。

そんな馬鹿な!3回連続で1を出すことなんて出来っこない!!とお思いだろうか。

しかし、実際の年末ジャンボなどの1等は2000万分の1なのでこれのさらに20倍難しいという。

まさにクレイジーな世界だ。

さらにもう一つ。

日本の宝くじの還元率と値段に当てはめるとこのゲームのくじは1回約25万だ。3回引くと75万円かかることを付け加えておく。

最後は少し脱線したが、今回はゲームで大切となる乱数の基礎を学んだ。

[今回の完成作品]

[今回のプロジェクト]

https://scratch.mit.edu/projects/165553170/