-
Notifications
You must be signed in to change notification settings - Fork 0
/
game_piece.cpp
161 lines (119 loc) · 5.02 KB
/
game_piece.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include "game_piece.h"
Vector_2D Game_piece::generate_north_movement(Board& board) const {
return Vector_2D(get_position().x(), get_position().y() - 1);
}
Vector_2D Game_piece::generate_northeast_movement(Board& board) const {
return Vector_2D(get_position().x() + 1, get_position().y() - 1);
}
Vector_2D Game_piece::generate_east_movement(Board& board) const {
return Vector_2D(get_position().x() + 1, get_position().y());
}
Vector_2D Game_piece::generate_southeast_movement(Board& board) const {
return Vector_2D(get_position().x() + 1, get_position().y() + 1);
}
Vector_2D Game_piece::generate_south_movement(Board& board) const {
return Vector_2D(get_position().x(), get_position().y() + 1);
}
Vector_2D Game_piece::generate_southwest_movement(Board& board) const {
return Vector_2D(get_position().x() - 1, get_position().y() + 1);
}
Vector_2D Game_piece::generate_west_movement(Board& board) const {
return Vector_2D(get_position().x() - 1, get_position().y());
}
Vector_2D Game_piece::generate_northwest_movement(Board& board) const {
return Vector_2D(get_position().x() - 1, get_position().y() - 1);
}
Vector_2D Game_piece::generate_north_jump(Board& board) const {
return Vector_2D(get_position().x(), get_position().y() - 2);
}
Vector_2D Game_piece::generate_northeast_jump(Board& board) const {
return Vector_2D(get_position().x() + 2, get_position().y() - 2);
}
Vector_2D Game_piece::generate_east_jump(Board& board) const {
return Vector_2D(get_position().x() + 2, get_position().y());
}
Vector_2D Game_piece::generate_southeast_jump(Board& board) const {
return Vector_2D(get_position().x() + 2, get_position().y() + 2);
}
Vector_2D Game_piece::generate_south_jump(Board& board) const {
return Vector_2D(get_position().x(), get_position().y() + 2);
}
Vector_2D Game_piece::generate_southwest_jump(Board& board) const {
return Vector_2D(get_position().x() - 2, get_position().y() + 2);
}
Vector_2D Game_piece::generate_west_jump(Board& board) const {
return Vector_2D(get_position().x() - 2, get_position().y());
}
Vector_2D Game_piece::generate_northwest_jump(Board& board) const {
return Vector_2D(get_position().x() - 2, get_position().y() - 2);
}
bool Game_piece::valid_movement_destination_cell(Vector_2D move, Board& board) const {
bool borders=false;
if(ownership==1){
if(move.x()>=board.get_x_size()-1 || move.x()<=0 || (move.y() == 0 && position.y() != 0))
borders=true;
}
else if(ownership==2){
if(move.x()>=board.get_x_size()-1 || move.x()<=0 || (move.y() == board.get_y_size()-1 && position.y() != board.get_y_size()-1))
borders=true;
}
else if(ownership==3){
if((move.x()==board.get_x_size()-1 && position.x()!=board.get_x_size()-1) || move.y() == board.get_y_size()-1 || move.y() == 0)
borders=true;
}
else if(ownership==4){
if((move.x()==0 && position.x()!=0) || move.y() == board.get_y_size()-1 || move.y() == 0)
borders=true;
}
return board.get_piece_ownership(move) == NO_PLAYER && !borders;
}
bool Game_piece::valid_jump_destination_cell(Vector_2D move, Board& board) const {
Player_ID middleship = board.get_piece_ownership(Vector_2D((position.x() + move.x())/2, (position.y() + move.y())/2));
bool borders=false;
if(ownership==1){
if(move.x()>=board.get_x_size()-1 || move.x()<=0 || (move.y() == 0 && position.y() != 0))
borders=true;
}
else if(ownership==2){
if(move.x()>=board.get_x_size()-1 || move.x()<=0 || (move.y() == board.get_y_size()-1 && position.y() != board.get_y_size()-1))
borders=true;
}
else if(ownership==3){
if((move.x()==board.get_x_size()-1 && position.x()!=board.get_x_size()-1) || move.y() == board.get_y_size()-1 || move.y() == 0)
borders=true;
}
else if(ownership==4){
if((move.x()==0 && position.x()!=0) || move.y() == board.get_y_size()-1 || move.y() == 0)
borders=true;
}
return board.get_piece_ownership(move) == NO_PLAYER && middleship != ownership && middleship != NO_PLAYER && !borders;
}
bool Game_piece::valid_limits(Vector_2D move, Board& board) const {
return move.x() < board.get_x_size() && move.x() >= 0 && move.y() < board.get_y_size() && move.y() >= 0;
}
bool Game_piece::valid_movement_destination_and_limits(Vector_2D move, Board& board) const {
return valid_limits(move, board) && valid_movement_destination_cell(move, board);
}
bool Game_piece::valid_jump_destination_and_limits(Vector_2D move, Board& board) const {
return valid_limits(move, board) && valid_jump_destination_cell(move, board);
}
Player_ID Game_piece::get_ownership() const {
return ownership;
}
void Game_piece::set_ownership(Player_ID owner) {
ownership = owner;
}
Vector_2D Game_piece::get_position() const {
return position;
}
void Game_piece::set_position(Vector_2D pos) {
position = pos;
}
bool Game_piece::member_of(Vector_2D move, std::vector<Vector_2D> moves) {
for (unsigned int i = 0; i < moves.size(); i++) {
if (moves.at(i) == move) {
return true;
}
}
return false;
}