[DB - AL] Système de missions

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Sicryn
Messages : 11
Inscription : 23 Mai 2018 17:40

[DB - AL] Système de missions

Message par Sicryn » 11 Mars 2020 13:50

Bonjour à tous,

J'ai fais un script pour gérer les missions que l'on reçoit aléatoirement dans mon jeu de gestion, mais je pense qu'il est infâmement peu pratique et optimisé, et j'aurais besoin de votre avis et votre aide pour améliorer tout ça, mes connaissances étant très basique.

J'avais tout d'abord fais un système utilisant une liste, comme ceci :

Code : Tout sélectionner

public List<string> missionsEnqueteMagie1 = new List<string>();

void Start()
    {
//missions Enquete Magie 1
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        missionsEnqueteMagie1.Add("Blablabla");
        }
        
 public string missionEnqueteMagique1Aleatoire()
    {
        int nr = Random.Range(0, missionsEnqueteMagie1.Count);
        string missionEnqueteMag1 = missionsEnqueteMagie1[nr];
        missionsEnqueteMagie1.RemoveAt(nr);
        return missionEnqueteMag1;
    }           
Je pense que c'était pas trop mal comme fonctionnement, assez pratique, suffisait de rajouter des missions dans la liste et basta. MAIS ! Je manquais de contrôle sur le tout, je voulais pouvoir faire des exception, dire que si c'est tel mission il se passe si, si c'est tel mission ça te propose ça en plus etc. Donc j'ai réfléchi à un autre fonctionnement, qui lui est cool au niveau du contrôle que j'ai sur chaque mission, par contre je pense que c'est une calamité sur tout les autres points.
Voici l'idée:

Code : Tout sélectionner

//MAGIC //MAGIC //MAGIC //MAGIC
    //ENQUETE //ENQUETE
    //PALIER 0 //DIFFICULTE 1
    bool magicEnquetePalier0Diff1_1;
    string magicEnquetePalier0Diff1_Txt1;
    bool magicEnquetePalier0Diff1_2;
    string magicEnquetePalier0Diff1_Txt2;
    bool magicEnquetePalier0Diff1_3;
    string magicEnquetePalier0Diff1_Txt3;
    
    public void Start()
    {
        //MAGIC //MAGIC //MAGIC //MAGIC
        //ENQUETE //ENQUETE
        //PALIER 0 //DIFFICULTE 1
        magicEnquetePalier0Diff1_Txt1 ="Bonjour." + "\r\n" + "Je viens vous voir car j'ai un petit problème...Enquete ";
        magicEnquetePalier0Diff1_Txt2 ="Bonjour." + "\r\n" + "Je viens vous voir car j'ai un petit problème...Enquete ";
        magicEnquetePalier0Diff1_Txt3 ="Bonjour." + "\r\n" + "Je viens vous voir car j'ai un petit problème...Enquete ";
     }
        
    public void tirageMission()
    {
        if(mainGameControl.vagueMagique)
        {
            if (mainGameControl.palier0)
            {
                missionControl.difficulte = UnityEngine.Random.Range(1, 10);

                if (missionControl.difficulte >= 1 && missionControl.difficulte <= 7)
                {
                    missionControl.difficulte1 = true;
                    missionControl.difficulte2 = false;
                    missionControl.difficulte3 = false;
                }
                if (missionControl.difficulte >= 8 && missionControl.difficulte <= 9)
                {
                    missionControl.difficulte1 = false;
                    missionControl.difficulte2 = true;
                    missionControl.difficulte3 = false;
                }
                if (missionControl.difficulte == 10)
                {
                    missionControl.difficulte1 = false;
                    missionControl.difficulte2 = false;
                    missionControl.difficulte3 = true;
                }

                if (missionControl.difficulte1)
                {
                    missionHasard = UnityEngine.Random.Range(1, 20);
                    if (missionHasard == 1)
                    {
                        if (magicEnquetePalier0Diff1_1 == false)
                        {
                            magicEnquetePalier0Diff1_1 = true;
                            txtMission.text = magicEnquetePalier0Diff1_Txt1;
                            missionControl.enquete = true;
                        }
                        else
                        {
                            tirageMission();
                        }
                    }
                    if (missionHasard == 2)
                    {
                        if (magicEnquetePalier0Diff1_2 == false)
                        {
                            magicEnquetePalier0Diff1_2 = true;
                            txtMission.text = magicEnquetePalier0Diff1_Txt2;
                            missionControl.enquete = true;
                        }
                        else
                        {
                            tirageMission();
                        }
                    }
                    if (missionHasard == 3)
                    {
                        if (magicEnquetePalier0Diff1_3 == false)
                        {
                            magicEnquetePalier0Diff1_3 = true;
                            txtMission.text = magicEnquetePalier0Diff1_Txt3;
                            missionControl.enquete = true;
                        }
                        else
                        {
                            tirageMission();
                        }
                    }
                 }
              }
            }
          }  
