手順 2: ランダムな加算問題の作成
クイズには計算問題が必要です。クイズで同じ問題ばかり繰り返してもやりがいがないので、ここでは乱数を使用します。問題を表示してカウントダウン タイマーを開始する StartTheQuiz() というメソッドを追加します。この手順では、ランダムな加算問題を追加します。その他の計算問題とカウントダウン タイマーについては、チュートリアルのこの後の手順で追加します。
チュートリアル 2 の迷路ゲームで、いくつかの SoundPlayer を作成しました。SoundPlayer クラスの代わりに Random クラスを使用することを除けば、計算クイズでも作業は同じです。
ランダムな加算問題を作成するには
次のような new ステートメントを使用して Random オブジェクトを作成します。
Public Class Form1 ' Create a Random object to generate random numbers. Dim randomizer As New Random
public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random();
Random オブジェクトをフォームに追加し、randomizer という名前を付けました。
注意
迷路のチュートリアルでは、new ステートメントを使用して 2 つの SoundPlayer コンポーネントを作成しました。このコンポーネントも似たような処理を行います。Random はコンポーネントでもコントロールでもないため、その名前で呼び出せない点だけが SoundPlayer と異なります。これはオブジェクトと呼ばれます。オブジェクトという言葉は聞いたことがあるかもしれませんが、この後のいくつかのチュートリアルでその意味について説明していきます。ここでは、プログラムで new ステートメントを使用してボタン、ラベル、パネル、OpenFileDialog、ColorDialog、SoundPlayer、Random、およびフォームを作成した場合、作成されたアイテムをオブジェクトと呼ぶことだけ覚えておいてください。これらのオブジェクトの動作については、この後のチュートリアルで詳しく説明していきます。
これで、フォームの開始時に、新しい Random オブジェクトが作成され、randomizer という名前が付けられます。SoundPlayer の場合と同様に、メソッド内に「randomizer」と入力してからドット (.) を入力すると、IntelliSense ウィンドウが開き、呼び出すことができる Random オブジェクトのすべてのメソッドが表示されます。次のように、Next() メソッドを使用します。
Next メソッド
random.Next(50) を呼び出すと、50 未満 (0 ~ 49) の乱数を取得できます。
この後に答えを確認するメソッドを作成するため、プログラムで問題用に選択した数値を記憶しておく必要があります。addend1 という整数 (C# では int、Visual Basic では Integer と呼ばれます) と addend2 という int (Integer) を、次のようにフォームに追加します (randomizer という Random オブジェクトを追加したときと同様です)。
' Create a Random object to generate random numbers. Dim randomizer As New Random ' These Integers will store the numbers ' for the addition problem. Dim addend1 As Integer Dim addend2 As Integer
// Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2;
注意
int (Integer) は、正または負の数値を格納するために使用されます。-2147483648 ~ 2147483647 の任意の数値を保持できます。格納できるのは整数だけで、小数は格納できません。
次に、StartTheQuiz() というメソッドを追加します。このメソッドは、Random オブジェクトの Next() メソッドを使用して、2 つの数値を選択し、その数値をラベルに配置します。最終的には、すべての問題を入力し、タイマーを開始します。そのため、コメントを追加しておきます。結果は次のようになります。
''' <summary> ''' Start the quiz by filling in all of the problems ''' and starting the timer. ''' </summary> ''' <remarks></remarks> Public Sub StartTheQuiz() ' Fill in the addition problem. addend1 = randomizer.Next(51) addend2 = randomizer.Next(51) plusLeftLabel.Text = addend1.ToString plusRightLabel.Text = addend2.ToString sum.Value = 0 End Sub
/// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0; }
注意
呼び出したのが randomizer.Next(51) であることに注意してください。50 ではなく 51 を使用した理由は、2 つの数値を合計した答えが 0 ~ 100 になるようにするためです。Next() メソッドに 50 を渡した場合、0 ~ 49 の数値が選択されるため、答えの最大値が 100 ではなく 98 になります。メソッドの最初の 2 つのステートメントが実行された後、addend1 と addend2 の 2 つの int (Integer) は、それぞれ 0 ~ 50 の数値を保持します。
次のステートメントについて詳しく見てみましょう。
plusLeftLabel.Text = addend1.ToString plusRightLabel.Text = addend2.ToString
plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString();
これらのステートメントでは、plusLeftLabel および plusRightLabel という 2 つの加算問題のラベルの Text プロパティを設定し、ラベルに 2 つの乱数が表示されるようにしています。Label コントロールで表示できるのはテキスト (プログラミングでは文字列のことをテキストと呼びます) だけで、数値は表示できないため、int (Integer) の ToString() メソッドを使用してテキストに変換する必要があります。
[Start] ボタンでクイズが開始されるようにするため、Windows フォーム デザイナーに移動し、そのボタンをダブルクリックして Click イベント ハンドラーを追加します。その後、次の 2 つのステートメントを追加します。
Private Sub startButton_Click() Handles startButton.Click startButton.Enabled = False StartTheQuiz() End Sub
private void startButton_Click(object sender, EventArgs e) { startButton.Enabled = false; StartTheQuiz(); }
2 つ目のステートメントの処理はわかりやすいと思います。このステートメントは、新しい StartTheQuiz() メソッドを呼び出します。最初のステートメントは、startButton コントロールの Enabled プロパティを False に設定します。これによりボタンが無効になり、ユーザーがクリックできなくなります。こうすることで、ユーザーが 1 回しか [Start] ボタンをクリックできないようにすることができます。その後は、ボタンが淡色表示になって使用できなくなり、ユーザーは残り時間がなくなる前にクイズを完了する (またはプログラムを閉じる) 必要があります。
プログラムを保存し、実行します。[Start] ボタンをクリックします。次の図に示すように、ランダムな加算問題が表示されます。
ランダムな加算問題
続行または確認するには
チュートリアルの次の手順に進むには、「手順 3: カウントダウン タイマーの追加」を参照してください。
チュートリアルの前の手順に戻るには、「手順 1: プロジェクトの作成とフォームへのラベルの追加」を参照してください。