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 ?
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
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 !!