void PlayerAI1::RequestMove() { Moves* moves = this->Game->CurrentBoard->GetAllAvailableMoves(this->Side); srand (time(NULL)); int index = rand() % moves->GetLength(); Move* move = moves->GetMove(index); Chess* before = move->GetChessBeforeMove(); Chess* after = move->GetChessAfterMove(); this->Game->MakeMove(before->GetX(), before->GetY(), after->GetX(), after->GetY(), after->GetChessType()); delete moves; CheckDraw(); }
Board* Board::ApplyMove(Move* move) { Board* new_board = new Board(); for (int i = 0; i < BoardSize * BoardSize; i++) { if (this->Chesses[i] != NULL) new_board->Chesses[i] = this->Chesses[i]->Clone(); else new_board->Chesses[i] = NULL; } while (move != NULL) { Chess* before = move->GetChessBeforeMove(); Chess* after = move->GetChessAfterMove(); Chess* captured = move->GetChessCaptured(); if (captured != NULL) { delete new_board->Chesses[captured->GetX() + captured->GetY() * pp9k::BoardSize]; new_board->Chesses[captured->GetX() + captured->GetY() * pp9k::BoardSize] = NULL; } delete new_board->Chesses[before->GetX() + before->GetY() * pp9k::BoardSize]; new_board->Chesses[before->GetX() + before->GetY() * pp9k::BoardSize] = NULL; new_board->Chesses[after->GetX() + after->GetY() * pp9k::BoardSize] = after->Clone(); new_board->LastMovedChess = new_board->Chesses[after->GetX() + after->GetY() * pp9k::BoardSize]; move = move->GetSubMove(); } new_board->Turn = this->Turn == White ? Black : White; new_board->Confirm(); return new_board; }