Donc bon.. comme vous pouvez l'apercevoir dans le void tirageMission, j'ai plusieurs styles de missions, plusieurs paliers, plusieurs difficultés et de l'aléatoire partout dans tout ce bazar. Donc vous pouvez imaginer la gueule du script une fois entier.

Ma demande est donc tout simplement : avez vous déjà un avis à donner sur ces scripts, et surtout, si vous deviez créer un système de ce style pour gérer des missions données aléatoirement mais tout en gardant un contrôle dessus, qu'est ce que vous feriez et comment ? Je sais utilisé les bases du C# mais je ne connais pas encore les fonctions et méthodes avancées.

Merci d'avance pour votre aide !
Bonne journée

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB - AL] Système de missions

Message par boubouk50 » 11 Mars 2020 14:30

Pour tout ce qui peut être répétitif et/ou indéfini en taille, je te conseille d'utiliser les tableaux ou les listes (voire les dictionnaires). Cela te permettra d'avoir un code fonctionnel pour X missions, Y difficultés, etc.
Aussi, sépare ce qui peut l'être, la difficulté, la mission, le palier, même s'ils sont liés tu peux les traiter indépendamment, dans des fonctions séparées. Tu pourras avoir ainsi un contrôle plus clair sur chacun de ces paramètres.
Une fois tous les paramètres décidés, alors tu pourras utiliser une dernière fonction les utilisant.

En théorie, une fonction ne devrait pas dépasser 20 lignes pour une bonne lecture.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Sicryn
Messages : 11
Inscription : 23 Mai 2018 17:40

Re: [DB - AL] Système de missions

Message par Sicryn » 11 Mars 2020 15:19

Hello ! Merci pour la réponse rapide !

Du coup tu me conseillerais de quand même rester avec ma liste comme j'avais fais au début ? Bon je pense que je vais faire ça.

Par contre, ta dernière phrase m'inquiète un peu. Quand tu dis qu'une fonction ne devrait pas dépasser 20 lignes, je pense que je fais de sacrées calamités alors.
Par exemple j'ai un code pour calculer le score des missions. Il prend en compte chaque stats du joueur et c'est un sacré pavé. Est-ce que tu peux me dire si c'est totalement à revoir à ton avis stp ? :gene:
► Afficher le texte
Si tu peux me dire un peu ce qui ne semble ne pas aller et si y a des bonnes pratiques à savoir, ce serait super cool :amen:
Si y a besoin de préciser des choses sur mon code pas de soucis !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB - AL] Système de missions

Message par boubouk50 » 11 Mars 2020 15:33

Pour poster du code, merci de passer par les balises code pour pouvoir le copier/l'éditer/etc et pas par une image.
Je ne peux pas voir l'image, le proxy à mon travail est très strict, elle est bloquée.

En théorie, oui. En pratique, ça dépasse. Mais dans l'idée, on peut tjs écrire une fonction pour un calcul particulier et le sortir de la "fonction principale".
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Sicryn
Messages : 11
Inscription : 23 Mai 2018 17:40

Re: [DB - AL] Système de missions

Message par Sicryn » 11 Mars 2020 16:19

Ouais désolé, c'est parce que justement le code est hyper long et si j'avais tout posté ça aurait été le bazar, du coup j'avais mis un screen global pour montrer le nombre de ligne etc.

