この全4回のチュートリアルシリーズでは、プレイヤーが隠されたアイコンのペアを一致させるゲームを作成します。
このチュートリアルでは、マッチしたペアを表示し続け、プレイヤーが勝利したときにおめでとうメッセージを表示するように、マッチング ゲームを修正します。
このチュートリアルでは、次の方法について説明します。
- ペアを表示したままにする。
- プレイヤーが勝利したかどうかを確認します。
- その他の機能をお試しください。
前提 条件
このチュートリアルは、次の前のチュートリアルに基づいています。
- 一致するゲーム アプリケーション を作成する
- 一致するゲーム にアイコンを追加する
- 一致するゲーム にタイマーを追加する
ペアの表示の維持
プレイヤーがペアを揃えたとき、ゲーム自体をリセットする必要があります。それ以降、firstClicked
と secondClicked
参照変数を使用するラベルを追跡しないようにします。
一致した 2 つのラベルの色をリセットしないでください。
これらのラベルは引き続き表示されます。
label_Click()
イベント ハンドラー メソッドに次のif
ステートメントを追加します。 タイマーを開始するステートメントのすぐ上に、コードの末尾近くに配置します。
// 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
ステートメントは、プレイヤーが選択した最初のラベルのアイコンが 2 番目のラベルのアイコンと同じかどうかを確認します。
アイコンが同じ場合、プログラムはその 3 つのステートメントを実行します。
最初の 2 つのステートメントは、firstClicked
と secondClicked
参照変数をリセットします。
これらのラベルは追跡されなくなりました。
3 番目のステートメントは return
ステートメントであり、メソッド内の残りのステートメントは実行されずにスキップされます。
- プログラムを実行し、フォームの四角形の選択を開始します。
一致しないペアを選択すると、タイマーの Tick イベントがトリガーされます。 両方のアイコンが消えます。
一致するペアを選択すると、新しい if
ステートメントが実行されます。
return ステートメントにより、メソッドはタイマーを開始するコードをスキップします。
アイコンは表示された状態を維持します。
プレイヤーが勝利したかどうかを確認する
楽しいゲームを作成しました。 プレイヤーが勝利すると、ゲームは終了します。 このセクションでは、プレイヤーが勝利したかどうかを確認するメソッドを追加します。
timer1_Tick()
イベント ハンドラーの下のコードの下部に、CheckForWinner()
メソッドを追加します。
/// <summary>
/// Check every icon to see if it is matched, by
/// comparing its foreground color to its background color.
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
// Go through all of the labels in the TableLayoutPanel,
// checking each one to see if its icon is matched
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// If the loop didn’t return, it didn't find
// any unmatched icons
// That means the user won. Show a message and close the form
MessageBox.Show("You matched all the icons!", "Congratulations");
Close();
}
このメソッドは、C# で別の foreach
ループを使用するか、Visual Basic で For Each
ループを使用して、TableLayoutPanel内の各ラベルを通過します。
各ラベルのアイコンの色をチェックして、背景と一致するかどうかを確認します。
色が一致する場合、アイコンは非表示のままであり、プレイヤーは残りのアイコンのすべてに一致していません。
その場合、プログラムは return
ステートメントを使用して、メソッドの残りの部分をスキップします。
ループが return
ステートメントを実行せずにすべてのラベルを通過する場合、フォーム上のすべてのアイコンが一致したことを意味します。
このプログラムは、MessageBox を表示して、プレイヤーの勝利を祝福し、Close()
メソッドを呼び出してゲームを終了します。
- ラベルの Click イベント ハンドラーで新しい
CheckForWinner()
メソッドを呼び出します。
// 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;
// Check to see if the player won
CheckForWinner();
// 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;
}
プレイヤーが選択した 2 番目のアイコンが表示された直後に、プログラムで勝者がチェックされることを確認します。 2 番目に選択したアイコンの色を設定した行を探し、その行の直後に CheckForWinner()
メソッドを呼び出します。
プログラムを保存して実行します。 ゲームをして、すべてのアイコンを合わせてください。 勝つと、お祝いのメッセージが表示されます。
[OK]を選択すると、照合ゲームが閉じます。
その他の機能を試す
マッチングゲームは完了です。 より多くの機能を追加して、このゲームをより困難で興味深いものにすることができます。 いくつかのオプションを次に示します。
アイコンと色を、お好きなものに置き換えてください。
ラベルの ForeColor プロパティを確認してみてください。
プレイヤーが勝つまでの時間を追跡するゲーム タイマーを追加します。
フォームに経過時間を表示するラベルを追加できます。 TableLayoutPanelの上に配置します。 時間を追跡する別のタイマーをフォームに追加します。 コードを使用して、プレイヤーがゲームを開始したときにタイマーを開始し、最後の 2 つのアイコンと一致した後にタイマーを停止します。
プレイヤーがマッチを見つけたときにサウンドを追加し、プレイヤーが一致しない 2 つのアイコンを発見したときに別のサウンドを追加し、プログラムがアイコンをもう一度非表示にしたときに 3 番目のサウンドを追加します。
サウンドを再生するには、System.Media 名前空間を使用できます。 詳細については、「Windows フォーム アプリでサウンドを再生する (C#)」または「Visual Basicでオーディオを再生する方法」を参照してください。
ボードを大きくすることで、ゲームをより難しくします。
TableLayoutPanel に行と列を追加する以上のことを行う必要があります。 また、作成するアイコンの数も考慮する必要があります。
プレイヤーが応答が遅すぎる場合は、最初のアイコンを非表示にして、ゲームをより困難にします。
次の手順
おめでとう! この一連のチュートリアルを完了しました。 Visual Studio IDE で次のプログラミングタスクと設計タスクを行いました。
- リストに格納されているオブジェクト (アイコンなど)
- C# または Visual Basic でループを使用してリストを反復処理しました
- 参照変数を使用して状態を追跡する
- 複数のオブジェクトのイベントに応答するイベント ハンドラーを構築しました
- カウントダウンしてイベントを発生するタイマーを追加しました
Windows フォーム デザイナーの詳細については、この記事に進んでください。