-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSnake.cpp
More file actions
120 lines (92 loc) · 2.23 KB
/
Copy pathSnake.cpp
File metadata and controls
120 lines (92 loc) · 2.23 KB
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
#include "Snake.h"
Snake::Snake(const CellPosition& startCellPos, const CellPosition& endCellPos) : GameObject(startCellPos)
{
this->endCellPos = endCellPos;
++num;
///TODO: Do the needed validation
}
int Snake::num = 0; // Definition and initialization
void Snake::Draw(Output* pOut) const
{
pOut->DrawSnake(position, endCellPos);
}
void Snake::Apply(Grid* pGrid, Player* pPlayer)
{
///TODO: Implement this function as mentioned in the guideline steps (numbered below) below
// == Here are some guideline steps (numbered below) to implement this function ==
// 1- Print a message "You have reached a Snake. Click to continue ..." and wait mouse click
pGrid->PrintErrorMessage("You have reached a Snake. Click to continue ...");
// 2- Apply the Snake's effect by moving the player to the endCellPos
// Review the "pGrid" functions and decide which function can be used for that
pGrid->UpdatePlayerCell(pPlayer, endCellPos);
}
CellPosition Snake::GetEndPosition() const
{
return endCellPos;
}
int Snake::GetNumberOfSnakes()
{
return num;
}
void Snake::DecNum()
{
--num;
}
void Snake::Save(ofstream& OutFile)
{
OutFile << position.GetCellNum() << " " << endCellPos.GetCellNum() << endl;
}
bool Snake::IsOverLapping(GameObject* newObj) const
{
bool is = false;
if (!dynamic_cast<Card*>(newObj))
{
int s = endCellPos.GetCellNum();
int e = position.GetCellNum();
int s2, e2;
bool done = true;
if (dynamic_cast<Snake*>(newObj))
{
e2 = (static_cast<Snake*>(newObj)->GetPosition()).GetCellNum();
s2 = (static_cast<Snake*>(newObj)->GetEndPosition()).GetCellNum();
done = false;
if (s2 != e2)
{
for (int i = s; i <= e; i += 11)
{
for (int j = s2; j <= e2; j += 11)
if (i == j)
{
is = true;
break;
}
}
}
}
else if (dynamic_cast<Ladder*>(newObj) && done)
{
e2 = (static_cast<Ladder*>(newObj)->GetPosition()).GetCellNum();
s2 = (static_cast<Ladder*>(newObj)->GetEndPosition()).GetCellNum();
if (s == e2 || e == s2)
{
is = true;
}
}
/*if (s2 != e2)
{
for (int i = s; i <= e; i += 11)
{
for (int j = s2; j <= e2; j += 11)
if (i == j)
{
is = true;
break;
}
}
}*/
}
return is;
}
Snake::~Snake()
{
}