-
Notifications
You must be signed in to change notification settings - Fork 0
/
flipper.h
138 lines (111 loc) · 3.21 KB
/
flipper.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
/************************************************************
FileName: "Flipper.h"
Description: Holds the flipper function that is a friend to all
pieces.
************************************************************/
#include "specialPieces.h"
/*
Desription: produces a pointer to a flipped version of
the passed piece.
Assumptions:The piece exists
Postconditions: Creates a pointer to the flipped piece
and returns with the original piece
unchanged
*/
Piece* giveFlipped(const Piece &p)
{
FlipMatrix flipMatrix;
/*
Draw out the least square bounds that piece exists in
*------*
| |
| |
*------*
Wherever zero bit is, reconstruct it in the next corner
where next corner is chose in counter-clockwise manner
*/
//Come about rowMax and rowMin
int rowMin = p.bits_[0].r_, rowMax = p.bits_[0].r_;
for(int i = 0; i < 4; i++)
{
if(rowMin > p.bits_[i].r_)
rowMin = p.bits_[i].r_;
if(rowMax < p.bits_[i].r_)
rowMax = p.bits_[i].r_;
}
//Come about colMax and colMin
int colMin = p.bits_[0].c_, colMax = p.bits_[0].c_;
for(int i = 0; i < 4; i++)
{
if(colMin > p.bits_[i].c_)
colMin = p.bits_[i].c_;
if(colMax < p.bits_[i].c_)
colMax = p.bits_[i].c_;
}
//setCorners constants
const Bit lowerLeft(rowMin, colMin);
const Bit upperLeft(rowMax, colMin);
const Bit upperRight(rowMax, colMax);
const Bit lowerRight(rowMin, colMax);
//Grab startLocation -- the p.bits_[0] -- to be changed
Bit newStartLocation = p.bits_[0];
//Assign the newStartLocation an integer data type
int integerSwitch = 0;
if(newStartLocation == upperLeft)
integerSwitch = 1;
if(newStartLocation == upperRight)
integerSwitch = 2;
if(newStartLocation == lowerRight)
integerSwitch = 3;
if(newStartLocation == lowerLeft)
integerSwitch = 4;
//Which ever corner, flip that
switch(integerSwitch)
{
case 1:
newStartLocation = upperRight;
break;
case 2:
newStartLocation = lowerRight;
break;
case 3:
newStartLocation = lowerLeft;
break;
case 4:
newStartLocation = upperLeft;
}
//get new pieces direction
Bit newPieceDirection = flipMatrix * p.direction_;
//Create new piece with the informations -- CAN I REFERENCE DERIVED CLASS THINGS WITH THE SUPER CLASS FUCNTION???
Piece* piece;
switch(p.type_)
{
case 'T':
piece = new T(newPieceDirection, newStartLocation);
break;
case 'L':
piece = new L(newPieceDirection, newStartLocation);
break;
case 'J':
piece = new J(newPieceDirection, newStartLocation);
break;
case 'I':
piece = new I(newPieceDirection, newStartLocation);
break;
case 'Z':
piece = new Z(newPieceDirection, newStartLocation);
break;
case 'S':
piece = new S(newPieceDirection, newStartLocation);
break;
default:
piece = new O(newPieceDirection, newStartLocation);
}
return (piece);
/*
CHANGE
flip will return a the flipped version of itelf in its place, the super class will have to
check its ability to occupy its realestate. if its occuied then dont change the actual object,
else set it equal to the returned flipped piece.
*/
}