Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой серии четырех руководств вы создаете соответствующую игру, где игрок сопоставляет пары скрытых значков.
В соответствующей игре игрок выбирает квадрат, чтобы увидеть значок, а затем выбирает другой квадрат. Если значки совпадают, они остаются видимыми. В противном случае игра скрывает оба значка. В этом руководстве вы назначите значки меткам случайным образом. Вы настраиваете их для скрытия, а затем отображаете при выборе.
В этом втором руководстве описано, как:
- Добавьте случайный объект и список значков.
- Назначьте случайный значок каждой метки.
- Добавьте обработчики событий, отображающие значки на метки.
Необходимые условия
В этом руководстве описывается предыдущее руководство, создание соответствующего игрового приложения. Если вы еще не прошли этот урок, сначала пройдите его.
Добавление случайного объекта и списка значков
В этом разделе вы создадите набор совпадающих символов для игры. Каждый символ добавляется к двум случайным ячейкам в таблице TableLayoutPanel в форме.
Инструкции new
используются для создания двух объектов.
Первым является объект Random, который случайным образом выбирает ячейки в TableLayoutPanel.
Второй объект является объектом List<T>.
Он хранит случайные выбранные символы.
Откройте Visual Studio. Проект MatchingGame отображается в разделе Открыть последние.
Выберите Form1.cs, если вы используете C#, или Form1.vb, если вы используете Visual Basic. Затем выберите Просмотреть код>. В качестве альтернативы выберите клавишу F7 или дважды щелкните Form1. Интегрированная среда разработки Visual Studio отображает модуль кода для Form1.
В существующем коде добавьте следующий код.
public partial class Form1 : Form { // Use this Random object to choose random icons for the squares Random random = new Random(); // Each of these letters is an interesting icon // in the Webdings font, // and each icon appears twice in this list List<string> icons = new List<string>() { "!", "!", "N", "N", ",", ",", "k", "k", "b", "b", "v", "v", "w", "w", "z", "z" };
Если вы используете C#, обязательно поместите код после открывающей фигурной скобки и сразу после объявления класса (public partial class Form1 : Form
). Если вы используете Visual Basic, поместите код сразу после объявления класса (Public Class Form1
).
Объекты списка можно использовать для отслеживания различных типов элементов. Список может содержать числа, значения true/false, текст или другие объекты. В соответствующей игре объект списка имеет 16 строк, по одному для каждой ячейки на панели TableLayoutPanel. Каждая строка — это одна буква, соответствующая значкам в метках. Эти символы отображаются в шрифте Webdings как автобус, велосипед и другие.
Заметка
Списки могут уменьшаться и расти по мере необходимости, что важно в этой программе.
Дополнительные сведения о списках см. в List<T>. Чтобы просмотреть пример в C#, см. базовый пример списка. Пример в Visual Basic см. в статье Использование простой коллекции.
Назначение случайного значка каждой метки
При каждом запуске программы он назначает значки случайным образом элементам управления Label в форме с помощью метода AssignIconsToSquares()
.
Этот код использует ключевое слово foreach
в C# или For Each
в Visual Basic.
Добавьте метод
AssignIconsToSquares()
дляForm1.cs
илиForm1.vb
./// <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()
выполняет итерацию по каждому элементу управления метки в TableLayoutPanel.
Он выполняет одни и те же инструкции для каждого из них.
Утверждения извлекают случайный значок из списка.
- Первая строка преобразует переменную элемента управления в метку с именем iconLabel.
- Вторая строка — это оператор
if
, который проверяет, работает ли преобразование. Если преобразование работает, инструкции в инструкцииif
выполняются. - Первая строка в инструкции
if
создает переменную с именем randomNumber, содержащую случайное число, соответствующее одному из элементов в списке значков. Он использует метод Next() объекта Random. МетодNext
возвращает случайное число. Эта строка также использует свойство Count значков для определения диапазона, от которого следует выбрать случайное число. - Следующая строка назначает один из значков элементов списка свойству Text метки.
- Следующая строка скрывает значки. Строка закомментирована здесь, чтобы проверить остальную часть кода перед продолжением.
- Последняя строка в инструкции
if
удаляет значок, добавленный в форму из списка.
Добавьте вызов метода
AssignIconsToSquares()
в конструкторе Form1 вForm1.cs
. Этот метод заполняет игровую доску иконками. Конструкторы вызываются при создании объекта.public Form1() { InitializeComponent(); AssignIconsToSquares(); }
Для Visual Basic добавьте вызов метода
AssignIconsToSquares()
в методForm1_Load
вForm1.vb
.Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AssignIconsToSquares() End Sub
Для получения дополнительной информации см. Конструкторы (руководство по программированию на C#) или Использование конструкторов и деструкторов.
Сохраните программу и запустите ее. Он должен отображать форму со случайными значками, назначенными каждой метки.
Совет
Если значки Webdings не отображаются правильно в форме, установите значение свойства UseCompatibleTextRendering меток этой формы на True.
Закройте программу и снова запустите ее. Для каждой метки назначаются разные значки.
Теперь значки видны, так как они не скрыты. Чтобы скрыть их от проигрывателя, можно задать для каждого свойства ForeColor тот же цвет, что и свойство BackColor.
Остановите программу. Удалите метки комментариев для закомментированной строки кода внутри цикла в методе
AssignIconsToSquares()
.
Если вы снова запустите программу, значки, кажется, исчезли. Отображается только синий фон. Значки случайным образом назначаются и по-прежнему находятся там.
Добавьте обработчики событий к меткам
В этой соответствующей игре игрок показывает скрытый значок, а затем второй. Если значки совпадают, они остаются видимыми. В противном случае оба значка снова скрыты.
Чтобы игра работала, добавьте обработчик события Click, который изменяет цвет выбранной метки в соответствии с фоном.
Откройте форму в конструкторе Windows Forms. Выберите Form1.cs или Form1.vb, а затем выберите View>Designer.
Выберите первый элемент управления меткой, чтобы выбрать его и дважды щелкните его, чтобы добавить обработчик событий
Click
с именем label1 _Click() в код.Затем удерживайте клавишу CTRL при выборе каждой из других меток. Убедитесь, что выбрана каждая метка.
В окне "Свойства " нажмите кнопку "События", обозначенную молнией. Для события Щелчок выберите в поле label1_Click.
Нажмите клавишу ВВОД. Интегрированная среда разработки автоматически добавляет обработчик событий
Click
с именем label1 _Click() в код в Form1.cs или Form1.vb. Так как вы выбрали все метки, обработчик подключается к каждой из меток.Заполните остальную часть кода.
/// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; clickedLabel.ForeColor = Color.Black; } }
Заметка
Если вы копируете и вставляете блок кода label1_Click()
вместо ввода кода вручную, обязательно замените существующий код label1_Click()
.
В противном случае вы в конечном итоге будете использовать повторяющийся блок кода.
Выберите Отладка>Запуск отладки, чтобы выполнить программу. Вы увидите пустую форму с синим фоном. Выберите любую ячейку в форме. Один из значков должен стать видимым. Продолжайте выбирать разные места в форме. При выборе значков они должны отображаться.
Дальнейшие действия
Перейдите к следующему учебному пособию, чтобы узнать, как с помощью таймера изменять ярлыки.