En gros, voici une minime partie pour faire comprendre l'idée :

Code : Tout sélectionner

public void calculScoreSoloDiff1Enquete()
    {
        if (characterControl.LVLPlayerCurrentMission1 == 1)
        {
            choixMissionRandom = Random.Range(.1f, .148f);
            technMagieRandom = Random.Range(.1f, .148f);
            rapiditePrepaRandom = Random.Range(.1f, .148f);
            agressifSereinRandom = Random.Range(.1f, .148f);
            combatIntellectRandom = Random.Range(.1f, .148f);

           if (characterControl.LVLOrgaCurrentMission1 == 1)
            {
                if (rapiditePrepa3)
                {
                    rapiditePrepa = rapiditePrepaRandom;
                }
                if (rapiditePrepa4)
                {
                    rapiditePrepa = rapiditePrepaRandom / 2.1f;
                }
                if (rapiditePrepa2)
                {
                    rapiditePrepa = rapiditePrepaRandom / 2.1f / 2.1f;
                }
                if (rapiditePrepa5)
                {
                    rapiditePrepa = rapiditePrepaRandom / 2.1f / 2.1f / 2.1f;
                }
                if (rapiditePrepa1)
                {
                    rapiditePrepa = rapiditePrepaRandom / 2.1f / 2.1f / 2.1f / 2.1f;
                }
            }
            if (characterControl.LVLOrgaCurrentMission1 == 2)
            {
                if (rapiditePrepa3)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.022f;
                }
                if (rapiditePrepa4)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.022f / 2.1f;
                }
                if (rapiditePrepa2)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.022f / 2.1f / 2.1f;
                }
                if (rapiditePrepa5)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.022f / 2.1f / 2.1f / 2.1f;
                }
                if (rapiditePrepa1)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.022f / 2.1f / 2.1f / 2.1f / 2.1f;
                }
            }
            if (characterControl.LVLOrgaCurrentMission1 == 3)
            {
                if (rapiditePrepa3)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.044f;
                }
                if (rapiditePrepa4)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.044f / 2.1f;
                }
                if (rapiditePrepa2)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.044f / 2.1f / 2.1f;
                }
                if (rapiditePrepa5)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.044f / 2.1f / 2.1f / 2.1f;
                }
                if (rapiditePrepa1)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.044f / 2.1f / 2.1f / 2.1f / 2.1f;
                }
            }
             if (characterControl.LVLOrgaCurrentMission1 == 4)
            {
                if (rapiditePrepa3)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.066f;
                }
                if (rapiditePrepa4)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.066f / 2.1f;
                }
                if (rapiditePrepa2)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.066f / 2.1f / 2.1f;
                }
                if (rapiditePrepa5)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.066f / 2.1f / 2.1f / 2.1f;
                }
                if (rapiditePrepa1)
                {
                    rapiditePrepa = rapiditePrepaRandom * 1.066f / 2.1f / 2.1f / 2.1f / 2.1f;
                }
            }
         }
            
Et en gros c'est ça x le nombre de LVL global du joueur x le nombre de LVL sur chaque stat etc et bref le tout ça fait quasi ... 15 000 lignes... :gene: :pleur4:
En le disant je me dis qu'il y a vraiment quelque chose à revoir je pense :/ Mais le pire, c'est que ça marche bien !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB - AL] Système de missions

Message par boubouk50 » 11 Mars 2020 16:42

Ouch...
Le principe de la programmation c'est d'optimiser une tâche. Toi, tu fais un outil numérique comme on le ferait à la main. Clairement, il te faut utiliser des tableaux (Array) ou des listes (List) pour que les données soient au même endroit et t'éviter de faire des tests sur chacune des variables.
En fait, dès que tu fais un copier-coller, ça veut dire que tu peux regrouper.

par exemple:

Code : Tout sélectionner

