手順 7: ペアの表示の維持

プレーヤーが一致しないアイコンのペアをクリックしている限り、ゲームは正常に動作します。 しかし、プレーヤーが一致するペアをクリックしたらどうなるでしょうか。 (Start() メソッドを使用して) タイマーを有効にしてアイコンを非表示にする代わりに、ゲームでは、それ自体をリセットすることで、クリックされた 2 つのラベルの色はリセットせずに、firstClicked 参照変数および secondClicked 参照変数を使用してラベルを追跡しないようにする必要があります。

ペアの表示を維持するには

  1. 次の if ステートメントを、label_Click() イベント ハンドラー メソッドの最後の近くの、タイマーを開始するステートメントのすぐ上に追加します。 プログラムにステートメントを追加しながら、コードを注意して見てください。 コードのしくみを検討します。

            // 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 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 ステートメントの 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 では、変数の代入と比較の両方に = を使用します。

  2. プログラムを保存したら実行し、フォームでアイコンのクリックを開始します。 一致しないペアをクリックした場合、タイマーの Tick イベントがトリガーされ、両方のアイコンが非表示になります。 一致するペアをクリックした場合、新しい if ステートメントが実行され、return ステートメントにより、メソッドでタイマーを開始するコードがスキップされるため、次の図に示すように、アイコンが表示されたままになります。

    このチュートリアルで作成するゲーム
    アイコンのペアが表示された絵合わせゲーム

続行または確認するには