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