日本語プログラミング言語「なでしこ」公式サイト |
結婚式の二次会や、会社や学校の懇親会など、大勢で遊んで盛り上がるゲームに「ビンゴ」があります。今や100円ショップでも、ゲームに必要なビンゴカードが売っているので、手間いらずで楽しめます。今回は、そのビンゴを遊ぶのに欠かせない「ビンゴマシン」をなでしこで作ってみましょう。
そもそも、ビンゴとは、5×5の計25マスに番号が書かれたカードを用いて楽しむゲームです。カードには中央以外の24マスに、1から75までの番号のうち24個の番号が書かれています。進行役が無作為に番号を一つずつ選んでいきます。参加者は、手元のカードから選ばれた番号を一つずつ消していき、縦、横、斜めのいずれかが揃うと上がりとなり、早く上がった人が勝つというゲームです。
そして、ビンゴマシンとは、このビンゴを楽しむためのマシンで、1から75までの数字を重複無くランダムに数え上げるマシンです。
1から75までの数字をランダムに表示するプログラム
まずは、ビンゴマシンの仕組みを学ぶために、なでしこ3の簡易エディタを用いて、1から75までの数字をランダムに表示するプログラムを作ってみましょう。
# カゴに1から75までの数を一気に入れる --- (*1)
カゴ=[]
Iを1から75まで繰り返す
カゴにIを配列追加
ここまで
# カゴをシャッフルする --- (*2)
カゴを配列シャッフル
# カゴの中身を順に表示する --- (*3)
カゴを反復
それを表示。
ここまで。
プログラムを実行すると重複なく1から75までの数字がずらっと表示されます。
さて、プログラムを確認してみましょう。プログラムの先頭(*1)の部分では、変数「カゴ」の中に、1から75までの数を追加します。このように、配列変数を使うと、一つの変数の中にたくさんの数字を代入することができます。
続いて、(*2)の部分では、変数「カゴ」、つまり、1から75の数字が入った配列変数の中身をシャッフルします。
そして、最後(*3)の部分で、カゴの中身を一つずつ表示するという流れになります。
ビンゴマシンを完成させよう
プログラムの流れが分かったところで、ビンゴマシンを完成させましょう。
# カゴに1から75までの数を一気に入れる
カゴ=[]
Iを1から75まで繰り返す
カゴにIを配列追加
ここまで
カゴを配列シャッフル
# カゴの中身を順に表示する --- (*1)
カゴを反復
N=それ
「今回の数字は【{N}】です。次を表示しますか?」を二択。
もし、それがいいえならば、抜ける。
ここまで。
プログラムを実行するとダイアログに、ビンゴの数字が表示されます。[OK]ボタンを押すと、続きの数字がダイアログがダイアログに表示され、[キャンセル]ボタンを押すと、プログラムが終了します。
このプログラムで書き換えたのは、(*1)以降のカゴの中身を順に表示する処理です。冒頭のプログラムでは、一度にすべての値を表示していましたが、ここでは、一つずつダイアログに表示するようにしています。
ダイアログに値を表示するには「言う」命令が使えますが、「言う」命令を使ってしまうと、75個の数字をすべてダイアログに表示し終えるまで、連続でダイアログが表示されてしまいます。これでは不便なので、ここでは「二択」命令を使っています。この命令では、ボタンが二つ表示されるので、[キャンセル]のボタンを押した時には、繰り返し値を表示しないようにします。
「反復」構文と配列の初期化
さて、今回のプログラムについて、もう少し補足してみます。配列変数の中に入っている全ての値を一度に何か処理したいという時に、「反復」構文を使います。今回、ビンゴの数字をすべて表示するのに、この「反復」構文を利用しました。
例えば、以下のプログラムを実行すると、変数Aに1、2、3の3つの値を代入し、その後、一つずつ値を画面に出力します。
A = [1, 2, 3] # 変数Aに3つの値を代入
Aを反復 # 値を一つずつ処理
それを表示
ここまで
一行では、変数Aに値を代入しています。ここで、[ 1, 2, 3 ] のように書くと、それが配列の初期化となります。数字のほか、文字列や配列自身を指定することもできます。実は、これは、JSONというデータ形式で、昨今、幅広く利用されています。そのため、なでしこでも、JSONのデータをプログラムの中に直接記述できるようになっています。
まとめ
以上、今回はビンゴマシンを作ってみました。みんなで楽しむイベントで「自作のビンゴマシン」を導入するなら、場がいっそう盛り上がるかもしれません。ぜひ、自作プログラミングで、イベントを盛り上げましょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。