void Board::SetPieceAtIndex(Piece &piece, signed char index) { if (piece.GetColour() == Piece::White) { for (Piece &p :m_White) { if (p.GetBoardIndex() == piece.GetBoardIndex()) { p.SetBoardIndex(index); } } for (Piece &p :m_Black) { if (p.GetBoardIndex() == index) { p.SetBoardIndex(127); } } } if (piece.GetColour() == Piece::Black) { for (Piece &p :m_Black) { if (p.GetBoardIndex() == piece.GetBoardIndex()) { p.SetBoardIndex(index); } } for (Piece &p :m_White) { if (p.GetBoardIndex() == index) { p.SetBoardIndex(127); } } } }
pair<Move*, MovePieceResult> AI_Jarvis::MakeMove(Board * board, vector<Move *> inputMoves){ vector<pair<int, int>> possibleMoves; for(int s = 0; s<SQUARE_COUNT; s++){ Piece * piece = board->PieceAtPosition(s); if(piece != nullptr && piece->GetColour() == colour){ vector<int> * pieceMoves = piece->GetPossibleMoves(); for(int m=0; m<(int)pieceMoves->size(); m++){ Board copyBoard = Board(*board); if(copyBoard.TestLegalMove(s, pieceMoves->at(m)) == MovePieceResult::OK){ possibleMoves.push_back(make_pair(s, pieceMoves->at(m))); } } delete pieceMoves; } } pair<int, int> randMove = possibleMoves.at(rand() % possibleMoves.size()); pair<Move *, MovePieceResult> result = board->MovePiece(randMove.first, randMove.second); if(result.second == MovePieceResult::Promote){ Piece * newPiece = board->MakePiece<Queen>(colour, 0); board->PromotePiece(newPiece); ((Move *)result.first)->SetPawnPromotion(newPiece); result.second = MovePieceResult::OK; } return result; }