Шаг 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 = 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
/// <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.Цикл For Each можно использовать в любое время для неоднократного выполнения одно и того же действия.В данном случае требуется выполнять одни и те же операторы для каждой метки в TableLayoutPanel, как показано в следующем коде.Первая линия создается переменная control были хранит каждый элемент управления поочередно пока этот элемент управления имеет выписки в цикле выполненном с ней.
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.)
Просмотрите более точного на коде, который выполняется внутри foreach OR For Each цикл.Этот код воспроизведен здесь.
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
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); }
Первая линия " control переменная к a Label имя iconLabel.After, линия if выписка, проверяется, чтобы убедиться, что преобразование работала.Если преобразование работает, выписки в if запуск выписки.Первая линия в if выписка создается переменная randomNumber содержит случайное число, которое соответствует одному из элементов списка значков.Для этого он использует Next метод Random объект, созданный ранее.Next метод возвращает случайное число.Эта линия также использует Count свойство icons перечисление, чтобы определить диапазон, из которого выбрать случайное число.Следующая линия присвоит один из элементов списка значков к Text свойство метки.Закомментированная линия объяснена далее в этом разделе.Наконец, являются последней линией в if оператор удаляет из списка значок, который был добавлен на форму.
Помните, чтобы убедиться в правильности, что некоторая часть кода, можно поместите указатель мыши находится над элементом кода не связан такой комментарий и просмотреть результирующий подсказку.
Сразу же после запуска программы необходимо вызвать метод 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
Сохраните и выполните программу.Должна отобразиться форма со случайными значками, которые назначены каждой метке.
Закройте программу, а затем снова запустите ее.Теперь другие значки назначены каждой метке, как показано на следующем рисунке.
Игра "Подбери пару!" со случайными значками
Теперь остановите программу и раскомментируйте следующую строку кода внутри цикла For Each.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
Нажмите кнопку панели инструментов Сохранить все для сохранения программы и снова запустите ее.Похоже, что значки исчезли. Отображается только голубой фон.Однако значки назначены случайным образом и по-прежнему существуют.Поскольку значки того же цвета, что и фон, они невидимы.
Продолжить или повторить пройденный материал
Следующий шаг руководства см. в разделе Шаг 4. Добавление к каждой метке обработчика событий щелчка мышью.
Предыдущий шаг руководства см. в разделе Шаг 2. Добавление случайного объекта и списка значков.