public void calculScoreSoloDiff1Enquete()
{
    if (characterControl.LVLPlayerCurrentMission1 == 1)
    {
        choixMissionRandom = Random.Range(.1f, .148f);
        technMagieRandom = Random.Range(.1f, .148f);
        rapiditePrepaRandom = Random.Range(.1f, .148f);
        agressifSereinRandom = Random.Range(.1f, .148f);
        combatIntellectRandom = Random.Range(.1f, .148f);
        
        float multiplicateur = 1f + (characterControl.LVLOrgaCurrentMission1-1) * 0.022f;
	float diviseur = Mathf.Pow (2.1f, rapiditePrepas[x]);
	rapiditePrepa = rapiditePrepaRandom * multiplicateur / diviseur;
     }
}
Pourrait faire la même chose que ce que tu as actuellement, en créant un tableau rapiditePrepas qui référence rapiditePrepa1, rapiditePrepa2, rapiditePrepa3, etc.

MEGA AVANTAGE: le code reste le même quelque soit le nombre de rapiditePrepaX.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: [DB - AL] Système de missions

Message par jmhoubre » 11 Mars 2020 20:02

Bonsoir,
le microGame FPS d'Unity a un très joli système de gestion de missions. Tu devrais aller jeter un œil.
C'est sur Unity Learn.

Sicryn
Messages : 11
Inscription : 23 Mai 2018 17:40

Re: [DB - AL] Système de missions

Message par Sicryn » 11 Mars 2020 21:02

Merci boubouk50 !
J'avoue qu'après avoir compris ton exemple ça fout une claque.
J'ai appliqué ta méthode et je passe de 15000 lignes à une cinquantaine. C'est le problème de l'autodidaxie, on applique bêtement les bases sans penser à ce genre de méthodes..
Ça m'inquiète un peu pour d'autres de mes codes du coup, si je poste de temps en temps d'autres codes que je pense être très bancal, ça ne te dérangerais pas trop de m'aiguiller ? :amen:
Merci beaucoup déjà en tout cas !

Merci jmhoubre, je vais jeter un oeil, ça peut être intéressant !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB - AL] Système de missions

Message par boubouk50 » 12 Mars 2020 09:31

Sicryn a écrit :
11 Mars 2020 21:02
Ça m'inquiète un peu pour d'autres de mes codes du coup, si je poste de temps en temps d'autres codes que je pense être très bancal, ça ne te dérangerais pas trop de m'aiguiller ?
C'est un peu le but de ce forum, non? ;-)
Je veux dire aiguiller et expliquer, pas juste corriger.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Sicryn
Messages : 11
Inscription : 23 Mai 2018 17:40

Re: [DB - AL] Système de missions

Message par Sicryn » 24 Mars 2020 12:36

Bien le bonjour !

Je reviens à la charge par rapport à mes questionnements originels de ce topic, sur les possibilités de gérer mes missions par palier/difficulté et style de mission tout ça de manière aléatoire et sans répétition.

Pour expliquer un peu, mon jeu est un jeu de gestion, dans lequel nous recevons des dépositions de clients, ces dépositions sont des missions que l'on peut accepter ou non, et qui sont divisées en plusieurs catégorie :
Mission Magique -> Enquête / Sauvetage / Escorte / Artefact / Malédiction / Monstre et Humain
Mission technologique -> Enquête / Sauvetage / Escorte / Artefact et Humain

Pour chaque style de mission, choisi aléatoirement, il y a trois degrés de difficulté choisi aléatoirement, et tout cela dépend aussi d'à quel point on est avancé dans les niveau, ce qui est réparti en 4 palier.

Il y a donc un sacré nombre de catégorie, pour gérer le tirage au sort de mes missions j'ai donc gérer cela avec un tirage au sort de la difficulté :

Code : Tout sélectionner

public void difficulteRandom()
    {
        difficulte = Random.Range(1, 10);
        if (mainGameControl.palier0)
        {
            if (difficulte >= 1 && difficulte <= 7)
            {
                difficulte1 = true;
                difficulte2 = false;
                difficulte3 = false;
            }
            if (difficulte >= 8 && difficulte <= 9)
            {
                difficulte1 = false;
                difficulte2 = true;
                difficulte3 = false;
            }
            if (difficulte == 10)
            {
                difficulte1 = false;
                difficulte2 = false;
                difficulte3 = true;
            }
        }
	//etc ....
    }
