3단계: 각 레이블에 임의 아이콘 할당Step 3: Assign a Random Icon to Each Label

모든 게임의 동일한 셀에 이 아이콘이 표시되는 경우 게임이 재미가 없습니다.If the icons show up in the same cells every game, it's not very challenging. 이를 방지하려면 AssignIconsToSquares() 메서드를 사용하여 폼의 레이블 컨트롤에 아이콘을 임의로 할당합니다.To avoid this, assign the icons randomly to the label controls on your form by using an AssignIconsToSquares() method.

각 레이블에 임의의 아이콘을 할당하려면To assign a random icon to each label

  1. 다음 코드를 추가하기 전에 메서드가 동작하는 방식을 고려해야 합니다.Before adding the following code, consider how the method works. Visual C#에는 foreach, Visual Basic에는 For Each라는 새 키워드가 사용됩니다.There's a new keyword: foreach in Visual C# and For Each in Visual Basic. 코드 줄 중 하나가 주석 처리되어 있으며 이에 대해서는 이 절차의 끝 부분에서 설명합니다.(One of the lines is commented out on purpose, which is explained at the end of this procedure.)

    /// <summary>
    /// Assign each icon from the list of icons to a random square
    /// </summary>
    private void AssignIconsToSquares()
    {
        // The TableLayoutPanel has 16 labels,
        // and the icon list has 16 icons,
        // so an icon is pulled at random from the list
        // and added to each label
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            Label iconLabel = control as Label;
            if (iconLabel != null)
            {
                int randomNumber = random.Next(icons.Count);
                iconLabel.Text = icons[randomNumber];
                // iconLabel.ForeColor = iconLabel.BackColor;
                icons.RemoveAt(randomNumber);
            }
        }
    } 
    
    ''' <summary>
    ''' Assign each icon from the list of icons to a random square
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub AssignIconsToSquares()
    
        ' The TableLayoutPanel has 16 labels,
        ' and the icon list has 16 icons,
        ' so an icon is pulled at random from the list
        ' and added to each label
        For Each control In TableLayoutPanel1.Controls
            Dim iconLabel = TryCast(control, Label)
            If iconLabel IsNot Nothing Then
                Dim randomNumber = random.Next(icons.Count)
                iconLabel.Text = icons(randomNumber)
                ' iconLabel.ForeColor = iconLabel.BackColor
                icons.RemoveAt(randomNumber)
            End If
        Next
    
    End Sub
    
  2. 이전 단계와 같이 AssignIconsToSquares() 메서드를 추가합니다.Add the AssignIconsToSquares() method as shown in the previous step. 이 메서드를 2단계: 임의의 개체 및 아이콘 목록 추가에서 추가한 코드 바로 다음에 둡니다.You can put it just below the code you added in Step 2: Add a Random Object and a List of Icons.

    앞서 언급했듯이, AssignIconsToSquares() 메서드에 foreach 루프(Visual C#의 경우)와 For Each(Visual Basic의 경우)라는 새로운 키워드가 있습니다.As mentioned earlier, there's something new in your AssignIconsToSquares() method: a foreach loop in Visual C# and For Each in Visual Basic. 같은 작업을 여러 번 수행하려는 경우 언제든지 For Each 루프를 사용할 수 있습니다.You can use a For Each loop any time you want to do the same action multiple times. 이 경우에는 다음 코드에서 설명하는 것처럼 TableLayoutPanel의 모든 레이블에 대해 같은 문을 실행하려고 합니다.In this case, you want to execute the same statements for every label on your TableLayoutPanel, as explained by the following code. 첫 번째 줄에서는 컨트롤에서 실행되는 루프에 문이 있을 때 각 컨트롤을 한 번에 하나씩 저장하는 control이라는 변수를 만듭니다.The first line creates a variable named control that stores each control one at a time while that control has the statements in the loop executed on it.

    foreach (Control control in tableLayoutPanel1.Controls)
    {
        // The statements you want to execute 
        // for each label go here
        // The statements use iconLabel to access 
        // each label's properties and methods
    }
    
    For Each control In TableLayoutPanel1.Controls
        ' The statements you want to execute 
        ' for each label go here
        ' The statements use iconLabel to access 
        ' each label's properties and methods
    Next
    

    참고

    "iconLabel" 및 "control"과 같이 의미를 알기 쉬운 이름이 사용되었습니다.The names "iconLabel" and "control" are used because they are descriptive. 이러한 이름은 다른 이름으로 바꿀 수 있으며, 코드는 루프 내의 각 문에서 이름을 변경하는 한 동일하게 작동합니다.You can replace these names with any names, and the code will work exactly the same as long as you change the name in each statement inside the loop.

    AssignIconsToSquares() 메서드는 TableLayoutPanel의 각 Label 컨트롤을 반복하고 각 컨트롤에 대해 동일한 문을 실행합니다.The AssignIconsToSquares() method iterates through each label control in the TableLayoutPanel and executes the same statements for each of them. 이러한 문은 2단계: 임의의 개체 및 아이콘 목록 추가에서 추가한 목록에서 임의의 아이콘을 끌어옵니다.Those statements pull a random icon from the list that you added in Step 2: Add a Random Object and a List of Icons. 이 때문에 각 아이콘을 두 개씩 목록에 포함했습니다. 따라서 임의의 Label 컨트롤에 아이콘 쌍이 할당됩니다.(That's why you included two of each icon in the list, so there would be a pair of icons assigned to random label controls.)

    foreach 또는 For Each 루프 내에서 실행되는 코드에 대해 보다 자세히 살펴봅니다.Look more closely at the code that runs inside the foreach or For Each loop. 이 코드가 여기에 재현되어 있습니다.This code is reproduced here.

    Label iconLabel = control as Label;
    if (iconLabel != null)
    {
        int randomNumber = random.Next(icons.Count);
        iconLabel.Text = icons[randomNumber];
        // iconLabel.ForeColor = iconLabel.BackColor;
        icons.RemoveAt(randomNumber);
    }
    
    Dim iconLabel = TryCast(control, Label)
    If iconLabel IsNot Nothing Then
        Dim randomNumber = random.Next(icons.Count)
        iconLabel.Text = icons(randomNumber)
        ' iconLabel.ForeColor = iconLabel.BackColor
        icons.RemoveAt(randomNumber)
    End If
    

    첫 번째 줄은 control 변수를 iconLabel이라는 레이블로 변환합니다.The first line converts the control variable to a label named iconLabel. 그 다음 줄은 변환이 작동했는지 확인하는 if 문입니다.The line after that is an if statement that checks to make sure the conversion worked. 변환이 작동하지 않은 경우 if 문에서 이 문을 실행합니다.If the conversion does work, the statements in the if statement run. (이전 자습서에서 확인한 바와 같이, 지정한 모든 조건을 평가하는 데에 if 문을 사용합니다.) if 문의 첫 번째 줄은 아이콘 목록의 항목 중 하나에 해당하는 난수가 포함된 randomNumber라는 변수를 만듭니다.(As you may recall from the previous tutorials, the if statement is used to evaluate whatever condition you specify.) The first line in the if statement creates a variable named randomNumber that contains a random number that corresponds to one of the items in the icons list. 이를 위해 이전에 만든 Next 개체의 Random 메서드가 사용됩니다.To do this, it uses the Next method of the Random object that you created earlier. Next 메서드는 난수를 반환합니다.The Next method returns the random number. 이 줄에서는 또한 Count 목록의 icons 속성을 사용하여 난수를 선택할 수 있는 범위를 결정합니다.This line also uses the Count property of the icons list to determine the range from which to choose the random number. 다음 줄은 레이블의 Text 속성에 아이콘 목록 항목 중 하나를 할당합니다.The next line assigns one of the icon list items to the Text property of the label. 주석 처리된 줄은 이 항목의 뒷부분에 설명되어 있습니다.The commented-out line is explained later in this topic. 끝으로 if 문의 마지막 줄은 폼에 추가된 아이콘을 목록에서 제거합니다.Finally, the last line in the if statement removes from the list the icon that has been added to the form.

    코드의 일부 기능에 대해 잘 모를 경우 마우스 포인터를 코드 요소 위에 놓으면 나타나는 도구 설명을 검토할 수 있습니다.Remember, if you're not sure about what some part of the code does, you can position the mouse pointer over a code element and review the resulting tooltip. Visual Studio 디버거를 사용하여 프로그램이 실행되는 동안 코드의 각 줄을 단계별로 실행할 수 있습니다.You can also step through each line of code while the program is running by using the Visual Studio debugger. 자세한 내용은 How Do I: Step with The Debugger in Visual Studio?(방법: Visual Studio에서 디버거를 사용하여 단계별 실행) 또는 디버거로 코드 탐색을 참조하세요.See How Do I: Step with The Debugger in Visual Studio? or Navigating through Code with the Debugger for more information.

  3. 게임 보드를 아이콘으로 채우려면 프로그램이 시작되자 마자 AssignIconsToSquares() 메서드를 호출해야 합니다.To fill up the game board with icons, you need to call the AssignIconsToSquares() method as soon as the program starts. Visual C#을 사용하는 경우 Form1 생성자에서 InitializeComponent() 메서드 호출 바로 아래에 문을 추가합니다. 그러면 폼이 표시되기 전에 폼을 설정하는 새로운 메서드가 호출됩니다.If you're using Visual C#, add a statement just below the call to the InitializeComponent() method in the Form1constructor, so your form calls your new method to set itself up before it's shown. 생성자는 클래스 또는 구조체와 같은 새 개체를 만들 때 호출됩니다.Constructors are called when you create a new object, such as a class or struct. 자세한 내용은 Visual Basic의 생성자(C# 프로그래밍 가이드) or 생성자 및 소멸자 사용을 참조하세요.See Constructors (C# Programming Guide) or Using Constructors and Destructors in Visual Basic for more information.

    public Form1()
    {
        InitializeComponent();
    
        AssignIconsToSquares();
    }
    

    Visual Basic의 경우 AssignIconsToSquares() 메서드를 호출하는 Form1_Load 메서드를 추가합니다. 코드는 다음과 같습니다.For Visual Basic, add the AssignIconsToSquares() method call to the Form1_Load method so that the code looks like the following.

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  
        AssignIconsToSquares()  
    End Sub  
    
  4. 프로그램을 저장하고 실행합니다.Save your program and run it. 각 레이블에 임의의 아이콘이 할당된 폼이 나타납니다.It should show a form with random icons assigned to each label.

  5. 프로그램을 닫고 다시 실행합니다.Close your program, and then run it again. 다음 그림과 같이 각 레이블에 서로 다른 아이콘이 할당됩니다.Notice that different icons are assigned to each label, as shown in the following picture.

    임의의 아이콘을 표시하는 일치 게임Matching game with random icons
    임의의 아이콘을 표시하는 일치 게임Matching game with random icons

    아이콘을 숨기지 않았으므로 지금은 아이콘이 보입니다.The icons are visible now because you haven't hidden them. 플레이어에서 아이콘을 숨기려면 각 레이블의 Forecolor 속성을 해당 BackColor 속성과 같은 색으로 설정하면 됩니다.To hide them from the player, you can set each label's Forecolor property to the same color as its BackColor property.

    레이블과 같은 컨트롤을 숨기는 또 다른 방법은 해당 Visible 속성을 False로 설정하는 것입니다.Another way to hide controls like labels is to set their Visible property to False.

  6. 아이콘을 숨기려면 프로그램을 중지하고 For Each 루프 내 코드의 주석 처리된 줄에 대한 주석 표시를 제거합니다.To hide the icons, stop the program and remove the comment marks for the commented line of code inside the For Each loop.

    iconLabel.ForeColor = iconLabel.BackColor;
    
    iconLabel.ForeColor = iconLabel.BackColor
    
  7. 메뉴 모음에서 모두 저장 단추를 선택하여 프로그램을 저장하고 실행합니다.On the menu bar, choose the Save All button to save your program, and then run it. 아이콘이 사라진 것처럼 보이고 파란색 배경만 나타납니다.The icons seem to have disappeared—only a blue background appears. 그러나 아이콘이 임의로 할당되어 그대로 남아 있습니다.However, the icons are randomly assigned and are still there. 아이콘이 배경과 같은 색이므로 플레이어에게 보이지 않는 것입니다.Because the icons are the same color as the background, it hides them from the player. 어쨌든, 플레이어가 모든 아이콘을 바로 볼 수 있으면 아주 어려운 게임이 될 수 없습니다.After all, it wouldn't be a very challenging game if the player could see all of the icons right away!

계속하거나 검토하려면To continue or review