Bonjour à tous, je travail ces derniers temps sur un projet de jeux-vidéo, et comme tout projet n'est pas sans quelques difficultés, j'ai aujourd'hui besoin de votre aide. En fait, dans mon jeu (une sorte de quiz), les niveaux sont générés aléatoirement. Mais le problème est le suivant: Dans mon jeu, une fois le niveau passé, on ne doit plus pouvoir revenir dessus, et avec ce système de "random", on peut très bien retomber sur un niveau déjà généré. Je vous montre la ligne de mon script qui génère un niveau aléatoirement.
SceneManager.LoadScene("Level" + Random.Range(1, 20));
Et là où j'aurai besoin de votre aide, c'est pour faire en sorte qu'une fois un numéro généré, ce dernier ne puisse plus l'être de nouveau. J'espère avoir été le plus clair possible aha. Merci d'avance pour vos éventuelles réponses.
[DB-RS] Supprimer un chiffre déjà généré par un random
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
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
-
- Messages : 4
- Inscription : 22 Jan 2017 23:37
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-RS] Supprimer un chiffre déjà généré par un random
Au lieu d'aller chercher aléatoirement un nombre entre 0 et 20, va chercher aléatoirement dans une liste d'entiers à laquelle tu enlèveras au fur et à mesure le nombre trouvé.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
-
- Messages : 4
- Inscription : 22 Jan 2017 23:37
Re: [DB-RS] Supprimer un chiffre déjà généré par un random
Sans vouloir beaucoup d'embêter, comme je l'ai indiqué dans l'en-tête du titre de mon post, je suis très novice dans la programmation. Est-ce que tu pourrai m'expliquer brièvement comment est-ce que je pourrai retirer les "entiers" dans une liste ?
- boubouk50
- ModoGenereux
- Messages : 6220
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-RS] Supprimer un chiffre déjà généré par un random
La doc d'abord: https://msdn.microsoft.com/fr-fr/librar ... .110).aspx
Ensuite, soit tu crées au départ une liste déjà aléatoire de nombre compris entre 0 et 20 non répétitifs.
https://stackoverflow.com/questions/101 ... dom-number
https://stackoverflow.com/questions/962 ... 829#962829
Soit tu crées une liste triée de 0 à 20 puis tu vas piocher aléatoirement dedans et supprimer l'élément de la liste.
Il te faut donc choisir un nombre aléatoire entre 0 et list.Count, récupérer la valeur contenue à cet index (list [index]) puis le supprimer de cette liste (myList.RemoveAt (index)).
Ensuite, soit tu crées au départ une liste déjà aléatoire de nombre compris entre 0 et 20 non répétitifs.
https://stackoverflow.com/questions/101 ... dom-number
https://stackoverflow.com/questions/962 ... 829#962829
Soit tu crées une liste triée de 0 à 20 puis tu vas piocher aléatoirement dedans et supprimer l'élément de la liste.
Il te faut donc choisir un nombre aléatoire entre 0 et list.Count, récupérer la valeur contenue à cet index (list [index]) puis le supprimer de cette liste (myList.RemoveAt (index)).
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-RS] Supprimer un chiffre déjà généré par un random
Salut,
Une manière simple pour un novice:
-En premier, tu détermines ton int (qui représente l'index aléatoire dans ton tableau)
int randIndex = UnityEngine.Random.Range(0, TONTABLEAU.Length - 1);
Le "-1" car on commence à parcourir les tableaux à partir de l'index 0 donc si ton TONTABLEAU.Length = 5 alors tes index vont de 0 à 4.
-Ensuite tu récupères ton élément (ton niveau si c'est un tableau de niveaux) donc TONELEMENT = TONTABLEAU[randIndex ];
TONELEMENT sera ton niveau a charger. Maintenant on va faire en sorte que l'on ne retombe pas dessus.
TONELEMENT est une copie de TONTABLEAU[randIndex ] donc tu va pouvoir supprimer TONTABLEAU[randIndex ].
-Donc tu vas remplacer TONTABLEAU[randIndex ] par le dernier élément de ta liste donc
TONTABLEAU[randIndex ] = TONTABLEAU[TONTABLEAU.Length - 1];
-La dernière étape, tu as juste à supprimer le dernier élément de ta liste que tu as dupliqué. Là c'est simple tu as juste à resize ton tableau. Tu lui enlèves une case.
Array.Resize(ref TONTABLEAU, TONTABLEAU.Length - 1);
Avec cette méthode il te supprime la dernière case.
Voilà je trouve cette méthode assez accessible et compréhensible pour un débutant (et tu peux la mettre dans une boucle assez facilement), j'espère avoir été clair.
Une manière simple pour un novice:
-En premier, tu détermines ton int (qui représente l'index aléatoire dans ton tableau)
int randIndex = UnityEngine.Random.Range(0, TONTABLEAU.Length - 1);
Le "-1" car on commence à parcourir les tableaux à partir de l'index 0 donc si ton TONTABLEAU.Length = 5 alors tes index vont de 0 à 4.
-Ensuite tu récupères ton élément (ton niveau si c'est un tableau de niveaux) donc TONELEMENT = TONTABLEAU[randIndex ];
TONELEMENT sera ton niveau a charger. Maintenant on va faire en sorte que l'on ne retombe pas dessus.
TONELEMENT est une copie de TONTABLEAU[randIndex ] donc tu va pouvoir supprimer TONTABLEAU[randIndex ].
-Donc tu vas remplacer TONTABLEAU[randIndex ] par le dernier élément de ta liste donc
TONTABLEAU[randIndex ] = TONTABLEAU[TONTABLEAU.Length - 1];
-La dernière étape, tu as juste à supprimer le dernier élément de ta liste que tu as dupliqué. Là c'est simple tu as juste à resize ton tableau. Tu lui enlèves une case.
Array.Resize(ref TONTABLEAU, TONTABLEAU.Length - 1);
Avec cette méthode il te supprime la dernière case.
Voilà je trouve cette méthode assez accessible et compréhensible pour un débutant (et tu peux la mettre dans une boucle assez facilement), j'espère avoir été clair.
Re: [DB-RS] Supprimer un chiffre déjà généré par un random
Avec une variable nbLEVELdejaTROUVE qui s’incrémente à chaque tirage, plus besoin de "resize" du tableau.
Il suffit de "int randIndex = UnityEngine.Random.Range(0, TONTABLEAU.Length - nbLEVELdejaTROUVE );" .
En définitive, elle remplace tout les "-1" de ta (bonne) méthode.
Cette variable est de toute façon obligatoire pour indiquer le nombre de niveaux déjà chargés, quel que soit algorithme retenu.
Il suffit de "int randIndex = UnityEngine.Random.Range(0, TONTABLEAU.Length - nbLEVELdejaTROUVE );" .
En définitive, elle remplace tout les "-1" de ta (bonne) méthode.
Cette variable est de toute façon obligatoire pour indiquer le nombre de niveaux déjà chargés, quel que soit algorithme retenu.