|
@@ -0,0 +1,141 @@
|
|
|
+#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;
|
|
|
+
|
|
|
+ // Создание чёрных
|
|
|
+ Pawn bp1(Position('A', '7'), 'B');
|
|
|
+ Pawn bp2(Position('B', '7'), 'B');
|
|
|
+ Pawn bp3(Position('C', '7'), 'B');
|
|
|
+ Pawn bp4(Position('D', '7'), 'B');
|
|
|
+ Pawn bp5(Position('E', '7'), 'B');
|
|
|
+ Pawn bp6(Position('F', '7'), 'B');
|
|
|
+ Pawn bp7(Position('G', '7'), 'B');
|
|
|
+ Pawn bp8(Position('H', '7'), 'B');
|
|
|
+ Rook br1(Position('A', '8'), 'B');
|
|
|
+ Rook br2(Position('H', '8'), 'B');
|
|
|
+ Horse bh1(Position('B', '8'), 'B');
|
|
|
+ Horse bh2(Position('G', '8'), 'B');
|
|
|
+ Bishop bb1(Position('C', '8'), 'B');
|
|
|
+ Bishop bb2(Position('F', '8'), 'B');
|
|
|
+ King bk1(Position('E', '8'), 'B');
|
|
|
+ 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);
|
|
|
+
|
|
|
+ // Создание белых
|
|
|
+ Pawn wp1(Position('A', '2'), 'W');
|
|
|
+ Pawn wp2(Position('B', '2'), 'W');
|
|
|
+ Pawn wp3(Position('C', '2'), 'W');
|
|
|
+ Pawn wp4(Position('D', '2'), 'W');
|
|
|
+ Pawn wp5(Position('E', '2'), 'W');
|
|
|
+ Pawn wp6(Position('F', '2'), 'W');
|
|
|
+ Pawn wp7(Position('G', '2'), 'W');
|
|
|
+ Pawn wp8(Position('H', '2'), 'W');
|
|
|
+ Rook wr1(Position('A', '1'), 'W');
|
|
|
+ Rook wr2(Position('H', '1'), 'W');
|
|
|
+ Horse wh1(Position('B', '1'), 'W');
|
|
|
+ Horse wh2(Position('G', '1'), 'W');
|
|
|
+ Bishop wb1(Position('C', '1'), 'W');
|
|
|
+ Bishop wb2(Position('F', '1'), 'W');
|
|
|
+ King wk1(Position('E', '1'), 'W');
|
|
|
+ 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');
|
|
|
+}
|