-
Notifications
You must be signed in to change notification settings - Fork 0
/
Actor.h
378 lines (365 loc) · 8.87 KB
/
Actor.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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
#ifndef ACTOR_H_
#define ACTOR_H_
#include "GraphObject.h"
class StudentWorld;
class Actor : public GraphObject { //Abstract Base Class every other actor is derived from
public:
Actor(int imageID, int startX, int startY, int dir, double size, StudentWorld* world);
StudentWorld* returnWorld();
bool isAlive() const{
return m_isAlive;
}
void setAliveStatus(bool status) {
m_isAlive = status;
}
virtual bool canOverlap() const {
return false;
}
virtual bool damagable() const {
return false;
}
virtual void setHealth(int n) {
m_Health = n;
}
virtual void setMaxHealth(int n) {
m_MaxHealth = n;
}
int getMaxHealth() {
return m_MaxHealth;
}
int getHealth() {
return m_Health;
}
virtual void doSomething() = 0;
virtual bool canMakeRobotSounds() const { return false; }
virtual bool canBePickedUp() const { return false; }
virtual bool canBeShot() const { return false; }
virtual bool isMovable() const { return false; }
virtual bool canSwallowMarbles() const { return false; }
virtual bool canStealGoodies() const { return false; }
virtual bool isEnemy() const { return false; }
virtual bool canGetToNextLevel() const { return false; }
private:
StudentWorld* m_studentWorld;
int m_Health;
int m_MaxHealth;
bool m_isAlive = true;
};
class Exit : public Actor {
public:
Exit(int startX, int startY, StudentWorld* world);
virtual bool canOverlap() const {
return openExit;
}
void setOverlap(bool new_openExit) {
openExit = new_openExit;
}
virtual bool canGetToNextLevel() const { return true; }
virtual void doSomething();
private:
bool openExit = false;
};
class Crystal : public Actor {
public:
Crystal(int startX, int startY, StudentWorld* world);
virtual bool canOverlap() const {
return true;
}
virtual void doSomething();
};
class Pit : public Actor {
public:
Pit(int startX, int startY, StudentWorld* world);
virtual bool canOverlap() const override {
return pitMarbled;
}
void setOverlap(bool new_pitMarbled) {
pitMarbled = new_pitMarbled;
}
virtual void doSomething() override;
bool canSwallowMarbles() const override { return true; }
private:
bool pitMarbled = false;
};
class Wall : public Actor {
public:
Wall(int startX, int startY, StudentWorld* world);
virtual void doSomething();
virtual bool canOverlap() const {
return false;
}
};
class Avatar : public Actor {
public:
Avatar(int startX, int startY, StudentWorld* world);
int getAmmo() {
return playerAmmo;
}
void setAmmo(int new_ammo) {
playerAmmo = new_ammo;
}
virtual bool damagable() const {
return true;
}
virtual void doSomething();
private:
int playerAmmo = 20;
};
class Pea : public Actor {
public:
Pea(int imageID, int startX, int startY, int direction, StudentWorld* world);
void moveProjectile();
void setDirection(int newDirection) {
pea_direction = newDirection;
}
bool canBeShot() const override { return true; }
virtual void doSomething() override;
private:
int pea_direction;
};
class Marble : public Actor {
public:
Marble(int startX, int startY, StudentWorld* world);
virtual void doSomething() override;
virtual bool damagable() const override{
return true;
}
virtual bool canOverlap() const override{
return false;
}
bool isMovable() const override { return true; }
private:
};
class RageBot : public Actor {
public:
RageBot(int startX, int startY, StudentWorld* world);
virtual bool canMakeRobotSounds() const { return true; }
int getCurLevel()
{
return curLevel;
}
void setCurLevel(int newLevel)
{
curLevel = newLevel;
}
int getTotalTicks()
{
return totalTicks;
}
void setTotalTicks(int newTicks)
{
totalTicks = newTicks;
}
int getRemainingTicks()
{
return curTicksLeft;
}
void setRemainingTicks(int newTicks)
{
curTicksLeft = newTicks;
}
virtual bool damagable() const {
return true;
}
virtual bool isEnemy() const { return true; }
bool moveIfPossible(int newX, int newY);
private:
int curLevel = 0;
int totalTicks = 0;
int curTicksLeft = 0;
};
class ThiefBot : public Actor {
public:
ThiefBot(int imageID, int startX, int startY, StudentWorld* world);
virtual bool canMakeRobotSounds() const override { return true; }
int getCurLevel()
{
return curLevel;
}
void setCurLevel(int newLevel)
{
curLevel = newLevel;
}
int getTotalTicks()
{
return totalTicks;
}
void setTotalTicks(int newTicks)
{
totalTicks = newTicks;
}
int getRemainingTicks()
{
return curTicksLeft;
}
virtual bool damagable() const override{
return true;
}
void setRemainingTicks(int newTicks)
{
curTicksLeft = newTicks;
}
bool getGoodie()
{
return hasGoodie;
}
void setGoodie(bool status)
{
hasGoodie = status;
}
virtual bool isEnemy() const override { return true; }
bool canStealGoodies() const override { return true; }
bool moveIfPossible(int newX, int newY);
bool moveInCurrentDirection();
virtual void doSomething() override;
private:
int curLevel = 0;
int totalTicks = 0;
int curTicksLeft = 0;
bool m_extraLife = false;
bool m_ammo = false;
bool m_restore = false;
int distanceBeforeTurning;
int distanceMoved;
bool hasGoodie;
};
class MeanThiefBot : public ThiefBot {
public:
MeanThiefBot(int startX, int startY, StudentWorld* world);
bool canSeeAvatarAndShoot();
void doSomething() override;
bool canStealGoodies() const override { return true; }
private:
int curLevel = 0;
int totalTicks = 0;
int curTicksLeft = 0;
bool m_extraLife = false;
bool m_ammo = false;
bool m_restore = false;
int distanceBeforeTurning;
int distanceMoved;
};
class ThiefBotFactory : public Actor {
public:
ThiefBotFactory(int startX, int startY, StudentWorld* world);
int getCurLevel()
{
return curLevel;
}
void setCurLevel(int newLevel)
{
curLevel = newLevel;
}
int getTotalTicks()
{
return totalTicks;
}
void setTotalTicks(int newTicks)
{
totalTicks = newTicks;
}
int getRemainingTicks()
{
return curTicksLeft;
}
void setRemainingTicks(int newTicks)
{
curTicksLeft = newTicks;
}
void spawnThiefBot();
virtual void doSomething();
private:
int curLevel = 0;
int totalTicks = 0;
int curTicksLeft = 0;
};
class MeanThiefBotFactory : public Actor {
public:
MeanThiefBotFactory(int startX, int startY, StudentWorld* world);
int getCurLevel()
{
return curLevel;
}
void setCurLevel(int newLevel)
{
curLevel = newLevel;
}
int getTotalTicks()
{
return totalTicks;
}
void setTotalTicks(int newTicks)
{
totalTicks = newTicks;
}
int getRemainingTicks()
{
return curTicksLeft;
}
void setRemainingTicks(int newTicks)
{
curTicksLeft = newTicks;
}
void spawnThiefBot();
virtual void doSomething();
private:
int curLevel = 0;
int totalTicks = 0;
int curTicksLeft = 0;
};
class VertRageBot : public RageBot
{
public:
VertRageBot(int startX, int startY, StudentWorld* world);
virtual void doSomething();
};
class HorizRageBot : public RageBot
{
public:
HorizRageBot(int startX, int startY, StudentWorld* world);
virtual bool damagable() const {
return true;
}
virtual void doSomething();
};
class Goodies : public Actor {
public:
virtual bool canOverlap() const {
return canBeOverlapped;
}
void setOverlap(bool new_canBeOverlapped) {
canBeOverlapped = new_canBeOverlapped;
}
Goodies(int imageID, int startX, int startY, StudentWorld* world);
virtual void doSomething() = 0;
ThiefBot* getAttachedThiefBot()
{
return attachedThiefBot;
}
void setAttachedThiefBot(ThiefBot* new_attachedbot)
{
attachedThiefBot = new_attachedbot;
}
virtual bool canBePickedUp() const { return true; }
private:
ThiefBot* attachedThiefBot = nullptr;
bool canBeOverlapped = false;
};
class Ammo : public Goodies {
public:
Ammo(int startX, int startY, StudentWorld* world);
virtual void doSomething();
};
class Restore : public Goodies {
public:
Restore(int startX, int startY, StudentWorld* world);
virtual void doSomething();
private:
};
class ExtraLife : public Goodies {
public:
ExtraLife(int startX, int startY, StudentWorld* world);
virtual void doSomething();
private:
};
#endif // ACTOR_H_