-
Notifications
You must be signed in to change notification settings - Fork 2
/
human.h
115 lines (84 loc) · 3.04 KB
/
human.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef HUMAN_H
#define HUMAN_H
#include <random>
#include <queue>
#include <stack>
#include "objectonroomplan.h"
#include "evacuationbutton.h"
#include "exitpointer.h"
#include "fireextinguisher.h"
// Человек
class Human : public ObjectOnRoomPlan
{
private:
// Время посещения помещения
int visitTime;
// Очки здоровья в дыму
int smokeHealthPoint;
// Очки здоровья в огне
int fireHelathPoint;
// Храбрость
int courage;
// Умер ли человек
bool dead;
// Паникует ли человек
bool isPanic;
// Знает ли он путь к выходу
bool isKnowsExitWay;
// Есть ли у него огнетушитель
bool isHaveFireExtinguisher;
// Ссылка на огнетушитель
FireExtinguisher* fireExtinguisher;
// Стек содержащий путь
std::stack<int> pathStack;
// Радиус зрения
int const VISION_RANGE = 20;
public:
// Конструктор
// x - абцисса на плане помещения
// y - ордината на плане
// roomPlan - ссылка на план
explicit Human(int x, int y, RoomPlan* roomPlan);
// Мертв ли человек
bool isDead();
// Шаг
void step();
private:
// Идти в рандомную точку
void goRandomPath();
// Двигаться рандомно в дыму
void goRandomInSmoke();
// Установить значения координат
// x - новая абцисса
// y - новая ордината
void setCoordinate(int x, int y);
// Поиск пути в точку, алгоритмом поиска в ширину
// Возвращает true если есть путь
bool findPathBfs(int x, int y);
// Поиск пути через дым и огонь
void findPathBfsInFire(int x, int y);
// Идти по имеющемуся пути
void goPath();
// Покинуть помещение
void leave();
// Получение урона от дыма и огня
void getDamage();
// Смерть
void death();
// Сбросить имеющийся путь
void resetPath();
// Нажать кнопку эвакуации
// button - ссылка на кнопку
void pushButton(EvacuationButton* button);
// Узнать путь к выходу по указателю
// pointer - ссылка на указатель
void watchExitPointer(ExitPointer* pointer);
// Взять огнетушитель
// fireExtinguisher - огнетушитель
void takeFireExtinguisher(FireExtinguisher* fireExtinguisher);
void goToIgnition();
// Тушить огонь
// fire - сслыка на огонь
void useFireExtinguisher(Fire* fire);
};
#endif // HUMAN_H