Puis un tirage du style de mission si la mission est pendant une période magique ou technologique :

Code : Tout sélectionner

public void CategorieMissionRandom()
    {
        if (mainGameControl.vagueMagique)
        {
            mission = Random.Range(1, 15);
            if (mission >= 1 && mission <= 2)
            {
                enquete = true;
                sauvetage = false;
                malediction = false;
                escorte = false;
                monstre = false;
                artefact = false;
                humain = false;

            }
            else if (mission >= 3 && mission <= 5)
            {
                enquete = false;
                sauvetage = true;
                malediction = false;
                escorte = false;
                monstre = false;
                artefact = false;
                humain = false;
            }
            else if (mission >= 6 && mission <= 8)
            {
                enquete = false;
                sauvetage = false;
                malediction = true;
                escorte = false;
                monstre = false;
                artefact = false;
                humain = false;
            }
            else if (mission >= 9 && mission <= 10)
            {
                enquete = false;
                sauvetage = false;
                malediction = false;
                escorte = true;
                monstre = false;
                artefact = false;
                humain = false;
            }
            else if (mission >= 11 && mission <= 13)
            {
                enquete = false;
                sauvetage = false;
                malediction = false;
                escorte = false;
                monstre = true;
                artefact = false;
                humain = false;
            }
            else if (mission == 14)
            {
                enquete = false;
                sauvetage = false;
                malediction = false;
                escorte = false;
                monstre = false;
                artefact = true;
                humain = false;
            }
            else if (mission == 15)
            {
                enquete = false;
                sauvetage = false;
                malediction = false;
                escorte = false;
                monstre = false;
                artefact = false;
                humain = true;
            }
        }
        //etc...
    }
Déjà, est-ce que ces tirages au sort tiennent la route ou sont-ils compliqué pour rien ? :/

Puis vient donc le moment d'aller chopper une mission correspondant à la difficulté et au style de mission tiré au hasard comme ci-dessus. Et là, mon vrai problème est que, comme j'essayais de l'expliquer lors de mon premier post, les tableaux ou listes me posent problèmes, parce que je veux garder du contrôle sur le fait que ce soit telle ou telle mission qui a été tiré au final, même si c'est aléatoire.
Je m'explique: par exemple je veux faire un bestiaire de créature. Chaque mission est écrite à la main, et dans certaine mission a à faire à telle ou telle créature. Et je veux que si la mission tirée aléatoirement est une mission de difficulté 1 dans le palier 0 , de style monstre, dans laquelle on évoque une goule, eh bien la goule sera donc débloquée dans le bestiaire.
Sauf que ça je comprends pas comment faire, comment détecter que cette mission tirée au pif dans un tableau ou une liste fait la mention d'une goule et donc débloquera le bestiaire ? :pleur4: :amen:

Ah et petite question général aussi, il vaux mieux avoir genre 10 tableaux/listes avec 3/4 truc dans chaque ou un seul avec tout regroupé dedans? Ca change quelque chose niveau optim ? Parce que j'ai fais ces deux tests pour le moment

Code : Tout sélectionner

public List<string> missionsEnqueteMagie1 = new List<string>();
    public List<string> missionsEnqueteMagie2 = new List<string>();

    public List<string> missionsSauvetageMagie1 = new List<string>();
    public List<string> missionsSauvetageMagie2 = new List<string>();

