楽しい「情報」演習 第2回
プログラミングでスロットマシーンを作ろう! 
〜ゲーム作りで始めるアルゴリズム〜
 

神奈川県立川崎北高等学校
柴田 功
isao@johoka.net
http://www.johoka.net

 はじめに
 「アルゴリズムの基礎」の授業では「整列」や「検索」のアルゴリズムといった課題がまず最初に浮かびますが、そのままの課題では生徒は興味を示すかどうかは疑問です。では、他に何かいい課題はないかと頭を抱えてしまところですが、そんなときにはスロットマシーンを作ってみてはいかがでしょうか。スロットマシーン作りには乱数の発生、繰り返し構造、二分岐選択といったアルゴリズムの重要な要素が含まれますし、完成したプログラムを実行しゲームとして楽しめます。さらに力のある生徒には掛け金が増えていくようなものに改良していく発展性もあります。使用する言語はなんでも構いませんが、ここでは、VisualBasic6.0を使ったスロットマシーン作りの授業の実践事例を紹介します。
 DATA
3年生選択科目「情報基礎」(2コマ連続の2単位)
平成15年度以降は選択科目の「情報B」でこの課題を実施する予定
小編成クラス(20人)に2人のティームティーチングによる指導
パソコン教室:PC40台、OS:Windows98SE
プログラミング言語:VisualBasic6.0
第1週 導入、乱数、繰り返し構造、二分岐選択
第2週 発展課題、まとめ
具体的な指導案はhttp://www.johoka.net/slot/vbslot.htmに掲載
 準備 〜言語はなんでもOK〜
 プログラミング言語はなんでも構いません。私の場合、今までにVisualBasic6.0、JavaScript、N88BASICの3つの言語でスロットマシーン作りの授業を行いましたがアルゴリズムは同じですのでどの言語でも問題ありませんでした。生徒に配布するものとしてその言語の主なコマンドが書かれたプリントと、発展的なことをする生徒向けに各PCに1冊ずつ市販のテキストを用意します。
 導入 〜オブジェクトを置いてみよう〜 
 まずは、プログラミング開発環境を簡単に説明します。VisualBasicの場合は表示されるウィンドウやツールバーがたくさんあるので画面の説明を簡単にしておきます。その後、フォームにオブジェクトを置く練習をします(右図)。クリック&ドラッグで何個ものオブジェクトをフォームの上に「子どものブロックおもちゃ」感覚で自由にレイアウトしていきます。生徒たちはこの段階ですでに楽しんでいました。
 演習1 〜ここを押すと「こんにちは!」〜
 最初に、コマンドボタンを押すと「こんにちは!」と書かれたメッセージボックスが現れるような簡単なプログラムをつくります。コマンドボタンをダブルクリックしコードを埋め込みます。 ここではプログラムを「実行している状態」と「開発している状態」の2つのモードがあることを理解させます。
 演習2 〜電子サイコロを作ろう〜
 次に乱数の意味を理解させるために、コマンドボタンをクリックするたびに乱数が表示されるプログラムを作成します。
  1.  x=Rnd(1) で0から1までの乱数を発生させます。
  2.  x=Rnd(1)*10 で0から10までの小数の乱数を発生させます。
  3.  x=Int(Rnd(1)*10) で0から9までの整数の乱数を発生させます。
このように、少しずつコードに手を加えていき、実行結果が変化していくのを実感させていきます。
 演習3 〜電子サイコロを3つ作ろう〜
 今度は電子サイコロを3つ並べスロットマシーンらしくしていきます。このあたりからは生徒自ら追加するオブジェクトとコードを考えさせます。生徒は、さっそく自作のプログラムが動くかどうか何度も試し、ついにデバッグ処理がうまくいった生徒は、得意気に完成したゲームで遊び始めます。3つ同じ数字が並ぶと歓声が上がり、まだプログラムが動かない生徒には良い意味でプレッシャーになっていきます。そこは、さすがにクラスメイト、お互いに協力しあってなんとか全員が3つの乱数が動くプログラムを完成させます。 
 演習4 〜ストップしたら判定しよう〜
 いよいよ、3つの乱数が止まったときの判定のコードを埋め込みます。
If 〜 Then 〜 Else 〜
の文法で、3つ乱数が揃った場合は、「Label」に「Fever!」、それ以外の場合は「Boo!」と表示させるようにします。2時間の授業で、ここまで全員が達成できることを目標にしております。
 第1週のまとめ
 まとめとして作成したプログラムのフローチャートとコードを並列に板書(またはプロジェクター)で提示し、どのような流れでコンピュータが処理しているのかを理解させます。多くの生徒はプログラミングを体験してようやくフローチャートの意味がわかってくるようで、フローチャートの指導が先か、プログラミングの指導が先か難しいところでしたが、私の場合は授業のまとめとしてフローチャートを説明しました。
 第2週の導入
 ほとんどの生徒は、先週理解したことをすっかり忘れています。ですから、復習よりもさらに進んで、全く最初から始めていきます。無駄な作業に見えますが、同じ作業を反復することで理解が定着していきますし、先週欠席した生徒への対応も考えると、このくらい反復するペースで進行する必要があると感じました。生徒は一度理解したことを忘れてしまうのも早ければ、思い出すのも早いようで、先週の4倍くらいの速さで先週のやったところまでたどり着きます。ここからが、発展課題で、まずは全員が下記の「発展1」を行います。第2週からはスキルの個人差が大きくなるのでたくさんの発展課題を用意し、自由度を持たせるように工夫しました。
 発展1 〜当たりでポイントが増えるようにしよう〜
 持ちポイントのうち何点かを賭けてからスタートボタンを押し、ストップボタンを押して3つの数が揃うと賭けたポイントの数倍が返ってくるようにします。ゲームを面白くするには当たる確率と期待値を考える必要があります。また、持ちポイントがなくなったらGameOverにすることも必要になってきます。
 発展2 〜9つの窓で横・斜めを揃えよう〜
 3つのTextBoxを9個に増やして、3行3列にします。今度は横3つだけでなく、斜めに3つ揃う場合も当たりになるようにします。判定は複雑になりますが本物のスロットマシーンに近づいていきます。
 発展3 〜ストップボタンを3つにしよう〜
 スロットマシーンをよく知っている生徒からは、1つのボタンで3つの乱数が同時に止まってしまうのではなく、3つのボタンを用意し1つのボタンで1つの乱数が止まるようにしたいという要求が出てきます。こちらは、ややコードが複雑になっていきますが、用意した市販のテキストなどを頼りにして、自分でコーディングしていく生徒も出てきます。
 発展4 〜数字の代わりに画像を動かそう〜
 ここまでくるとかなり力のある生徒向けになりますが、能力のある生徒にはどんどん発展的な課題を用意しておいた方がいいでしょう。ヒントとしてSelect文を使うことを伝えておきます。
Select Case 〜 Case 〜 End Select
発生した乱数によって、数字の代わりに自分の描いた画像が表示されるスロットマシーンが完成します。
 評価 
 第1週の課題では理解の早さこそ違っても、完成した作品はほとんど同じものになります。第2週では、発展課題をどこまで取り組んだか差がはっきりするので提出した作品で評価ができます。また、操作しやすいレイアウトや数字のフォント、色などのデザインの要素を評価に入れることもできます。
 おわりに
 アルゴリズムの指導では、全員に興味をもたせる課題作りが大事です。スロットマシーン作りの他に、身体、感情、知性の3つの周期をもつサインカーブを描く「バイオリズム占い」や、ランダムに現れるモグラをマウスでたたく「モグラたたきゲーム」などやってみたいと思っています。いずれにしても、自作のプログラムで遊べることが完成した喜びを大きくするのではないかと思います。
 また、スキルの高い生徒の要求に応える課題を用意するのは大変ですが、生徒の能力を発掘する楽しさを体験できる教材でもありました。
 今後の「楽しい『情報』演習」予定
第1回は「プレゼンテーションソフトで4コマ漫画を作ろう」でした。
今後は
第3回「ワープロでオリジナル名刺を作ろう」
第4回「学校紹介のホームページを作ろう」
第5回「コミュニケーションの方法についてまとめよう」
を予定しております。

index