手順 7: ペアの表示の維持Step 7: Keep Pairs Visible

プレーヤーが一致しないアイコンのペアをクリックしている限り、ゲームは正常に動作します。The game works well, as long as the player only chooses pairs of icons that don't match. しかし、プレーヤーが一致するペアをクリックしたらどうなるでしょうか。But consider what should happen when the player chooses a matching pair. (Start() メソッドを使用して) タイマーを有効にしてアイコンを非表示にする代わりに、ゲームでは、それ自体をリセットすることで、クリックされた 2 つのラベルの色はリセットせずに、firstClicked 参照変数および secondClicked 参照変数を使用してラベルを追跡しないようにする必要があります。Instead of making the icons disappear by turning on the timer (using the Start() method), the game should reset itself so that it's no longer keeping track of any labels using the firstClicked and secondClicked reference variables, without resetting the colors for the two labels that were chosen.

ペアの表示を維持するにはTo keep pairs visible

  1. 次の if ステートメントを、label_Click() イベント ハンドラー メソッドの最後の近くの、タイマーを開始するステートメントのすぐ上に追加します。Add the following if statement to the label_Click() event handler method, near the end of the code just above the statement where you start the timer. プログラムにステートメントを追加しながら、コードを注意して見てください。Take a close look at the code while adding it to the program. コードのしくみを検討します。Consider how the code works.

            // 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 つ目のラベルのアイコンと同じかどうかをチェックします。The first line of the if statement you just added checks whether the icon in the first label that the player chooses is the same as the icon in the second label. アイコンが同じである場合、プログラムは、中かっこ内 (Visual C# の場合) または if ステートメント内 (Visual Basic の場合) の 3 つのステートメントを実行します。If the icons are identical, the program executes the three statements between the curly braces in C# or the three statements within the if statement in Visual Basic. 最初の 2 つのステートメントは、firstClicked 参照変数および secondClicked 参照変数をリセットし、これらがラベルを追跡しないようにします The first two statements reset the firstClicked and secondClicked reference variables so that they no longer keep track of any of the labels. (これら 2 つのステートメントが、タイマーの Tick イベント ハンドラーからのものであることを認識できます)。3 つ目のステートメントは return ステートメントであり、メソッドの残りのステートメントを実行せずにスキップするようプログラムに指示します。(You may recognize those two statements from the timer's Tick event handler.) The third statement is a return statement, which tells the program to skip the rest of the statements in the method without executing them.

    Visual C# でプログラミングしている場合、一部のコードでは 1 つの等号 (=) が使用されているのに対し、他のステートメントでは 2 つの等号 (==) が使用されているのに気付きます。If programming in Visual C#, you may have noticed that some of the code uses a single equal sign (=), while other statements use two equal signs (==). ある場所では = が使用されているのに対し、他の場所では == が使用されている理由について考えます。Consider why = is used in some places but == is used in other places.

    違いを示す適切な例を以下に示します。This is a good example that shows the difference. if ステートメントのかっこ内のコードを注意して見てください。Take a careful look at the code between the parentheses in the if statement.

    firstClicked.Text = secondClicked.Text  
    
    firstClicked.Text == secondClicked.Text  
    

    次に、コード ブロック内の、if ステートメントの後の最初のステートメントを注意して見てください。Then look closely at the first statement in the block of code after the if statement.

    firstClicked = Nothing  
    
    firstClicked = null;  
    

    これら 2 つうち最初のステートメントは、2 つのアイコンが同じであるかどうかをチェックします。The first of those two statements checks whether two icons are the same. 2 つの値を比較しているため、Visual C# のプログラムでは、等値演算子 == を使用しています。Because two values are being compared, the Visual C# program uses the == equality operator. 2 つ目のステートメントは、実際の値の変更 (代入と呼ばれます) を行い、firstClicked 参照変数を null に設定してリセットします。The second statement actually changes the value (called assignment), setting the firstClicked reference variable equal to null to reset it. 代わりに代入演算子 = が使用されているのはそのためです。That's why it uses the = assignment operator instead. Visual C# では、= を使用して値を設定し、== を使用して値を比較します。Visual C# uses = to set values, and == to compare them. Visual Basic では、変数の代入と比較の両方に = を使用します。Visual Basic uses = for both variable assignment and comparison.

  2. プログラムを保存したら実行し、フォームでアイコンのクリックを開始します。Save and run the program, and then start choosing icons on the form. 一致しないペアをクリックした場合、タイマーの Tick イベントがトリガーされ、両方のアイコンが非表示になります。If you choose a pair that doesn't match, the timer's Tick event triggers, and both icons disappear. 一致するペアをクリックした場合、新しい if ステートメントが実行され、return ステートメントにより、メソッドでタイマーを開始するコードがスキップされるため、次の図に示すように、アイコンが表示されたままになります。If you choose a matching pair, the new if statement executes, and the return statement causes the method to skip the code that starts the timer, so the icons stay visible, as shown in the following picture.

    このチュートリアルで作成するゲームGame that you create in this tutorial
    アイコンのペアが表示された絵合わせゲームMatching game with visible icon pairs

続行または確認するにはTo continue or review