void Start()
    {
        //missions Enquete Magie 1
        missionsEnqueteMagie1.Add("Et puis Enquete");
        missionsEnqueteMagie1.Add("EnqueteEnqueteEnquete");
        missionsEnqueteMagie1.Add("Faut détruire Enquete");
        missionsEnqueteMagie1.Add("Rolalalaaa Enquete");
        missionsEnqueteMagie1.Add("Et puis Enquete");
        missionsEnqueteMagie1.Add("EnqueteEnqueteEnquete");
        //missions Enquete Magie 2
        missionsEnqueteMagie2.Add("Et puis Enquetee 2");
        missionsEnqueteMagie2.Add("EnqueteEnqueteEnquete 2");
        missionsEnqueteMagie2.Add("Faut détruire Enquete 2");
        missionsEnqueteMagie2.Add("Rolalalaaa Enquete 2");
        missionsEnqueteMagie2.Add("Et puis Enquete 2");
        missionsEnqueteMagie2.Add("EnqueteEnqueteEnquete 2");

        //missions Sauvetage Magie 1
        missionsSauvetageMagie1.Add("Et puis Sauvetage");
        missionsSauvetageMagie1.Add("MSauvetageSauvetageSauvetage");
        missionsSauvetageMagie1.Add("Faut détruire Sauvetage");
        missionsSauvetageMagie1.Add("Rolalalaaa Sauvetage");
        missionsSauvetageMagie1.Add("Et puis Sauvetage");
        missionsSauvetageMagie1.Add("SauvetageSauvetageSauvetage");
        //missions Sauvetage Magie 2
        missionsSauvetageMagie2.Add("Et puis Sauvetage 2");
        missionsSauvetageMagie2.Add("SauvetageSauvetageSauvetage 2");
        missionsSauvetageMagie2.Add("Faut détruire Sauvetage2");
        missionsSauvetageMagie2.Add("Rolalalaaa MSauvetage2");
        missionsSauvetageMagie2.Add("Et puis Sauvetage 2");
        missionsSauvetageMagie2.Add("SauvetageSauvetageSauvetage 2");
        }
        
         public void tirageMission()
    {
        if (mainGameControl.vagueMagique)
        {
            if (missionControl.enquete) { missionEnqueteMagique1Aleatoire(); }
            else if (missionControl.sauvetage) { missionSauvetageMagique1Aleatoire(); }
            else if (missionControl.malediction) { missionMaledictionMagique1Aleatoire(); }
            else if (missionControl.escorte) { missionEscorteMagique1Aleatoire(); }
            else if (missionControl.monstre) { missionMonstreMagique1Aleatoire(); }
            else if (missionControl.artefact) { missionArtefactMagique1Aleatoire(); }
            else if (missionControl.humain) { missionHumainMagique1Aleatoire(); }
        }
        else if (mainGameControl.vagueTechno)
        {
            if (missionControl.enquete) { missionEnqueteTechno1Aleatoire(); }
            else if (missionControl.sauvetage) { missionSauvetageTechno1Aleatoire(); }
            else if (missionControl.escorte) { missionEscorteTechno1Aleatoire(); }
            else if (missionControl.artefact) { missionArtefactTechno1Aleatoire(); }
            else if (missionControl.humain) { missionHumainTechno1Aleatoire(); }
        }
    }
    
     public void missionEnqueteMagique1Aleatoire()
    {
    	if (mainGameControl.palier0)
        {
            if (missionControl.difficulte1)
            {
                int nr = Random.Range(0, missionsEnqueteMagie1.Count);
                mainGameControl.txtMission.text = missionsEnqueteMagie1[nr];
                missionsEnqueteMagie1.RemoveAt(nr);
            }
            if (missionControl.difficulte2)
            {
                 int nr = Random.Range(0, missionsEnqueteMagie2.Count);
                mainGameControl.txtMission.text = missionsEnqueteMagie2[nr];
                missionsEnqueteMagie2.RemoveAt(nr);
            }
        }
    }
  }
    


Donc ça c'était avec toutes les listes séparées, et j'avais fais un test pour les regrouper au maximum mais bon, je suis plutôt mitigé ..

Code : Tout sélectionner

    public int maxDiff1Enquete;
    public int minDiff2Enquete;
    public int maxDiff2Enquete;
    public int diff3Enquete;
    
public List<string> missionsEnqueteMagie1 = new List<string>();

