/
StudentWorld.h
104 lines (88 loc) · 2.73 KB
/
StudentWorld.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
#ifndef STUDENTWORLD_H_
#define STUDENTWORLD_H_
#include "GameWorld.h"
#include "GameConstants.h"
#include "GraphObject.h"
#include "Actor.h"
#include <string>
#include <vector>
#include <iomanip>
#include <sstream>
using namespace std;
class Actor;
class StudentWorld : public GameWorld
{
public:
virtual int init();
virtual int move();
virtual void cleanUp();
StudentWorld(std::string assetDir);
~StudentWorld();
bool isWithinRadius(int x1, int y1, int x2, int y2, double r);
bool isCollidingWith(int x, int y, Actor* obj);
bool canFrackmanMoveHere(int x, int y);
bool canProtestersStepHere(int x, int y, GraphObject::Direction dir);
bool isThereDirtHere(int x, int y);
bool isThereDirtInThisBox(int x, int y);
bool isThereBoulderInThisBox(int x, int y);
bool clearOfDirtBoulder(int x, int y);
bool isThereBoulderUnderMe(int x, int y);
bool isWithinShoutingDistance(int x, int y);
bool isFacingFrackMan(int x, int y, GraphObject::Direction dir);
bool isInLineOfSight(int x, int y);
int annoyAProtester(int x, int y, char cause);
int min(int a, int b);
int max(int a, int b);
int randInt(int l, int h);
void dropNugget(int x, int y);
void reduceBarrels();
void insertSquirt(int x, int y, GraphObject::Direction dir);
void decrementProtesterCount();
void annoyFrackMan(char cause);
void destroyDirt(int x, int y);
void revealCloseObjects(int x, int y);
GraphObject::Direction faceTheFrack(int x, int y);
GraphObject::Direction getRandDir();
GraphObject::Direction canTurn(int x, int y, GraphObject::Direction dir); // returns none if can't turn
GraphObject::Direction protesterGiveUp(int &x, int &y);
GraphObject::Direction getIntimateWithFrack(int &x, int &y);
FrackMan* getFrack();
private:
bool isCloseTo(int x, int y, Actor* obj);
bool isCloseToAnyActor(int x, int y);
bool isCollidingWithBoulder(int x, int y);
void addBoulders();
void addNuggets();
void addBarrels();
void addSonarKit();
void addWaterPool();
void addSonarOrWater();
void addProtester();
void removeDeadObjects();
void setDisplayText();
void solveGrid(int x, int y, GraphObject::Direction m[64][64], int r);
Dirt* m_dirt[64][64];
vector<Actor*> m_actors;
FrackMan* fracker;
GraphObject::Direction grid[64][64];
GraphObject::Direction frackGrid[64][64];
int numBarrels;
int protesterTick;
int numProtesters;
int maxNumProtesters;
int hardCoreMaxVal;
string formatDisplayText(int score, int level, int lives, int health, int squirts, int gold, int sonar, int barrelsLeft);
struct Coord
{
public:
Coord(int row, int col, int datAzz) : m_r(row), m_c(col), m_Azz(datAzz) {}
int r() const { return m_r; }
int c() const { return m_c; }
int z() const { return m_Azz; }
private:
int m_r;
int m_c;
int m_Azz;
};
};
#endif // STUDENTWORLD_H_