Часть 1. "Знакомство"

Предыдущая тема

Со времени своего рождения, в первые 10-15 лет человек совершает множество открытий для себя, которые наполняют его мир новыми впечатлениями и новыми красками. В этот период формируется осознание себя и виденье своего будущего, кем он должен стать и какую профессию освоить. Зачастую наши желания не совпадают с тем выбором, который мы осуществляем, и мечты остаются мечтами, а жизнь из сказки превращается в серую и унылую реку, уносящую нашу молодость и крадущую наше время. И вот седой старик смотрит в окно, погружаясь в прошлое, забывая о настоящем, забыв о том, что жизнь продолжается, и пока мы живы у нас всегда есть шанс осуществить свои мечты.

Не изменяйте своей мечте, пишите код!

Мне бы очень хотелось, чтобы моя работа помогла всем желающим погрузиться в мир написания компьютерных игр. Ведь человек подобно Богу должен творить, в этом, наверное, и заключается смысл жизни - дать жизнь чему-то новому, сделав мир ещё прекрасней!

Пчела на работе

Пчела на работе – простая компьютерная игра, написанная на С++ используя мультимедийную библиотеку SFML.

Желающие ознакомиться с игрою могут:

скачать игру “Пчела на работе” с Telegram канала;

клонировать репозиторий игры “Пчела на работе” с GitHub.

Клонирование репозитория

Не сложно понять, что человек, который только начинает свой путь в роли программиста может не знать таких понятий, как Git или CMake. Я не ставлю своей задачей раскрыть эти вопросы, моя цель показать, как работает механизм адаптации моего проекта к Вашей операционной системе и среде разработки программного обеспечения.

Как клонировать репозиторий в Visual Studio 2022?

1.     Перейти по ссылке клонировать репозиторий на интернет-ресурс GitHub.

2.     Скопировать в буфер ссылку на репозиторий.

3.     Вставить ссылку в Visual Studio в разделе клонировать репозиторий.

4.     Скачать мультимедийную библиотеку SFML

5.     Разархивировать библиотеку на диск C:\ в папку IT

C:\IT\SFML-2.5.1-windows-vc15-64-bit\SFML-2.5.1

Также обратите внимание чтобы в Visual Studio была установлена рабочая нагрузка “Разработка классических приложений на С++”

Сборка проекта с помощью CMake в Windows

1.     Скачиваем и устанавливаем СMake утилиту.

2.     Скачиваем и устанавливаем PowerShell

3.     Скачиваем и распаковываем zip архив с проектом в удобную для нас папку.

4.   Запускаем терминал PowerShell и переходим в папку с распакованным проектом c помощью команды: cd

5.     Собираем проект командой: cmake -S . -B build

При желании можно собрать релиз командой: cmake --build build --config Release

6.     Заходим в папку build и открываем проект

7.     Назначаем проект в качестве запускаемого и можем начинать работать

Назначение классов в проекте

В состав проекта входит файл main.cpp, в котором находится основная функция для языка программирования С++, функция main. Функция main служит отправной точкой для выполнения программы.

#include "Engen.h"

using namespace sf;

int main()
{
    // Создаём объект игровой движок
    Engen myGame;
    // Запускаем игровой движок
    myGame.run();
   
    return 0;
}

Заголовочный файл Engine.h (игровой движок), является базовым классом компьютерной игры. Все последующие классы выполняют свою работу внутри класса игровой движок.

Заголовочный файл GameMenu.h (игровое меню), класс, который позволяет создавать объекты с пунктами выбора игрового меню.

Файл GameSound.h – это класс, который создаёт объект звуковых эффектов для игры.

Заголовочный файл Player.h – это класс игрового персонажа пчелы, в нём реализованы все свойства и методы, которые анимируют и перемещают объект пчелы.

HealthBarClass.h – класс, который позволяет создавать объекты полоса прогресса.

AssetManager.h – класс управления игровыми ассетами: музыкой, текстурами, картинками.

Animator.h – класс, создаёт анимацию для объектов типа Sprite.

Класс Engen

#pragma once

#include<SFML/Graphics.hpp>
#include<memory>

class Engen
{
	// Умный указатель на графическое окно 
	std::unique_ptr<sf::RenderWindow> window = std::make_unique<sf::RenderWindow>(sf::VideoMode(1280, 720),
		L"Пчела на работе", sf::Style::Default);
	// Игровой фон в виде прямоугольника
	sf::RectangleShape background = sf::RectangleShape(sf::Vector2f(1280, 720));
	// Текстура прямоугольника
	sf::Texture background_texture;
	// Метод обработки событий 
	void input();
	// Метод обновления переменных, свойств и методов 
	void update(sf::Time const & deltaTime);
	// Метод отрисовки объектов в графическом окне
	void draw();

public:
	// Конструктор
	Engen();
	// Метод запуска игрового цикла
	void run();

};

В заготовке класса движок, мы с помощью методов делим игровой процесс на основные разделы: обработка событий, обновления значений переменных, отрисовка объектов.

Метод обработки событий, будет обрабатывать нажатие на клавиши стрелок для перемещения пчелы в пространстве, а также открытие игрового меню.

Обновление координат объектов в графическом окне, их свойств, таких как состояния полос прогресса, будет осуществляться в методе обновления значений переменных.

Ну и конечно все изменения будет рисовать в графическом окне метод отрисовки объектов.

Все эти методы будут выполнять свою работу в игровом цикле.

#include "Engen.h"

void Engen::input()
{
	// Объект события
	sf::Event event_play;

	while (window->pollEvent(event_play))  // Присвоение отловленного события, объекту событий event_play
	{
		// Обработка события нажатия на клавишу Esc
		if (event_play.key.code == sf::Keyboard::Escape) { window->close(); }
	}
}

void Engen::update(sf::Time const& deltaTime)
{

}

void Engen::draw()
{
	// Очистка графического окна
	window->clear();
	// Отрисовка фона в графическом окне
	window->draw(background);
	// Вывод объектов в графическом окне
	window->display();
}

Engen::Engen()
{
	// Загрузка текстуры
	background_texture.loadFromFile("image/background.jpg");
	// Получение ссылки на текстуру для прямоугольника 
	background.setTexture(&background_texture);
}

void Engen::run()
{
	// Объявление переменной часы
	sf::Clock clock;
	// Цикл работает пока окно открыто
	while (window->isOpen())
	{
		// Текущее время присваиваем переменной времени dt
		sf::Time dt = clock.restart();  

		input();
		update(dt);
		draw();
	}
}

Продолжение следует ...

Более подробную инструкцию вы можете получить посмотрев видео "Игра на SFML C++ Пчела на работе часть1"

Телеграмм канал "Программирование игр С++/С#

Предыдущая тема

Комментарии (0)