예제 #1
0
    void applyRound()
    {
        // Récupérer les inputs
        GameState oldState1 = GetGameState(GameState.PlayerNumber.PLAYER_1);
        GameState oldState2 = GetGameState(GameState.PlayerNumber.PLAYER_2);
        MyInput   a1        = strategie1.GetInput(oldState1);
        MyInput   a2        = strategie2.GetInput(oldState2);

        // Appliquer les inputs
        player1.ApplyInput(a1, player2.position);
        player2.ApplyInput(a2, player1.position);

        // Vérifier si un player a reçu un coup
        bool  player1IsDammaged = player1.ApplyDammage(player2);
        bool  player2IsDammaged = player2.ApplyDammage(player1);
        float r1 = computeReward(player1IsDammaged, player2IsDammaged);
        float r2 = -r1;

        // On défavorise les échanges de coups ! On veut que les deux joueurs ne prennent pas de coups !
        if (player1IsDammaged && player2IsDammaged)
        {
            r1 -= 0.01f;
            r2 -= 0.01f;
        }

        // Récompenser les stratégies
        GameState newState1 = GetGameState(GameState.PlayerNumber.PLAYER_1);
        GameState newState2 = GetGameState(GameState.PlayerNumber.PLAYER_2);

        strategie1.Reward(oldState1, a1, newState1, r1);
        strategie2.Reward(oldState2, a2, newState2, r2);

        // Afficher les résultats s'il le faut
        if (isDisplayedOnScreen)
        {
            player1.Display();
            player2.Display();
        }
    }