Игра: Лабиринт
800 грн. 2 дня

Консольная процедурная игра на выживание на C++ (версия с использованием vector)
Динамичная текстовая игра на выживание для консоли, написанная на C++. Игроку предстоит перемещаться по процедурно генерируемому лабиринту, полному скрытых ловушек, следить за уровнем здоровья (HP) и добраться до выхода.

Эта версия знаменует собой важный этап развития проекта: переход от статических массивов к управлению динамической памятью с помощью `vector` и внедрение процедурной генерации карты.

Игровой процесс и элементы карты
Игровое поле генерируется динамически на основе ввода пользователя. Каждый символ обозначает определенный элемент игры:

Символ Значение Описание элемента
P Игрок Ваш персонаж. Начинает путь в левом верхнем углу (0, 1).
E Выход Финиш. Динамически размещается в правом нижнем углу. Доберитесь до него, чтобы победить!
# Стена Непроходимое препятствие; генерируется с вероятностью 20% для каждой ячейки.
. Пустое место Безопасный участок, по которому можно перемещаться.
X Мина Скрытая ловушка (вероятность появления — 10%). Наступив на нее, вы теряете 35 HP.
+ Аптечка Предмет для лечения (вероятность появления — 5%). Восстанавливает 35 HP (максимум — 100 HP).
Управление
Перемещение персонажа осуществляется через стандартный консольный ввод (введите символ и нажмите Enter):

W / w — Вверх
A / a — Влево
S / s — Вниз
D / d — Вправо
Q / q — Мгновенный выход из игры
Технические особенности и продвинутая архитектура
Код был переработан в соответствии со стандартами профессиональной разработки:

Динамическая сетка на базе векторов STL: Вместо обычных массивов (например, `int arr[5][4]`) используется `std::vector`. Игра больше не зависит от жестко заданных размеров и может масштабироваться до любых габаритов (например, 10x10, 20x20) непосредственно во время выполнения.
Процедурная генерация (``): Для инициализации генератора случайных чисел используется `srand(time(0))`. Стены, мины и аптечки распределяются по вероятностному алгоритму, что гарантирует уникальную планировку карты при каждом запуске.
Интеллектуальная проверка границ и индексов: Проверки выхода за пределы поля и условия победы динамически адаптируются с использованием методов `.size()` и вычислений вида `.size() - 1`, что предотвращает утечки памяти и переполнение буфера. Передача по ссылке (&): структуры данных, представляющие собой большие матрицы, передаются по ссылке, чтобы избежать затратных операций копирования памяти при взаимодействии функций (drawMap, handleMovement и т. д.).

github.com
Робота додана: 14.07.26

Вгору