Этот текст описывает процесс кодирования расстановки игровых объектов в разработке игры на C++. Настроим базовые параметры игрового окна и создадим механизм для случайного появления змейки и фрукта.
Настройка игрового окна
Настройки окна задаются либо в графическом конструкторе, либо в коде. Для работы с кодом, откройте окно GameForm правой кнопкой мыши и выберите «Перейти к коду». В коде находится класс GameForm с конструктором, деструктором и функцией InitializeComponent. В этой функции устанавливаются параметры проекта.
Изменим размер окна на 400×400 пикселей, зададим название «Snake Game» и установим черный цвет фона (Color.Black). Запустите проект для проверки изменений. Конструктор может выдавать ошибки, но в этом примере он не понадобится.
Переменные для позиций змейки и фрукта
Создадим переменные для хранения позиций змейки и фрукта, используя класс Point. Переменные объявлены с модификатором private для инкапсуляции:
private:
Point SnakePosition;
Point FRPosition;
const int BlockSize = 20;
BlockSize — константа, определяющая размер блоков в игре (змейки, фрукта и т.д.).
Расстановка змейки и фрукта
В функции InitializeComponent разместим змейку в центре экрана, а фрукт — в случайном месте. Для определения центра экрана используем свойства ClientSize.Width и ClientSize.Height. Для генерации случайных координат фрукта, создадим функцию PlaceFruit:
void PlaceFruit() {
srand(time(NULL)); // Инициализация генератора случайных чисел
int maxX = ClientSize.Width / BlockSize;
int maxY = ClientSize.Height / BlockSize;
int newX = rand() % maxX * BlockSize;
int newY = rand() % maxY * BlockSize;
FRPosition = Point(newX, newY);
}
Функция PlaceFruit использует srand(time(NULL)) для инициализации генератора случайных чисел и rand() для генерации случайных координат. Координаты переводятся в пиксели с учётом BlockSize.
Отрисовка объектов
Для отображения змейки и фрукта, переопределим метод OnPaint. Создадим обработчик событий PaintEventHandler:
this->Paint += gcnew PaintEventHandler(this, &GameForm::OnPaint);
Функция OnPaint принимает параметры System::Object^ sender и System::Windows::Forms::PaintEventArgs^ e. Внутри функции создадим объекты Graphics и Brush для рисования:
protected:
virtual void OnPaint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) override {
Graphics^ g = e->Graphics;
SolidBrush^ snakeBrush = gcnew SolidBrush(Color::Green);
SolidBrush^ fruitBrush = gcnew SolidBrush(Color::Red);
g->DrawRectangle(snakeBrush, SnakePosition.X, SnakePosition.Y, BlockSize, BlockSize);
g->DrawRectangle(fruitBrush, FRPosition.X, FRPosition.Y, BlockSize, BlockSize);
}
Используем метод DrawRectangle для рисования прямоугольников (квадратов) для змейки и фрукта, используя созданные объекты Brush и координаты из SnakePosition и FRPosition.
После запуска, змейка появится в центре, а фрукт — в случайном месте.
Реализован базовый дизайн игры с расстановкой основных игровых объектов — змейки и фрукта. Дальнейшие шаги включают добавление динамики и игровой механики.