Добавим в игру сбор монет и подсчет очков.
Добавление монеток
Добавим новый объект PictureBox. Выберите изображение монетки (можно скачать с сайта iproger.com или использовать своё). Установите размер объекта, например, 32×32 пикселя. Измените BackColor на стандартный цвет (например, 64, 64, 64). Назовите объект «Coin». Изначально монетка будет невидима, установив её координату Y в -600 пикселей. Это обеспечит появление монеток после появления машинок.
Движение монеток
В таймере добавим код для движения монеток. Будем обращаться к свойству Top объекта Coin и добавлять к нему скорость, соответствующую скорости заднего фона:
Coin.Top += скорость_фону;
Добавим условие: если Coin.Top достигает 650 пикселей, монетка перемещается за экран, устанавливая Coin.Top в -50 пикселей.
Случайное появление монеток
Для случайного появления монеток в разных местах, используем код, аналогичный тому, который использовался для врагов. Будем получать случайные координаты для Coin в диапазоне от 150 до 560 пикселей по оси X. Пример кода для генерации случайных координат будет приведен позднее.
Подсчет очков
Добавим текстовую надпись для вывода количества собранных монет. Скопируем существующую надпись, изменим текст на «Монеты: 0» и уменьшим размер шрифта. Переименуем объект в labelCoins.
Отслеживание столкновений
В методе таймера добавим код для отслеживания столкновений игрока и монеты с помощью метода IntersectsWith. Создадим переменную countCoins со значением 0:
int countCoins = 0;
Если происходит столкновение, увеличиваем countCoins на 1 и обновляем текст labelCoins:
if (игрок.Bounds.IntersectsWith(Coin.Bounds))
{
countCoins++;
labelCoins.Text = $"Монеты: {countCoins}";
// Перемещаем монетку за экран
}
Рекомендуется создать отдельную функцию для перемещения монетки за экран, вместо копирования кода.
Сброс состояния после перезапуска
После перезапуска игры счетчик монет и позиция монетки не сбрасывались. Для исправления добавим в обработчик события перезапуска игры сброс переменной countCoins в 0 и перемещение монеты за экран:
countCoins = 0;
labelCoins.Text = "Монеты: 0";
Coin.Top = -500;
В результате мы получили играбельный проект с анимацией, сбором монет и подсчетом очков. Игру можно перезапускать, а счетчик очков корректно обновляется.