-
Notifications
You must be signed in to change notification settings - Fork 0
/
CellPosition.cpp
123 lines (90 loc) · 3.63 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
119
120
121
122
123
#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)
vCell = (v >= 0 && v <= NumVerticalCells-1) ? v : vCell;
return (v >= 0 && v <= NumVerticalCells-1);
// this line sould be changed with your implementation
}
bool CellPosition::SetHCell(int h)
{
///TODO: Implement this function as described in the .h file (don't forget the validation)
hCell = (h >= 0 && h <= NumHorizontalCells-1) ? h : hCell;
return (h >= 0 && h <= NumHorizontalCells-1);
}
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
return (hCell !=-1 && vCell != -1); // this line sould be changed with your implementation //done
}
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
if ((cellPosition.VCell() == -1) || (cellPosition.HCell() == -1))
return -1;
int cellnum = (NumVerticalCells - cellPosition.VCell()) * NumHorizontalCells - (NumHorizontalCells-1 - cellPosition.HCell());
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 v = NumVerticalCells - (cellNum + NumHorizontalCells-1) / NumHorizontalCells;
int h = cellNum - (NumVerticalCells - v) * NumHorizontalCells + NumHorizontalCells-1;
if ((v > NumVerticalCells-1) || (h > NumHorizontalCells-1) ||( v<0) ||( h<0))
{
return position;
}
position.SetVCell(v);
position.SetHCell(h);
// 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
CellPosition posistion= GetCellPositionFromNum(GetCellNum()+addedNum);
vCell = posistion.VCell();
hCell = posistion.HCell();
// Note: this function updates the data members (vCell and hCell) of the calling object
}