目次に戻る
前のページへ
次のページへ

数当てゲームを作ってみよう

さて、これまでの知識を活用して、数当てゲームを作ってみましょう。新しくプログラムを作るのですから、これまでのプログラムはすべて閉じてください。(今後はこのような細かい指示は出しません。)

次のようにコンポーネント(部品)を配置してください。それぞれのコンポーネント(部品)のNameプロパティ(属性)も下のように変更してください。

入力欄が2つあるフォーム

それぞれの入力欄は空欄にしてください。ボタンは「答えあわせ」と表示してください。

これから作る数当てゲームは、プレイヤー(遊ぶ人)がEditAnsに適当な数(たとえば2)を入力して答えあわせボタンを押すと、プログラムは正解(たとえば7)と比較して、正解なら「正解!」、はずれなら「はずれ」とEditMesに表示するプログラムです。

この説明がよく分からなくても、とりあえず作って遊んでみましょう。

ButtonCheckのOnClickで、次のように書いてください。

void __fastcall TForm1::ButtonCheckClick(TObject *Sender)

{

if (EditInput->Text.ToInt() == 7) {

EditMes->Text = "正解!";

} else {

EditMes->Text = "はずれ";

}

}

できたら実行しましょう。解答欄(EditInput)に7以外の数を入れてボタンを押すと「はずれ」、7を入れてボタンを押すと「正解」と表示されますね。

しかし、このプログラムにはいくつかの欠点があります。

1つ目の欠点は、はずれのときに大きすぎるのか小さすぎるのか分からないことです。これを、「大きすぎるよ」「小さすぎるよ」と表示するようにしましょう。プログラムを次のように変えてください。

void __fastcall TForm1::ButtonCheckClick(TObject *Sender)

{

if (EditInput->Text.ToInt() == 7) {

EditMes->Text = "正解!";

} else if (EditInput->Text.ToInt() < 7) {

EditMes->Text = "小さすぎるよ";

} else {

EditMes->Text = "大きすぎるよ";

}

}

プログラムを簡単に説明します。新しくelse ifという文が出てきましたが、これはelseifとの単なる組み合わせです。

このプログラムを日本語で書くと次のようになります。

もし7なら {

「正解」と表示

} そうではなく、もし7未満なら {

「小さすぎるよ」と表示

} そうではなければ {

「大きすぎるよ」と表示

}

課題:もし「10」と入力したときに「10では大きすぎるよ」と表示するようにプログラムを変えなさい。

2つ目の欠点は、答えが7に決まっていることです。これでは、1回遊ぶと答えが分かってしまいます。答え(7)をプログラムの中に書く代わりに、プログラムを実行してすぐに答えを入力するようにしましょう。この説明でよく分からなくとも、とりあえずプログラムを入力し、動かしてみましょう。

次のようにフォームに正解欄を作ってください。

正解欄を増やしたフォーム

また、正解欄は空欄にしてください。

これまでは正解は7と決まっていたので、これを変えるため、プログラムを次のように書き換えましょう。

void __fastcall TForm1::ButtonCheckClick(TObject *Sender)

{

if (EditInput->Text.ToInt() == EditAns->Text.ToInt()) {

EditMes->Text = "正解!";

} else if (EditInput->Text.ToInt() < (左下へ続く)

EditAns->Text.ToInt()) {

EditMes->Text = "小さすぎるよ";

} else {

EditMes->Text = "大きすぎるよ";

}

}

できたら実行してみましょう。このゲームで遊ぶには、出題者と解答者の2人が必要です。解答者は最初は後ろを向き、その間に出題者が正解欄に答えを入力し、ウィンドウを画面の下のほうに持っていって正解が見えないようにします。

画面下部に一部隠れたフォーム

そして解答者が振り返り数を当てる、というように遊びます。