diff options
author | zedarider <ymherklotz@gmail.com> | 2016-11-09 15:16:31 +0000 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-11-09 15:16:31 +0000 |
commit | 946993f12456d0ec6dc97534b57393565404ad79 (patch) | |
tree | 30863007554309bb9df2d14597e0bf394159a932 /src | |
parent | 51af69807a888e6eea2ee105bf6a2a4993aba7e8 (diff) | |
parent | 476e22dd7d91a8ad061e022f28f65507870ef72c (diff) | |
download | ChessAI-946993f12456d0ec6dc97534b57393565404ad79.tar.gz ChessAI-946993f12456d0ec6dc97534b57393565404ad79.zip |
Merge branch 'master' into edit
Diffstat (limited to 'src')
-rw-r--r-- | src/chess_board.cpp | 84 | ||||
-rw-r--r-- | src/chess_piece.cpp | 24 | ||||
-rw-r--r-- | src/main.cpp | 10 |
3 files changed, 83 insertions, 35 deletions
diff --git a/src/chess_board.cpp b/src/chess_board.cpp index b46a284..ac3e1ae 100644 --- a/src/chess_board.cpp +++ b/src/chess_board.cpp @@ -119,29 +119,58 @@ void chess_ai::chess_board::remove_piece(unsigned x, unsigned y) { *iterate_board(it_sqr, x, y) = chess_piece(); } -void chess_ai::chess_board::move_piece(chess_piece piece) { - move_piece(piece.x, piece.y); +chess_ai::movement_flag chess_ai::chess_board::move_piece(chess_piece piece) { + return move_piece(piece.x, piece.y); } -void chess_ai::chess_board::move_piece(unsigned x, unsigned y) { +chess_ai::movement_flag chess_ai::chess_board::move_piece(unsigned x, + unsigned y) { square_iterator it; iterate_board(it, x, y); - - ++(*it); + + if(it->y < 7 && it->y > 0) { + if(it->colour == white) + return move_piece(x, y, x, y-1); + return move_piece(x, y, x, y+1); + } + return move_error_IllegalMove; } -void chess_ai::chess_board::move_piece(chess_ai::chess_piece piece, - unsigned x, unsigned y) { - move_piece(piece.x, piece.y, x, y); +chess_ai::movement_flag chess_ai::chess_board::move_piece( + chess_ai::chess_piece piece, unsigned x, unsigned y) { + return move_piece(piece.x, piece.y, x, y); } -void chess_ai::chess_board::move_piece(unsigned orig_x, unsigned orig_y, - unsigned dest_x, unsigned dest_y) { +chess_ai::movement_flag chess_ai::chess_board::move_piece(unsigned orig_x, + unsigned orig_y, unsigned dest_x, unsigned dest_y) { + chess_piece taken; + return move_piece(orig_x, orig_y, dest_x, dest_y, taken); +} +chess_ai::movement_flag chess_ai::chess_board::move_piece(unsigned orig_x, + unsigned orig_y, unsigned dest_x, + unsigned dest_y, chess_piece& taken_piece) { + square_iterator it; + square_iterator new_it; + + iterate_board(it, orig_x, orig_y); + iterate_board(new_it, dest_x, dest_y); + + switch(it->type) { + case pawn: + return move_pawn(it, new_it, taken_piece); + case rook: + case knight: + case bishop: + case queen: + case king: + default: + return move_error_IllegalMove; + } } chess_ai::square_iterator& chess_ai::chess_board::iterate_board( - square_iterator& it, unsigned x, unsigned y) { + square_iterator& it, unsigned x, unsigned y) { unsigned vec_index, sqr_index; for(vector_iterator it_vec = grid.begin(); it_vec != grid.end(); ++it_vec) { for(square_iterator it_sqr = (*it_vec).begin(); @@ -157,3 +186,36 @@ chess_ai::square_iterator& chess_ai::chess_board::iterate_board( } return it; } + +chess_ai::movement_flag chess_ai::chess_board::move_pawn(square_iterator it, + square_iterator new_it, chess_piece& taken_piece) { + chess_piece piece(it->type, it->colour, new_it->x, new_it->y); + + if((new_it->y - it->y == 2 && it->y == 1) || + ((int)new_it->y - (int)it->y == -2 && it->y == 6) || + (new_it->y - it->y == 1 && piece.colour == black && it->y < 7) || + ((int)new_it->y - (int)it->y == -1 && piece.colour == white && + it->y > 0)) { + if(new_it->x == it->x) { + if(new_it->type == empty) { + remove_piece(it->x, it->y); + set_piece(piece); + return move_Success; + } else if(new_it->colour == it->colour) { + return move_error_FriendlyPieceOnDestination; + } + return move_error_EnemyPieceOnDestination; + } else if(new_it->x - it->x == 1 || (int)new_it->x - (int)it->x == -1) { + if(new_it->colour != it->colour && new_it->colour != none) { + taken_piece.set(new_it->type, new_it->colour, new_it->x, + new_it->y); + remove_piece(it->x, it->y); + set_piece(piece); + return move_Success; + } else if(new_it->colour == it->colour) { + return move_error_FriendlyPieceOnDestination; + } + } + } + return move_error_IllegalMove; +} diff --git a/src/chess_piece.cpp b/src/chess_piece.cpp index 44dfaa5..6eb07e7 100644 --- a/src/chess_piece.cpp +++ b/src/chess_piece.cpp @@ -46,30 +46,6 @@ void chess_ai::chess_piece::set(piece_type type, piece_colour colour, set_y(y); } -chess_ai::chess_piece& chess_ai::chess_piece::operator==(const chess_piece& - piece) { - if(this != &piece) { - this->set(piece.type, piece.colour, piece.x, piece.y); - } - return *this; -} - -chess_ai::chess_piece& chess_ai::chess_piece::operator++() { - if(type == pawn) { - if(colour == white) - --y; - else - ++y; - } - return *this; -} - -chess_ai::chess_piece chess_ai::chess_piece::operator++(int) { - chess_piece tmp(*this); - operator++(); - return tmp; -} - std::string chess_ai::chess_piece::str() { if(type == empty) return " "; diff --git a/src/main.cpp b/src/main.cpp index b41c919..81485f3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,6 +25,16 @@ int main(int argc, char** argv) { board.set_piece(piece); board.print_board(); + + board.remove_piece(5, 3); + + board.print_board(); + + board.move_piece(4, 6, 4, 4); + board.move_piece(4, 1, 4, 3); + board.move_piece(3, 6, 3, 5); + + board.print_board(); return 0; } |