応用課題6-6

デモンストレーションをダウンロード

パネルの色を次々に変えるという処方を応用して、次のような簡易ルーレットを作ってください。動作内容は次の通りです。プログラムを起動すると、下のフォームが現れます。


ここで、[開始] ボタンをクリックすると、点灯している部分 (黄色の部分) が時計回りに移動し、[停止] ボタンをクリックした時の位置によって、次のように得点が表示されるというものです。

点灯していない部分 (パネル) の色は「clBtnFace」としています。

なお、[開始]ボタンをクリックすると最上部の位置つまり100点の位置から新たに始まるものとします。

まず、自分でどのようにプログラミングすれば良いかを考えてください。ポイントは OnTimer イベントのイベントハンドラをどのように記述するか、です。どうしても分からない場合は下のヒントを参照してください。

ヒント:
  • 現在どの位置が点灯しているのかを知らなければなりません。そこで、点灯位置の情報を格納する変数を例えば Num (整数型変数) としておきます。
  • Num は1〜4の値をとるものとし、Num の値に応じて点灯位置を次のように決めます。
  • Num   1   2    3   4
  • 位置  上   右   下   左
  • OnTimer イベントにおいてこの Num の値を1ずつ増やして行けば、点灯位置が順次ずれることになります。ただし、Num=4 の次は Num=1 としなければなりません。
  • 点灯位置が決まったら、その位置のパネルの色を黄色 (clYellow) にし、1つ前の点灯位置にあるパネルの色を元の色 (clBtnFace) に戻します。こうすることによって、点灯位置がずれて行く動作を実現できます。
6-3 スロットマシンの作成


☆ 総目次へ ★ 第6章目次へ ★ 前節へ ★ 次節へ ☆

☆ 『Delphi入門』 6−3スロットマシーンの作成 ☆

5-11節 で作成したスロットマシンを、Timer を使って改良してみましょう。
練習問題

 次のようなプログラムを作ってみましょう。

@ [開始]ボタンをクリックすると、3つの欄に0〜2までの乱数が次々に表示されます A[停止]ボタンをクリックするとその時点で表示が止まります。
       
まず、上のようなフォームを作成し、各コンポーネントのNameプロパティを次に様に指定してください。 続いて Timer コンポーネントのプロパティを次のように指定してください。
コンポーネント Name
左のスピンエディット CSpinEditLeft
中央のスピンエディット CSpinEditCenter
右のスピンエディット CSpinEditRight
開始ボタン ButtonStart
停止ボタン ButtonStop
プロパティ
Name TimerSlot
Interval 100
Enabled False

これまで同様、[開始] および [停止] ボタンのイベントハンドラは、次の様になります。

今の場合、OnTimer イベントの処理は、3つの乱数の値を、CSpinEdit に表示させるという処理なので、次の様になります。

これで、数字がパラパラと変わって表示されるはずです。動作を確認してください。

基礎課題6-4

 次に、3つの数字が揃った場合には、「大当たり!」、それ以外の場合は「はずれ!」と表示する部分を付け加えましょう。

<3つの数字が揃ったとき> <揃っていないとき>

 まず、判定欄の Edit をフォームに貼り付け、Name プロパティを「EditHantei」としてください。(数字が揃っているかどうかの) 判定は、[停止] ボタンのイベントハンドラ内で行われます。以下の空欄を埋めてプログラムを完成させてください。

              

※ 判定表示させるように変更したことに応じて、[開始]ボタンのイベントハンドラに、(以前の)判定を消去する部分を付け加えることを忘れないでください。

基礎課題6-4 解答
応用課題6-5

デモンストレーションをダウンロード

 【応用課題6-4】では、0〜2の数字を表示させましたが、これを 5-11【応用課題5-2】 のように3つのパネルの色が変わるように修正してください。


3つの乱数の値を、3つのパネルの色に割り当てる処方は、【応用課題5-2】と全く同様です。今の場合、それを OnTimer イベントの中で行うという部分が異なるだけです。
応用課題6−5 解答
☆ 『Delphi入門』 6−3スロットマシーンの作成 ☆

☆ 総目次へ ★ 第6章目次へ ★ 前節へ ★ 次節へ ☆