/
haseew
/
Lab_6
Обзор
Документация
Войти
/
haseew
/
Lab_6
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Game.h
95 строк
3 KB
Egorchik
Lab_6
28 апр 2026, 17:44
28 апр 2026, 17:44
f0a1a80
Код
Авторство
О чём код?
#ifndef GAME_H #define GAME_H #include <string> #include <vector> #include <iostream> #include <stdexcept> // базовое исключение для игровых ситуаций class GameException : public std::runtime_error { public: GameException(const std::string& msg); }; // исключение если действие пытается совершить мертвый персонаж class ActionByDeadException : public GameException { public: ActionByDeadException(); }; // исключение при некорректных параметрах здоровья или урона class InvalidStatsException : public GameException { public: InvalidStatsException(const std::string& msg); }; // опережающее объявление базового персонажа для класса оружия class BaseCharacter; // класс оружия class Weapon { private: std::string name; // название оружия int damage; // наносимый урон double range; // радиус поражения оружия public: Weapon(); Weapon(std::string n, int d, double r); void hit(BaseCharacter& actor, BaseCharacter& target); std::string get_name() const; // операторы ввода и вывода оружия friend std::ostream& operator<<(std::ostream& os, const Weapon& w); friend std::istream& operator>>(std::istream& is, Weapon& w); }; // класс базового персонажа в игре class BaseCharacter { protected: double pos_x; // координата х на карте double pos_y; // координата у на карте int hp; // очки здоровья персонажа public: BaseCharacter(double x, double y, int health); virtual ~BaseCharacter() = default; void move(double delta_x, double delta_y); bool is_alive() const; void get_damage(int amount); double get_x() const; double get_y() const; int get_hp() const; }; // класс противника расширяющий базового персонажа class BaseEnemy : public BaseCharacter { private: Weapon weapon; // экипированное оружие врага public: BaseEnemy(double x, double y, Weapon w, int health); void hit(BaseCharacter& target); // оператор вывода данных о враге friend std::ostream& operator<<(std::ostream& os, const BaseEnemy& e); }; // класс главного героя игры class MainHero : public BaseCharacter { private: std::string name; // имя героя std::vector<Weapon> inventory; // инвентарь собранного оружия int current_weapon_idx; // индекс текущего выбранного оружия public: MainHero(double x, double y, std::string n, int health); void hit(BaseCharacter& target); void add_weapon(const Weapon& w); void next_weapon(); void heal(int amount); }; #endif // GAME_H