Skip to content
Snippets Groups Projects
Commit 30fbef51 authored by Clément Desberg's avatar Clément Desberg
Browse files

commited on 20240509

parent cc80a638
Branches
No related merge requests found
......@@ -8,7 +8,7 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void bishop::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void bishop::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
int diff_x = dest.get_x() - piece::coord.get_x();
int diff_y = dest.get_y() - piece::coord.get_y();
int coord_x = -1;
......@@ -24,7 +24,7 @@ void bishop::needed_space(coordinates dest, std::vector<coordinates> to_calculat
}else{
coord_y = piece::coord.get_y() - i;
}
to_calculate.push_back(coordinates(coord_x,coord_y));
to_calculate->push_back(coordinates(coord_x,coord_y));
}
}
......
......@@ -17,7 +17,7 @@ class bishop : public piece{
legals.push_back(coordinates(i,-i));
}
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
};
......
......@@ -8,7 +8,7 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void king::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void king::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
// The king doesn't need space
}
......
......@@ -20,7 +20,7 @@ class king : public piece{
legals.push_back(coordinates(-1,1));
legals.push_back(coordinates(-1,-1));
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
};
......
......@@ -8,7 +8,7 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void knight::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void knight::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
// The knight doesn't need space
}
......
......@@ -20,7 +20,7 @@ class knight : public piece{
legals.push_back(coordinates(1,-2));
legals.push_back(coordinates(-1,-2));
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
};
......
......@@ -8,18 +8,18 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void pawn::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void pawn::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
int diff_x = dest.get_x() - piece::coord.get_x();
int diff_y = dest.get_y() - piece::coord.get_y();
if(diff_x == 0){
//Normal pawn move, destination case verified
to_calculate.push_back(dest);
to_calculate->push_back(dest);
// When moving two squares, also verify the intermediate one
if(abs(diff_y) == 2){
if(piece::white){
to_calculate.push_back(coordinates(piece::coord.get_x(),piece::coord.get_y() + 1));
to_calculate->push_back(coordinates(piece::coord.get_x(),piece::coord.get_y() + 1));
}else{
to_calculate.push_back(coordinates(piece::coord.get_x(),piece::coord.get_y() - 1));
to_calculate->push_back(coordinates(piece::coord.get_x(),piece::coord.get_y() - 1));
}
}
}else{
......
......@@ -21,7 +21,7 @@ class pawn : public piece{
legals.push_back(coordinates(0,2*direction));
legals.push_back(coordinates(0,direction));
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
void move(coordinates dest, bool debug_info) override;
......
......@@ -8,7 +8,7 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void queen::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void queen::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
int diff_x = dest.get_x() - piece::coord.get_x();
int diff_y = dest.get_y() - piece::coord.get_y();
int coord_x = -1;
......@@ -26,32 +26,32 @@ void queen::needed_space(coordinates dest, std::vector<coordinates> to_calculate
}else{
coord_y = piece::coord.get_y() - i;
}
to_calculate.push_back(coordinates(coord_x,coord_y));
to_calculate->push_back(coordinates(coord_x,coord_y));
}
}else{
//When the queen moves like a rook
if(dest.get_x() > piece::coord.get_x()){
//Moving right
for(int i = piece::coord.get_x() + 1; i < dest.get_x(); i++){
to_calculate.push_back(coordinates(i,piece::coord.get_y()));
to_calculate->push_back(coordinates(i,piece::coord.get_y()));
}
}
if(dest.get_x() < piece::coord.get_x()){
//Moving left
for(int i = piece::coord.get_x() - 1; i > dest.get_x(); i--){
to_calculate.push_back(coordinates(i,piece::coord.get_y()));
to_calculate->push_back(coordinates(i,piece::coord.get_y()));
}
}
if(dest.get_y() > piece::coord.get_y()){
//Moving right
for(int i = piece::coord.get_y() + 1; i < dest.get_y(); i++){
to_calculate.push_back(coordinates(piece::coord.get_x(),i));
to_calculate->push_back(coordinates(piece::coord.get_x(),i));
}
}
if(dest.get_y() < piece::coord.get_y()){
//Moving left
for(int i = piece::coord.get_y() - 1; i > dest.get_y(); i--){
to_calculate.push_back(coordinates(piece::coord.get_x(),i));
to_calculate->push_back(coordinates(piece::coord.get_x(),i));
}
}
}
......
......@@ -21,7 +21,7 @@ class queen : public piece{
legals.push_back(coordinates(i,0));
}
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
};
......
......@@ -8,29 +8,29 @@
/// @brief calculate a list of empty space coordinates needed for the move to be legal, assuming the move is possible
/// @param dest destination coordinates
/// @return a vector containing all coordinates to be verified
void rook::needed_space(coordinates dest, std::vector<coordinates> to_calculate){
void rook::needed_space(coordinates dest, std::vector<coordinates> *to_calculate){
if(dest.get_x() > piece::coord.get_x()){
//Moving right
for(int i = piece::coord.get_x() + 1; i < dest.get_x(); i++){
to_calculate.push_back(coordinates(i,piece::coord.get_y()));
to_calculate->push_back(coordinates(i,piece::coord.get_y()));
}
}
if(dest.get_x() < piece::coord.get_x()){
//Moving left
for(int i = piece::coord.get_x() - 1; i > dest.get_x(); i--){
to_calculate.push_back(coordinates(i,piece::coord.get_y()));
to_calculate->push_back(coordinates(i,piece::coord.get_y()));
}
}
if(dest.get_y() > piece::coord.get_y()){
//Moving right
for(int i = piece::coord.get_y() + 1; i < dest.get_y(); i++){
to_calculate.push_back(coordinates(piece::coord.get_x(),i));
to_calculate->push_back(coordinates(piece::coord.get_x(),i));
}
}
if(dest.get_y() < piece::coord.get_y()){
//Moving left
for(int i = piece::coord.get_y() - 1; i > dest.get_y(); i--){
to_calculate.push_back(coordinates(piece::coord.get_x(),i));
to_calculate->push_back(coordinates(piece::coord.get_x(),i));
}
}
}
......
......@@ -17,7 +17,7 @@ class rook : public piece{
legals.push_back(coordinates(i,0));
}
}
void needed_space(coordinates dest, std::vector<coordinates> to_calculate) override;
void needed_space(coordinates dest, std::vector<coordinates> *to_calculate) override;
void print_piece() override;
void canonical_print_piece() override;
};
......
No preview for this file type
......@@ -190,7 +190,7 @@ bool board::is_legal(coordinates move_from, coordinates move_to, bool white_move
// The normal move isn't possible
return false;
}
board_data[move_from.get_x()][move_from.get_y()]->needed_space(move_to, empty_check);
board_data[move_from.get_x()][move_from.get_y()]->needed_space(move_to, &empty_check);
}else{
if(board_data[move_to.get_x()][move_to.get_y()]->get_color() == white_move){
//Destination case support a piece of the same color, wrong move
......@@ -206,7 +206,6 @@ bool board::is_legal(coordinates move_from, coordinates move_to, bool white_move
}
bool result = true;
for(int i = 0; i < empty_check.size(); i++){
std::cout << "checking : x=" << empty_check[i].get_x() << " y=" << empty_check[i].get_y() << std::endl;
result = result && (board_data[empty_check[i].get_x()][empty_check[i].get_y()] == nullptr);
}
return result;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment