-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathh_Simulation.h
executable file
·146 lines (101 loc) · 3.6 KB
/
h_Simulation.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#ifndef H_SIMULATION_H
#define H_SIMULATION_H
#include <QList>
#include <QVector>
#include <QPointF>
class Settings;
class h_World;
class h_Robot;
class h_EatableItem;
#include <QObject>
/*
This class manages the two worlds with the robots, food items and poison items
*/
class h_Simulation : public QObject
{
Q_OBJECT
public:
h_Simulation(Settings* settings, int aNumberRobot, int aNumberFoods, int aNumberPoisons, qreal worldWidth);
virtual ~h_Simulation();
void initSimulation();
h_World* getWorld() const {return world;}
int getIteration() const {return iteration;}
void resetEverything();
virtual void resetParameters() {}
void resetRobots();
virtual void resetRobot(h_Robot* robot);
QList<h_Robot *> getRobots() const {return robots;}
int getNumberRobots() const {return numberRobots;}
void resetFoods();
virtual void resetFood(h_EatableItem *food) = 0;
virtual void foodIsEaten(h_EatableItem *food) = 0;
QList<h_EatableItem *> getFoods() const {return foods;}
int getNumberFoods() const {return numberFoods;}
void resetPoisons();
virtual void resetPoison(h_EatableItem *poison) = 0;
virtual void poisonIsEaten(h_EatableItem *poison) = 0;
QList<h_EatableItem *> getPoisons() const {return poisons;}
int getNumberPoisons() const {return numberPoisons;}
void removeItem(h_EatableItem* item);
void removeAllItems();
h_EatableItem* addFood(QPointF* ppt);
h_EatableItem* addPoison(QPointF* ppt);
void reInitAllEatableItems();
void updateRobotFromFile(QString filename);
public slots:
virtual void run();
virtual void run(int aNumOfIterations); // A run of numberOfIterations iterations
protected:
void initEatableItems();
void removeItems(QList<h_EatableItem *> *pItems);
protected:
Settings* s;
int iteration;
h_World* world;
QList<h_Robot *> robots;
QList<h_EatableItem *> foods;
QList<h_EatableItem *> poisons;
QList<h_EatableItem *> poisonWall;
int numberRobots;
int numberFoods;
int numberPoisons;
};
class h_SimStandard : public h_Simulation
{
public:
h_SimStandard(Settings* settings, int aNumberRobot, int aNumberFoods, int aNumberPoisons, qreal worldWidth);
/*virtual*/ void resetRobot(h_Robot* robot);
/*virtual*/ void resetFood(h_EatableItem *food);
/*virtual*/ void foodIsEaten(h_EatableItem *food) {resetFood(food);}
/*virtual*/ void resetPoison(h_EatableItem *poison);
/*virtual*/ void poisonIsEaten(h_EatableItem *poison) {resetPoison(poison);}
};
class h_SimExplo : public h_Simulation
{
public:
h_SimExplo(Settings* settings, int aNumberRobot, int aNumberFoods, int aNumberPoisons, qreal worldWidth);
/*virtual*/ void resetParameters();
/*virtual*/ void resetRobot(h_Robot* robot);
/*virtual*/ void resetFood(h_EatableItem *food);
/*virtual*/ void foodIsEaten(h_EatableItem *food);
/*virtual*/ void resetPoison(h_EatableItem *poison);
/*virtual*/ void poisonIsEaten(h_EatableItem *poison);
private:
int numBunches;
qreal radiusBunch;
QVector<QPointF> bunches;
};
class h_SimMemo : public h_Simulation
{
public:
h_SimMemo(Settings* settings, int aNumberRobot, int aNumberFoods, int aNumberPoisons, qreal worldWidth);
/*virtual*/ void resetParameters();
/*virtual*/ void resetRobot(h_Robot* robot);
/*virtual*/ void resetFood(h_EatableItem *food);
/*virtual*/ void foodIsEaten(h_EatableItem *food);
/*virtual*/ void resetPoison(h_EatableItem *poison);
/*virtual*/ void poisonIsEaten(h_EatableItem *poison);
private:
int counter;
};
#endif // H_SIMULATION_H