Example #1
0
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);
            }
        }
    }
}
Example #2
0
	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;
	}