C++ игра с нуля: Змейка, фрукты и расстановка объектов

Этот текст описывает процесс кодирования расстановки игровых объектов в разработке игры на 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.

После запуска, змейка появится в центре, а фрукт — в случайном месте.

Реализован базовый дизайн игры с расстановкой основных игровых объектов — змейки и фрукта. Дальнейшие шаги включают добавление динамики и игровой механики.

Что будем искать? Например,программа