次の方法で共有


チュートリアル: 一致するゲーム WinForms アプリにメッセージを表示する

この全4回のチュートリアルシリーズでは、プレイヤーが隠されたアイコンのペアを一致させるゲームを作成します。

このチュートリアルでは、マッチしたペアを表示し続け、プレイヤーが勝利したときにおめでとうメッセージを表示するように、マッチング ゲームを修正します。

このチュートリアルでは、次の方法について説明します。

  • ペアを表示したままにする。
  • プレイヤーが勝利したかどうかを確認します。
  • その他の機能をお試しください。

前提 条件

このチュートリアルは、次の前のチュートリアルに基づいています。

  1. 一致するゲーム アプリケーション を作成する
  2. 一致するゲーム にアイコンを追加する
  3. 一致するゲーム にタイマーを追加する

ペアの表示の維持

プレイヤーがペアを揃えたとき、ゲーム自体をリセットする必要があります。それ以降、firstClickedsecondClicked 参照変数を使用するラベルを追跡しないようにします。 一致した 2 つのラベルの色をリセットしないでください。 これらのラベルは引き続き表示されます。

  1. 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 つのステートメントは、firstClickedsecondClicked 参照変数をリセットします。 これらのラベルは追跡されなくなりました。 3 番目のステートメントは return ステートメントであり、メソッド内の残りのステートメントは実行されずにスキップされます。

  1. プログラムを実行し、フォームの四角形の選択を開始します。

このチュートリアルで作成した照合ゲームのスクリーンショット。

一致しないペアを選択すると、タイマーの Tick イベントがトリガーされます。 両方のアイコンが消えます。

一致するペアを選択すると、新しい if ステートメントが実行されます。 return ステートメントにより、メソッドはタイマーを開始するコードをスキップします。 アイコンは表示された状態を維持します。

プレイヤーが勝利したかどうかを確認する

楽しいゲームを作成しました。 プレイヤーが勝利すると、ゲームは終了します。 このセクションでは、プレイヤーが勝利したかどうかを確認するメソッドを追加します。

  1. 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() メソッドを呼び出してゲームを終了します。

  1. ラベルの 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() メソッドを呼び出します。

  1. プログラムを保存して実行します。 ゲームをして、すべてのアイコンを合わせてください。 勝つと、お祝いのメッセージが表示されます。

    スクリーンショットは、メッセージ ボックスを使用した照合ゲームを示しています。

    [OK]を選択すると、照合ゲームが閉じます。

その他の機能を試す

マッチングゲームは完了です。 より多くの機能を追加して、このゲームをより困難で興味深いものにすることができます。 いくつかのオプションを次に示します。

  • アイコンと色を、お好きなものに置き換えてください。

    ラベルの ForeColor プロパティを確認してみてください。

  • プレイヤーが勝つまでの時間を追跡するゲーム タイマーを追加します。

    フォームに経過時間を表示するラベルを追加できます。 TableLayoutPanelの上に配置します。 時間を追跡する別のタイマーをフォームに追加します。 コードを使用して、プレイヤーがゲームを開始したときにタイマーを開始し、最後の 2 つのアイコンと一致した後にタイマーを停止します。

  • プレイヤーがマッチを見つけたときにサウンドを追加し、プレイヤーが一致しない 2 つのアイコンを発見したときに別のサウンドを追加し、プログラムがアイコンをもう一度非表示にしたときに 3 番目のサウンドを追加します。

    サウンドを再生するには、System.Media 名前空間を使用できます。 詳細については、「Windows フォーム アプリでサウンドを再生する (C#)」または「Visual Basicでオーディオを再生する方法」を参照してください。

  • ボードを大きくすることで、ゲームをより難しくします。

    TableLayoutPanel に行と列を追加する以上のことを行う必要があります。 また、作成するアイコンの数も考慮する必要があります。

  • プレイヤーが応答が遅すぎる場合は、最初のアイコンを非表示にして、ゲームをより困難にします。

次の手順

おめでとう! この一連のチュートリアルを完了しました。 Visual Studio IDE で次のプログラミングタスクと設計タスクを行いました。

  • リストに格納されているオブジェクト (アイコンなど)
  • C# または Visual Basic でループを使用してリストを反復処理しました
  • 参照変数を使用して状態を追跡する
  • 複数のオブジェクトのイベントに応答するイベント ハンドラーを構築しました
  • カウントダウンしてイベントを発生するタイマーを追加しました

Windows フォーム デザイナーの詳細については、この記事に進んでください。