123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #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 <utility>
- #include <iostream>
- #include <stdexcept>
- 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<Position, Position> 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<Figure*> figures, char turn)
- {
- board = Chessboard(figures);
- turn = turn;
- player = turn == 'W' ? player1 : player2;
- }
- void Chessengine::load_base()
- {
- // Деструктор уничтожает все переменные при выходе из функции
- vector<Figure*> 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');
- }
|