void Start()
    {

        maxDiff1Enquete = 2;
        minDiff2Enquete = 3;
        maxDiff2Enquete = 4;
        diff3Enquete = 5;
        
        //missions Enquete Magie Palier 0
        //Diff 1
        missionsEnqueteMagie1.Add("Et puis Enquete");
        missionsEnqueteMagie1.Add("EnqueteEnqueteEnquete");
        missionsEnqueteMagie1.Add("Faut détruire Enquete");
        //Diff 2
        missionsEnqueteMagie1.Add("Et puis Enquetee 2");
        missionsEnqueteMagie1.Add("EnqueteEnqueteEnquete 2");
        //Diff 3 
        missionsEnqueteMagie1.Add("EnqueteEnqueteEnquete 3");
    }
    
    public void tirageMission()
    {
        if (mainGameControl.vagueMagique)
        {
            if (missionControl.enquete) { missionEnqueteMagique1Aleatoire(); }
            else if (missionControl.sauvetage) { missionSauvetageMagique1Aleatoire(); }
            else if (missionControl.malediction) { missionMaledictionMagique1Aleatoire(); }
            else if (missionControl.escorte) { missionEscorteMagique1Aleatoire(); }
            else if (missionControl.monstre) { missionMonstreMagique1Aleatoire(); }
            else if (missionControl.artefact) { missionArtefactMagique1Aleatoire(); }
            else if (missionControl.humain) { missionHumainMagique1Aleatoire(); }
        }
        else if (mainGameControl.vagueTechno)
        {
            if (missionControl.enquete) { missionEnqueteTechno1Aleatoire(); }
            else if (missionControl.sauvetage) { missionSauvetageTechno1Aleatoire(); }
            else if (missionControl.escorte) { missionEscorteTechno1Aleatoire(); }
            else if (missionControl.artefact) { missionArtefactTechno1Aleatoire(); }
            else if (missionControl.humain) { missionHumainTechno1Aleatoire(); }
        }

    }

    public void missionEnqueteMagique1Aleatoire()
    {
        if (mainGameControl.palier0)
        {
            if (missionControl.difficulte1)
            {
                Debug.Log("Enquete Test 1");
                int nr = Random.Range(0, maxDiff1Enquete);
                mainGameControl.txtMission.text = missionsEnqueteMagie1[nr];
                missionsEnqueteMagie1.RemoveAt(nr);
                maxDiff1Enquete = maxDiff1Enquete - 1;
                minDiff2Enquete = minDiff2Enquete - 1;
                maxDiff2Enquete = maxDiff2Enquete - 1;
                diff3Enquete = diff3Enquete - 1;
            }
            if (missionControl.difficulte2)
            {
                int nr = Random.Range(minDiff2Enquete, maxDiff2Enquete);
                mainGameControl.txtMission.text = missionsEnqueteMagie1[nr];
                missionsEnqueteMagie1.RemoveAt(nr);
                maxDiff2Enquete = maxDiff2Enquete - 1;
                diff3Enquete = diff3Enquete - 1;
            }
            if (missionControl.difficulte3)
            {
                int nr = diff3Enquete;
                mainGameControl.txtMission.text = missionsEnqueteMagie1[nr];
                missionsEnqueteMagie1.RemoveAt(nr);
                diff3Enquete = diff3Enquete - 10;
            }

        }
    }
    
    }
Voilà voilà, désolé du pavé !

Donc pour résumé, ce serait vraiment génial qu'on puisse m'aiguiller sur comment faire pour avoir du contrôle sur ce qui est choisi aléatoirement dans une liste/tableau , avec mon exemple de bestiaire émis plus haut.
Et secondement qu'on me dise un peu si ma façon de gérer mes listes est bonne, potable ou totalement à revoir et pourquoi


Merci infiniment à ceux qui auront le courage de tout lire et de tout essayer de comprendre, si je n'ai pas été clair sur certains points, n'hésitez pas à me demander, et merci infiniment si vous pouvez m'aider !! Ça me rend fou je bloque dessus et du coup j'arrive pas à avancer sur d'autres choses :pleur4:

Et dernière question, j'ai un autre sujet, un peu complexe, qui me tracasse bien et sur lequel j'aurais clairement besoin d'aide/conseil/avis. Vis à vis du forum, vaux mieux que je repost un autre topic ou je pourrais le balancer ici si quelqu'un est prêt à se pencher dessus ?

Merci d'avance !! :amen:

Répondre

Revenir vers « (C#) CSharp »