#include "Chessengine.h" #include "Player.h" #include "Chessboard.h" #include "King.h" #include "Queen.h" #include "Pawn.h" #include "Position.h" #include "Rook.h" #include "Bishop.h" #include "Horse.h" #include #include #include Chessengine::Chessengine(Player* p1, Player* p2) { turn = 'W'; player1 = p1; player2 = p2; player = player1; } bool Chessengine::king_on_board(char color) { const char* need_find = King(Position(), color).print(); Figure* fig; for(int i = 0; i < 8; i++) { for(int j = 0; j < 8; j++) { fig = board.get_icell(i, j).get_figure(); if (fig != nullptr and fig->print() == need_find) return true; } } return false; } void Chessengine::start() { while (king_on_board('W') == true and king_on_board('B') == true) { while (true) { try { std::cout << board << "How turn is " << turn << '\n'; std::pair move = player->get_move(board, turn); board.create_move(move.first, move.second); turn = turn == 'W' ? 'B' : 'W'; player = player == player1 ? player2 : player1; break; } catch (std::invalid_argument) { continue; } } } } void Chessengine::load(vector figures, char turn) { board = Chessboard(figures); turn = turn; player = turn == 'W' ? player1 : player2; } void Chessengine::load_base() { // Деструктор уничтожает все переменные при выходе из функции vector figures; // Создание чёрных static Pawn bp1(Position('A', '7'), 'B'); static Pawn bp2(Position('B', '7'), 'B'); static Pawn bp3(Position('C', '7'), 'B'); static Pawn bp4(Position('D', '7'), 'B'); static Pawn bp5(Position('E', '7'), 'B'); static Pawn bp6(Position('F', '7'), 'B'); static Pawn bp7(Position('G', '7'), 'B'); static Pawn bp8(Position('H', '7'), 'B'); static Rook br1(Position('A', '8'), 'B'); static Rook br2(Position('H', '8'), 'B'); static Horse bh1(Position('B', '8'), 'B'); static Horse bh2(Position('G', '8'), 'B'); static Bishop bb1(Position('C', '8'), 'B'); static Bishop bb2(Position('F', '8'), 'B'); static King bk1(Position('E', '8'), 'B'); static Queen bq1(Position('D', '8'), 'B'); figures.push_back(&bp1); figures.push_back(&bp2); figures.push_back(&bp3); figures.push_back(&bp4); figures.push_back(&bp5); figures.push_back(&bp6); figures.push_back(&bp7); figures.push_back(&bp8); figures.push_back(&br1); figures.push_back(&br2); figures.push_back(&bh1); figures.push_back(&bh2); figures.push_back(&bb1); figures.push_back(&bb2); figures.push_back(&bk1); figures.push_back(&bq1); // Создание белых static Pawn wp1(Position('A', '2'), 'W'); static Pawn wp2(Position('B', '2'), 'W'); static Pawn wp3(Position('C', '2'), 'W'); static Pawn wp4(Position('D', '2'), 'W'); static Pawn wp5(Position('E', '2'), 'W'); static Pawn wp6(Position('F', '2'), 'W'); static Pawn wp7(Position('G', '2'), 'W'); static Pawn wp8(Position('H', '2'), 'W'); static Rook wr1(Position('A', '1'), 'W'); static Rook wr2(Position('H', '1'), 'W'); static Horse wh1(Position('B', '1'), 'W'); static Horse wh2(Position('G', '1'), 'W'); static Bishop wb1(Position('C', '1'), 'W'); static Bishop wb2(Position('F', '1'), 'W'); static King wk1(Position('E', '1'), 'W'); static Queen wq1(Position('D', '1'), 'W'); figures.push_back(&wp1); figures.push_back(&wp2); figures.push_back(&wp3); figures.push_back(&wp4); figures.push_back(&wp5); figures.push_back(&wp6); figures.push_back(&wp7); figures.push_back(&wp8); figures.push_back(&wr1); figures.push_back(&wr2); figures.push_back(&wh1); figures.push_back(&wh2); figures.push_back(&wb1); figures.push_back(&wb2); figures.push_back(&wk1); figures.push_back(&wq1); load(figures, 'W'); }