Шаг 3. Назначение каждой метке случайного значка
Если игра всегда скрывает одни и те же значки в тех же местах, то она становится неинтересной.Необходимо случайным образом назначать значки элементам управления Label в форме.Для этого добавьте метод AssignIconsToSquares().
Назначение каждой метке случайного значка
Перед добавлением следующего кода разберитесь в принципе его работы.В 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); } } }
Добавьте метод 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.)
Сразу же после запуска программы необходимо вызвать метод 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
Сохраните и выполните программу.Должна отобразиться форма со случайными значками, которые назначены каждой метке.
Закройте программу, а затем снова запустите ее.Теперь другие значки назначены каждой метке, как показано на следующем рисунке.
Игра "Подбери пару!" со случайными значками
Теперь остановите программу и раскомментируйте следующую строку кода внутри цикла foreach.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
Нажмите кнопку панели инструментов Сохранить все для сохранения программы и снова запустите ее.Похоже, что значки исчезли. Отображается только голубой фон.Однако значки назначены случайным образом и по-прежнему существуют.Поскольку значки того же цвета, что и фон, они невидимы.
Продолжить или повторить пройденный материал
Следующий шаг руководства см. в разделе Шаг 4. Добавление к каждой метке обработчика событий щелчка мышью.
Предыдущий шаг руководства см. в разделе Шаг 2. Добавление случайного объекта и списка значков.