-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCellPosition.cpp
118 lines (90 loc) · 3.03 KB
/
CellPosition.cpp
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
#include "CellPosition.h"
#include "UI_Info.h"
CellPosition::CellPosition()
{
// (-1) indicating an invalid cell (uninitialized by the user)
vCell = -1;
hCell = -1;
}
CellPosition::CellPosition(int v, int h)
{
// (-1) indicating an invalid cell (uninitialized by the user)
vCell = -1;
hCell = -1;
SetVCell(v);
SetHCell(h);
}
CellPosition::CellPosition(int cellNum)
{
(*this) = GetCellPositionFromNum(cellNum); // the function call with build a cell position (vCell and hCell)
// from the passed (cellNum)
// (*this) = ... --> this will copy the returned (vCell and hCell)
// to the data members (vCell and hCell)
}
bool CellPosition::SetVCell(int v)
{
///TODO: Implement this function as described in the .h file (don't forget the validation)
if (v >= 9 || v < 0)
return false;
vCell = v;
return true;
}
bool CellPosition::SetHCell(int h)
{
///TODO: Implement this function as described in the .h file (don't forget the validation)
if (h >= 11 || h < 0)
return false;
hCell = h;
return true;
}
int CellPosition::VCell() const
{
return vCell;
}
int CellPosition::HCell() const
{
return hCell;
}
bool CellPosition::IsValidCell() const
{
///TODO: Implement this function as described in the .h file
bool valid = (hCell >= 0 && hCell <= 10) && (vCell >= 0 && vCell <= 10);
return valid; // this line sould be changed with your implementation
}
int CellPosition::GetCellNum() const
{
return GetCellNumFromPosition(*this); // (*this) is the calling object of GetCellNum
// which means the object of the current data members (vCell and hCell)
}
int CellPosition::GetCellNumFromPosition(const CellPosition& cellPosition)
{
// Note:
// this is a static function (do NOT need a calling object so CANNOT use the data members of the calling object, vCell&hCell)
// just define an integer that represents cell number and calculate it using the passed cellPosition then return it
///TODO: Implement this function as described in the .h file
int cellNum = (8 - cellPosition.vCell) * 11 + (cellPosition.hCell + 1);
return cellNum; // this line should be changed with your implementation
}
CellPosition CellPosition::GetCellPositionFromNum(int cellNum)
{
// this is a static function (do NOT need a calling object so CANNOT use the data members of the calling object, vCell&hCell)
CellPosition position;
/// TODO: Implement this function as described in the .h file
int c = 8;
while (cellNum > 11) {
cellNum -= 11;
c--;
}
position.SetVCell(c);
position.SetHCell(cellNum - 1);
// Note: use the passed cellNum to set the vCell and hCell of the "position" variable declared inside the function
// I mean: position.SetVCell(...) and position.SetHCell(...) then return it
return position;
}
void CellPosition::AddCellNum(int addedNum)
{
/// TODO: Implement this function as described in the .h file
int cellNum = GetCellNum() + addedNum;
*this = GetCellPositionFromNum(cellNum);
// Note: this function updates the data members (vCell and hCell) of the calling object
}