123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #include "AiPlayer.h"
- #include "Position.h"
- #include "Chessboard.h"
- #include "King.h"
- #include <iostream>
- #include <utility>
- #include <vector>
- std::pair<bool, vector<std::pair<Position, Position>>> get_solve(Chessboard board, char turn, int depth)
- {
- if (depth==0) {
- return std::pair<bool, vector<std::pair<Position, Position>>>(false, vector<std::pair<Position, Position>>());
- }
- vector<Chessboard> boards;
- King k(Position(), turn=='W' ? 'B' : 'W');
- Position uk;
- // Ищем фигуры своего цвета и вражеского короля
- vector<Figure*> my_figures;
- for(int i = 0; i < 8; i++) {
- for(int j = 0; j < 8; j++) {
- if (board.get_icell(i,j).get_figure() != nullptr and board.get_icell(i,j).get_figure()->get_color() == turn)
- my_figures.push_back(board.get_icell(i,j).get_figure());
- if (board.get_icell(i,j).get_figure() != nullptr and board.get_icell(i,j).get_figure()->print() == k.print())
- uk = board.get_icell(i,j).get_figure()->get_position();
- }
- }
- // Создаём новые доски
- vector<Position> figure_positions;
- Chessboard new_board;
- vector<Chessboard> feature_boards;
- std::pair<bool, vector<std::pair<Position, Position>>> result;
- vector<std::pair<Position, Position>> moves;
- for (int i = 0; i < my_figures.size(); i++) {
- figure_positions = my_figures[i]->get_moves();
- for (int j = 0; j < figure_positions.size(); j++) {
- if (figure_positions[j].posSym == uk.posSym and figure_positions[j].posNum == uk.posNum) {
- moves.push_back(std::pair<Position, Position>(my_figures[i]->get_position(), figure_positions[j]));
- return std::pair<bool, vector<std::pair<Position, Position>>>(true, moves);
- }
- new_board = board.copy();
- new_board.create_move(my_figures[i]->get_position(), figure_positions[j]);
- result = get_solve(new_board, turn=='W' ? 'B' : 'W', depth-1);
- if (result.first == true) {
- result.second.push_back(std::pair<Position, Position>(my_figures[i]->get_position(), figure_positions[j]));
- return result;
- }
- }
- }
- return std::pair<bool, vector<std::pair<Position, Position>>>(false, vector<std::pair<Position, Position>>());
- }
- // std::pair<Position, Position> AiPlayer::get_move(Chessboard board, char color)
- // {
- // vector<std::pair<Position, Position>> p = get_solve(board, color, 3);
- // return std::pair<Position, Position>(Position('F', '6'), Position('F', '5'));
- // }
|