Beispiel #1
0
    private List <BlockEffects> activeBlocks = new List <BlockEffects>(); // blocks comme bouclier qui bloque



    /// <summary>
    /// Résoud les effets à traiter
    /// </summary>
    public void Solve()
    {
        int k = 0;

        while (k < ToBeTreated.Count)
        {
            Effect element = ToBeTreated[k];


            bool canUse = true;
            int  l      = 0;
            while (l < ActiveBlocks.Count)
            {
                BlockEffects blockEffect = ActiveBlocks[l]; // si il n'y a pas de block, on applique l'effet



                if (blockEffect.ContientEffetType(element))

                {
                    blockEffect.NumberToBlock -= 1;
                    if (blockEffect.NumberToBlock > 0 || blockEffect.TourEffetActif > 0)
                    {
                        canUse = false;

                        break; // petite opti
                    }
                }
                l++;
            }
            if (canUse)
            {
                element.Use();
            }
            element.TourEffetActif--;
            k++;
        }
        int i = 0;

        while (i < ToBeTreated.Count) // la différence diminue de 1 a chaque tour de boucle
        {
            if (ToBeTreated[i].TourEffetActif <= 0)
            {
                ToBeTreated.RemoveAt(i);
            }
            else
            {
                i++;
            }
        }

        ActiveBlocks.RemoveAll(x => x.NumberToBlock <= 0 && x.TourEffetActif < 0);// si il n'y a plus de coup a bloquer ni de tour effet actif on le supprime de la liste des blocs actifs
    }