手順 7: ペアの表示の維持
プレーヤーが一致しないアイコンのペアをクリックしている限り、ゲームは正常に動作します。しかし、プレーヤーが一致するペアをクリックしたらどうなるでしょうか。(Start() メソッドを使用して) タイマーを有効にしてアイコンを非表示にする代わりに、ゲームでは、それ自体をリセットすることで、クリックされた 2 つのラベルの色はリセットせずに、firstClicked 参照変数および secondClicked 参照変数を使用してラベルを追跡しないようにする必要があります。
ペアの表示を維持するには
次の if ステートメントを、label_Click() イベント ハンドラー メソッドの最後の近くの、タイマーを開始するステートメントのすぐ上に追加します。プログラムにステートメントを追加しながら、コードを注意して見てください。コードのしくみを検討します。
' If the player gets this far, the timer isn't ' running and firstClicked isn't Nothing, ' so this must be the second icon the player clicked ' Set its color to black secondClicked = clickedLabel secondClicked.ForeColor = Color.Black ' If the player clicked two matching icons, keep them ' black and reset firstClicked and secondClicked ' so the player can click another icon If firstClicked.Text = secondClicked.Text Then firstClicked = Nothing secondClicked = Nothing Exit Sub End If ' If the player gets this far, the player ' clicked two different icons, so start the ' timer (which will wait three quarters of ' a second, and then hide the icons) Timer1.Start() End If End Sub
// If the player gets this far, the timer isn't // running and firstClicked isn't null, // so this must be the second icon the player clicked // Set its color to black secondClicked = clickedLabel; secondClicked.ForeColor = Color.Black; // If the player clicked two matching icons, keep them // black and reset firstClicked and secondClicked // so the player can click another icon if (firstClicked.Text == secondClicked.Text) { firstClicked = null; secondClicked = null; return; } // If the player gets this far, the player // clicked two different icons, so start the // timer (which will wait three quarters of // a second, and then hide the icons) timer1.Start(); } }
追加した if ステートメントの 1 行目は、プレーヤーがクリックした 1 つ目のラベルのアイコンが 2 つ目のラベルのアイコンと同じかどうかをチェックします。アイコンが同じである場合、プログラムは、中かっこ内 (Visual C# の場合) または if ステートメント内 (Visual Basic の場合) の 3 つのステートメントを実行します。最初の 2 つのステートメントは、firstClicked 参照変数および secondClicked 参照変数をリセットし、これらがラベルを追跡しないようにします (これら 2 つのステートメントが、タイマーの Tick イベント ハンドラーからのものであることを認識できます)。3 つ目のステートメントは return ステートメントであり、メソッドの残りのステートメントを実行せずにスキップするようプログラムに指示します。
Visual C# でプログラミングしている場合、一部のコードでは 1 つの等号 (=) が使用されているのに対し、他のステートメントでは 2 つの等号 (==) が使用されているのに気付きます。ある場所では = が使用されているのに対し、他の場所では == が使用されている理由について考えます。
違いを示す適切な例を以下に示します。if ステートメントのかっこ内のコードを注意して見てください。
firstClicked.Text = secondClicked.Text
firstClicked.Text == secondClicked.Text
次に、コード ブロック内の、if ステートメントの後の最初のステートメントを注意して見てください。
firstClicked = Nothing
firstClicked = null;
これら 2 つうち最初のステートメントは、2 つのアイコンが同じであるかどうかをチェックします。2 つの値を比較しているため、Visual C# のプログラムでは、等値演算子 == を使用しています。2 つ目のステートメントは、実際の値の変更 (代入と呼ばれます) を行い、firstClicked 参照変数を null に設定してリセットします。代わりに代入演算子 = が使用されているのはそのためです。Visual C# では、= を使用して値を設定し、== を使用して値を比較します。Visual Basic では、代入と比較の両方に = を使用します。
プログラムを保存して実行し、フォーム内でクリックを開始します。一致しないペアをクリックした場合、タイマーの Tick イベントがトリガーされ、両方のアイコンが非表示になります。一致するペアをクリックした場合、新しい if ステートメントが実行され、return ステートメントにより、メソッドでタイマーを開始するコードがスキップされるため、次の図に示すように、アイコンが表示されたままになります。
アイコンのペアが表示された絵合わせゲーム
続行または確認するには
チュートリアルの次の手順に進むには、「手順 8: プレーヤーが勝利したかどうかを確認するメソッドの追加」を参照してください。
チュートリアルの前の手順に戻るには、「手順 6: タイマーの追加」を参照してください。