IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Supprimer un élément d'une List [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2021
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Supprimer un élément d'une List
    Bonjour, j'ai une méthode qui me permet d'affronter de manière aléatoire des combattants, avec un compteur, je limite ces combats à 4 mais. Tout cela marche bien par contre, dans ma liste aléatoire, j'essaie de supprimer les combattants au fur et à mesure qu'ils apparaissent avec "remove" mais sans succès, je pense que c'est encore un souci d'accessibilité, à savoir que mon "remove" ne doit pas rentrer correctement et ce malgré l'endroit où je le met.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public partial class : Donjon02 : ContentPage
    private in nbrCombat = 1;
    <!-- Beaucoup de code entre -->
    public void LutterEncoreClicked(object sender, EventArgs e)
            {
                Random random = new Random();
                List<Monstre> monstres = new List<Monstre>();
                bool victoire = true;
                nbrCombat++;
     
                monstres.Add(new Monstre("Balouf", 75, 35, 35));
                monstres.Add(new Monstre("Pilaf", 85, 25, 30));
                monstres.Add(new Monstre("Mastor", 100, 35, 40));
                monstres.Add(new Monstre("Gringo", 50, 45, 45));
                monstres.Add(new Monstre("Brutor", 150, 10, 15));
     
                var lutteAleatoire = random.Next(monstres.Count);
                var lutteur = monstres[lutteAleatoire];
     
                if (nbrCombat <= 4)
                {
                    while (!lutteur.EstMort())
                    {
                        TextSupplementaireHaut.IsVisible = true;
                        TextSupplementaireHaut.Text = "Vous affrontez un nouveau lutteur. C'est\n" + lutteur.ToString() + "\n" + monPerso.Statistiques();
                        monPerso.Attaquer(lutteur);
     
                        if (monPerso.EstMort())
                        {
                            victoire = false;
                            Histoire.Text = "Dommage, vous avez présummé de vos forces et vous voila au tapis.";
                            Histoire.IsVisible = true;
                            DisplayAlert("Echec", "Vous avez perdu, recommencez", "OK");
                            ActionButton14A.IsVisible = false;
                            ActionButton14B.IsVisible = false;
                            LutterEncore.IsVisible = false;
                            StopLutte.IsVisible = false;
                            break;
                        }
                        if (!lutteur.EstMort())
                        {
                            lutteur.Attaquer(monPerso);
                        }
                        if (victoire)
                        {
                            monPerso.GagnerExperience(5);
                            Histoire.IsVisible = true;
                            Histoire.Text = "Vous remportez ce " + nbrCombat + "° combat, à vous de choisir si vous continuez ou vous arretez." + monPerso.Statistiques();
                            ActionButton14A.IsVisible = false;
                            ActionButton14B.IsVisible = false;
                            LutterEncore.IsVisible = true;
                            StopLutte.IsVisible = true;
                            monstres.Remove(lutteur);
                        }
                    }
                }
                else
                {
                    Histoire.Text = "Bravo, vous avez envoyé au tapis tous vos adversaires. Vous gagnez une bien belle récompense ! Vous gagnez une belle bourse d'or et surtout une splendide <<Epée de Justice>>. C'est trop la classe." +
                       "\nVous récuperez aussi une <<Potion de soin miraculeuse>> que vous buvez de suite. Cela fait du bien. Qu'allez vous faire maintenant ?";
                    Histoire.IsVisible = true;
                    monPerso.GagnerExperience(30);
                    monPerso.GagnerBeaucoupOr();
                    monPerso.GagnerPotionsSoinMiraculeux();
                    monPerso.RecupererPVPotionDeSoinMiraculeux();
                    ActionButton14A.IsVisible = false;
                    ActionButton14B.IsVisible = false;
                    LutterEncore.IsVisible = false;
                    StopLutte.IsVisible = false;
                    ActionButton15A.IsVisible = true;
                    ActionButton15B.IsVisible = true;
                }
            }
    Merci d'avance pour les indications.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 263
    Points
    5 263
    Par défaut
    Il faudrait commencer par ne pas ajouter les monstres à chaque clic sur le bouton.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2021
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    En gros, il faudrait que ma liste soit globale et qu'uniquement dans la méthode, je pioche un aléatoire qui sera automatiquement supprimé après ?

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 263
    Points
    5 263
    Par défaut
    Citation Envoyé par Renshaw Voir le message
    En gros, il faudrait que ma liste soit globale
    Non, pas globale, ni locale à la méthode comme c'est le cas dans ce code.
    Il faut qu'elle soit locale au niveau de la classe.
    Citation Envoyé par Renshaw Voir le message
    et qu'uniquement dans la méthode, je pioche un aléatoire
    Oui
    Citation Envoyé par Renshaw Voir le message
    qui sera automatiquement supprimé après ?
    Non, il faut laisser ton remove

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2021
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Nickel, à force d'essayer, j'ai trouvé, car en effet ta solution locale sur la classe, je l'avais testé mais mal
    J'ai déclaré ma List<Monstre> au début de la classe et j'ai initialisé cette List dans la méthode public.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public partial class Donjon02 : ContentPage
        {
            private int tentative = 0; // Sert de compteur pour la méthode des enigmes
            private int nbrChoix = 0; // Sert de compteur pour la méthode du vol des objets (CheckBox)
            private int nbrChoixMax = 1; // Limite à 2 tentatives le vol d'objets (CheckBox)
            private int nbrCombat = 1; //Sert de compteur pour le tournoi de lutte
            List<Monstre> monstres = new List<Monstre>(); //Sert à créer une liste de lutteur pour le tournoi de lutte
            Random random = new Random(); //Un random tout bête qui sert pour l'instant pour le tournoi de lutte
     
            Personnage monPerso = new Personnage("");
     
            public Donjon02()
            {
                InitializeComponent();
                monstres.Add(new Monstre("Balouf", 75, 35, 35));
                monstres.Add(new Monstre("Pilaf", 85, 25, 30));
                monstres.Add(new Monstre("Mastor", 100, 35, 40));
                monstres.Add(new Monstre("Gringo", 50, 45, 45));
                monstres.Add(new Monstre("Brutor", 150, 10, 15));
            }
    Ainsi, ma liste se vide bien au fur et à mesure des combats. Sauf qu'une fois la liste vide, évidement, ca plante si on continue les combats. Après, j'ai remis mon compteur pour stopper le cycle avant la fin de la liste mais c'est pas très optimisé si dans l'avenir, j'augmenta ma liste de monstre, faut penser à augmenter la valeur du compteur. J'ai vu sur d'autres sites que certains proposent de boucler la liste à l'envers mais cela semble marcher seulement avec RemoveAt. Il y aurait une autre soluce plus propre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public void LutterEncoreClicked(object sender, EventArgs e)
            {
                bool victoire = true;
                nbrCombat++;
                var lutteAleatoire = random.Next(monstres.Count);
                var lutteur = monstres[lutteAleatoire];
     
                if (nbrCombat <= 5)
                {
                    while (!lutteur.EstMort())
                    {
                        TextSupplementaireHaut.IsVisible = true;
                        TextSupplementaireHaut.Text = "Vous affrontez un nouveau lutteur. C'est\n" + lutteur.ToString() + "\n" + monPerso.Statistiques();
                        monPerso.Attaquer(lutteur);
     
                        if (monPerso.EstMort())
                        {
                            victoire = false;
                            Histoire.Text = "Dommage, vous avez présummé de vos forces et vous voila au tapis.";
                            Histoire.IsVisible = true;
                            DisplayAlert("Echec", "Vous avez perdu, recommencez", "OK");
                            ActionButton14A.IsVisible = false;
                            ActionButton14B.IsVisible = false;
                            LutterEncore.IsVisible = false;
                            StopLutte.IsVisible = false;
                            break;
                        }
                        if (!lutteur.EstMort())
                        {
                            lutteur.Attaquer(monPerso);
                        }
                        if (victoire)
                        {
                            monPerso.GagnerExperience(5);
                            Histoire.IsVisible = true;
                            Histoire.Text = "Vous remportez ce " + nbrCombat + "° combat, à vous de choisir si vous continuez ou vous arretez." + monPerso.Statistiques();
                            ActionButton14A.IsVisible = false;
                            ActionButton14B.IsVisible = false;
                            LutterEncore.IsVisible = true;
                            StopLutte.IsVisible = true;
                            monstres.Remove(lutteur);
                        }
                    }
                }
                else
                {
                    Histoire.Text = "Bravo, vous avez envoyé au tapis tous vos adversaires. Vous gagnez une bien belle récompense ! Vous gagnez une belle bourse d'or et surtout une splendide <<Epée de Justice>>. C'est trop la classe." +
                       "\nVous récuperez aussi une <<Potion de soin miraculeuse>> que vous buvez de suite. Cela fait du bien. Qu'allez vous faire maintenant ?";
                    Histoire.IsVisible = true;
                    monPerso.GagnerExperience(30);
                    monPerso.GagnerBeaucoupOr();
                    monPerso.GagnerPotionsSoinMiraculeux();
                    monPerso.RecupererPVPotionDeSoinMiraculeux();
                    ActionButton14A.IsVisible = false;
                    ActionButton14B.IsVisible = false;
                    LutterEncore.IsVisible = false;
                    StopLutte.IsVisible = false;
                    ActionButton15A.IsVisible = true;
                    ActionButton15B.IsVisible = true;
                }
     
            }
    En tout cas, merci du coup de main, ca permet d'avancer

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 263
    Points
    5 263
    Par défaut
    Une autre solution plutôt que de gérer un compteur qu'il faut penser à mettre à jour est d'utiliser la méthode Any (using System.Linq) ou tout simplement Count de ta liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!monstres.Any())
    {
        LutterEncore.IsVisible = false;
    }
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (monstres.Count == 0)
    {
        LutterEncore.IsVisible = false;
    }

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2021
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Salut, désolé pour le temps de réponse. J'ai testé tes deux solutions, elles me font directement stoper les combats en passant dans mon "else". Mais c'est pas bien gênant car je vais creuser la question.
    En tout cas, merci pour l'aide.

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 263
    Points
    5 263
    Par défaut
    Tout est une question d'emplacement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
                        if (victoire)
                        {
                            monPerso.GagnerExperience(5);
                            Histoire.IsVisible = true;
                            Histoire.Text = "Vous remportez ce " + nbrCombat + "° combat, à vous de choisir si vous continuez ou vous arretez." + monPerso.Statistiques();
                            ActionButton14A.IsVisible = false;
                            ActionButton14B.IsVisible = false;
                            LutterEncore.IsVisible = true;
                            StopLutte.IsVisible = true;
                            monstres.Remove(lutteur);
     
                            if (!monstres.Any())
                            {
                                LutterEncore.IsVisible = false;
                            }
                        }
    Et du coup, plus besoin du compteur.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2021
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    J'ai vraiment du mal en effet avec le positionnement de mes méthodes et autres
    Encore merci, elle est au top ainsi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. supprimer un élément d'une liste avec erase
    Par jane40 dans le forum Débuter
    Réponses: 12
    Dernier message: 24/01/2009, 12h26
  2. Réponses: 7
    Dernier message: 23/04/2008, 10h21
  3. Réponses: 12
    Dernier message: 04/03/2007, 11h43
  4. Réponses: 3
    Dernier message: 25/10/2006, 19h08
  5. Supprimer des éléments d'une liste
    Par espadon1 dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2006, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo