Это руководство демонстрирует создание упрощенной игры на C# и WinForms. Использование WinForms упрощает начало работы с C# по сравнению со специализированными игровыми движками.
Добавление ресурсов
Добавим в проект изображения для игры. В обозревателе решений щелкните правой кнопкой мыши на проекте, выберите «Добавить» -> «Создать элемент», затем «Файл ресурсов». Назовите его (например, «Resources»). В открывшемся редакторе нажмите «Добавить существующие файлы», выберите необходимые изображения и нажмите «Открыть». Теперь ресурсы являются частью проекта и будут включены в исполняемый файл.
Настройка формы и обработка события Paint
Настроим форму. В свойствах формы укажите картинку из файла ресурсов в качестве BackgroundImage (например, Resources.one.jpg).
Подпишемся на событие Paint формы для отрисовки элементов. Добавим в класс формы два поля типа Bitmap: circle1 и circle2 для хранения изображений кругов. Инициализируем их:
circle1 = (Bitmap)Properties.Resources.ResourceManager.GetObject("circle1");
circle2 = (Bitmap)Properties.Resources.ResourceManager.GetObject("circle2");
В обработчике события Paint будем рисовать изображения с помощью DrawImage:
e.Graphics.DrawImage(circle1, 100, 100, 100, 100);
e.Graphics.DrawImage(circle2, 200, 200, 100, 100);
Добавление таймера и оптимизация отрисовки
Добавим на форму таймер с интервалом 25 миллисекунд и подпишемся на его событие Tick. В обработчике вызовем Refresh для перерисовки формы и обновим позицию круга. Для устранения мерцания, в свойствах формы установим DoubleBuffered, OptimizedDoubleBuffer и AllPaintingInWmPaint в true.
В обработчике события Paint получим текущую позицию курсора с помощью Cursor.Position, переведем её в координаты формы с помощью PointToClient и вычтем половину размера круга для корректного отображения:
Point localPos = this.PointToClient(Cursor.Position);
e.Graphics.DrawImage(circle1, localPos.X - 50, localPos.Y - 50, 100, 100);
Движение цели и проверка столкновений
Создадим поле targetPosition типа Point для позиции второго круга (цели). Добавим второй таймер для изменения направления движения цели. Используем поле direction типа Point как нормализованный вектор направления. При выходе цели за границы формы, изменим направление на противоположное. Добавим проверку на столкновение с целью.
В этом руководстве создана простая игра с движущимися кругами. Пример демонстрирует основы работы с графикой в WinForms и обработку событий. Дальнейшее развитие может включать увеличение сложности, улучшение графики и добавление новых функций.