シンプルな色当てゲームを作ってみましょう。ついでに、ベベル( Bevel )の簡単な使い方も見てみましょう。( Bevel はコンポーネントパレットの Additional ページにあります。)
ベベルを使用すると、立体的な枠などを作ることが出来ます。見た目を変化させるには、Shape プロパティと Style プロパティを使います。Styleプロパティには bsLowered と bsRaise があり、それぞれ凹凸を変えることが出来ます。そして Shapeプロパティで、その形状を変えることが出来ます。
Shape プロパティには、この二つ以外にもありますので、いろいろ設定を変えてみてください。
それでは、早速、色当てゲームを作ってみましょう。今回の色当てゲームの設定は、コンピュータが「赤」「黄色」「青」のどれかの色を表示しますので、それを当てるというルールです。それでは、下の図のようにコンポーネントを配置してください。( コンポーネントの位置関係には、特に意味があるわけではありませんので、自分オリジナルの配置にしてもOKです。)
特に意味はないのですが、ベベルを沢山使ってみました。
それでは、まず最初にオブジェクトインスペクタで RadioGroup の Items プロパティの設定をして下さい。今回は「赤」「黄色」「青」の3つを Items プロパティに追加します。( RadioGroup の使い方に関してはにこちらを参考にして下さい)次に、ラジオグループのそれぞれの項目を選択するとパネルの色が変わるようにしてやります。
procedure TForm1.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: Panel1.Color := clRed; 1: Panel1.Color := clYellow; 2: Panel1.Color := clBlue; end; end;
今回は、パネル1を自分の選択した色を表示するのに使い、パネル2には、コンピュータがランダムに選択した色を表示させるようにします。 また、ランダム制を出す為には Randomize を使います。(これがないとプログラムの実行直後からコンピュータのパネルに表示される色の順序がいつも同じになってしまいます。例えば、コンピュータのパネルの色が「青」→「赤」→「青」の順に表示されたとします。ここで一旦プログラムを終了させてから、もう一度プログラムを実行してもパネルに表示される色は前回と同じく「青」→「赤」→「青」の順に表示されることになります。)また、これはフォームの OnCreate に書いてやります。オブジェクトインスペクタで Form1 を選択してイベントページの OnCreate の右側の空白をダブルクリックして以下のように書いて下さい。
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end;
そして最後に、ボタンを押すと自分の選択した色とコンピュータが選択した色が同じかどうかの判定をしてやります。今回、この判定は自作の手続きにしてやってみました。以下のようになります。
type TForm1 = class(TForm) Bevel1: TBevel; RadioGroup1: TRadioGroup; Button1: TButton; Bevel2: TBevel; Bevel3: TBevel; Panel1: TPanel; Label1: TLabel; Panel2: TPanel; Label2: TLabel; Bevel4: TBevel; Label3: TLabel; procedure RadioGroup1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } procedure JudgeColor; end; var Form1: TForm1; ............................... procedure TForm1.Button1Click(Sender: TObject); begin case Random(3) of 0: Panel2.Color := clRed; 1: Panel2.Color := clYellow; 2: Panel2.Color := clBlue; end; JudgeColor; end; procedure TForm1.JudgeColor; begin if Panel1.Color = Panel2.Color then Label3.Caption := '当たりです!' else Label3.Caption := '残念、はずれです。'; end;
これで、完成です。筆者のは下のようになりました。
簡単ではありますが、ちゃんと遊べます。
今回、オブジェクトインスペクタを使用して、ラジオグループの Items プロパティを設定しました。設定が終わった状態でラジオグループの各選択肢を見てみますと、どの項目もチェックされていない状態になっていると思います。例えば、プログラム実行直後に、ラジオグループのある項目がチェックされている状態から始めたい時があります。そんな時は ItemIndex プロパティを任意の値に設定してやります。ItemIndex プロパティはデフォルトで -1 になっていますので、この値を 0、1、2....などに設定してやれば特定の項目をチェックが入っている状態に出来ます。