Поделиться через


Шаг 3. Назначение каждой метке случайного значка

Если игра всегда скрывает одни и те же значки в тех же местах, то она становится неинтересной.Необходимо случайным образом назначать значки элементам управления Label в форме.Для этого добавьте метод AssignIconsToSquares().

Назначение каждой метке случайного значка

  1. Перед добавлением следующего кода разберитесь в принципе его работы.В C# есть новое ключевое слово foreach, а в Visual Basic — For Each.(Одна из строк закомментирована по причине, описанной в конце этой процедуры.)

    ''' <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 As Label = TryCast(control, Label)
            If iconLabel IsNot Nothing Then
                Dim randomNumber As Integer = random.Next(icons.Count)
                iconLabel.Text = icons.ElementAt(randomNumber)
                ' iconLabel.ForeColor = iconLabel.BackColor
                icons.RemoveAt(randomNumber)
            End If
        Next
    
    End Sub
    
    /// <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);
            }
        }
    } 
    
  2. Добавьте метод AssignIconsToSquares(), как показано в предыдущем шаге.Можно поместить его сразу же после кода, добавленного в разделе Шаг 2. Добавление случайного объекта и списка значков.

    В методе AssignIconsToSquares() имеется некоторое нововведение: цикл foreach в C# и For Each в Visual Basic.Цикл foreach можно использовать в любое время для неоднократного выполнения одно и того же действия.В данном случае требуется выполнять одни и те же операторы для каждой метки в TableLayoutPanel, как показано в следующем коде.

    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
    
    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
    }
    

    Примечание

    Используются имена iconLabel и control, поскольку они являются описательными.Можно изменить эти имена на другие. Это не повлияет на их работу (при условии, что будут изменены имена в каждом операторе внутри фигурных скобок).

    Метод AssignIconsToSquares() проходит через каждый элемент управления Label в TableLayoutPanel и выполняет одни и те же операторы для каждого из них.Эти операторы запрашивают случайные значки из списка, добавленного в разделе Шаг 2. Добавление случайного объекта и списка значков.(Вот почему в список включено по два значка. Это позволяет назначить пару значков случайным элементам управления Label.)

  3. Сразу же после запуска программы необходимо вызвать метод AssignIconsToSquares().При написании кода на языке Visual C# добавьте оператор после вызова метода InitializeComponent() в конструкторе Form1. Таким образом форма будет вызывать ваш новый метод для его настройки перед отображением.

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

    Для Visual Basic сначала добавьте конструктор, а затем добавьте вызов метода в конструктор.Перед только что созданным методом AssignIconsToSquares() введите код Public Sub New().При нажатии клавиши ВВОД для перехода к следующей строке функция IntelliSense должна отобразить следующий код для завершения конструктора.

    Public Sub New()
        ' This call is required by Windows Form Designer
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call
    End Sub
    

    Добавьте вызов метода AssignIconsToSquares(), чтобы ваш конструктор выглядел следующим образом.

    Public Sub New()
        ' This call is required by Windows Form Designer
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call
        AssignIconsToSquares()
    End Sub
    
  4. Сохраните и выполните программу.Должна отобразиться форма со случайными значками, которые назначены каждой метке.

  5. Закройте программу, а затем снова запустите ее.Теперь другие значки назначены каждой метке, как показано на следующем рисунке.

    Игра "Подбери пару!" со случайными значками

    Игра "Подбери пару!" со случайными значками

  6. Теперь остановите программу и раскомментируйте следующую строку кода внутри цикла foreach.

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. Нажмите кнопку панели инструментов Сохранить все для сохранения программы и снова запустите ее.Похоже, что значки исчезли. Отображается только голубой фон.Однако значки назначены случайным образом и по-прежнему существуют.Поскольку значки того же цвета, что и фон, они невидимы.

Продолжить или повторить пройденный материал