2011-05-08 2 views
0

Je travaille sur un petit jeu où les prix sont attribués sur la base d'un nombre aléatoire. Donc, quand une mission est terminée et que la récompense doit être distribuée, je veux générer le prix au hasard. Actuellement, je reçois un nombre aléatoire compris entre 1 et 500, puis j'utilise une instruction if-else imbriquée géante pour attribuer le prix en fonction du résultat. Il est évident pour moi que c'est la mauvaise façon de faire cela, mais je ne suis pas sûr de quelle autre manière cela puisse être fait.choisir des éléments basés sur des nombres aléatoires

Des suggestions?

+0

500 Y at-il des prix distincts, ou seront plusieurs des numéros de carte au même prix? (Pour fausser la probabilité entre eux, je veux dire) –

+0

oui il y en a environ 300 uniques, cependant ils existent dans trois raretés distinctes. donc 1-300 sont des prix communs, 301-450 sont rares, et 451-500 sont rares. – BigPete

+0

Y a-t-il différentes chances entre obtenir des prix commom ou l'autre, en plus du fait qu'il y a plus de commom? Si la réponse est oui, cela change l'approche. –

Répondre

2

Vous pouvez simplement utiliser une matrice de prix pour maintenir vos prix, utilisez la valeur aléatoire comme index dans le tableau pour choisir un prix.

var prizes = new Prize[500]; 
//fill prizes 
//randomly select index within prize array 

S'il y a des lacunes ou seulement quelques chiffres gagner quoi que ce soit, utiliser un dictionnaire à partir d'un mappage entier à un prix (ou rien si clé n'existe pas) à la place.

1

Il y a beaucoup de choses que vous pourriez faire. Par exemple, vous pouvez utiliser un array pour stocker les prix et utiliser le nombre aléatoire comme index du tableau. Le prix serait alors tout ce qui était stocké dans le tableau à cet index. Vous pourriez faire la même chose avec un List si vous vouliez plus de contrôle.

1

Utilisez une liste où chaque élément a une "valeur minimale" unique et des informations sur le prix associé. Ensuite, recherchez l'élément sur la liste qui a la valeur la plus élevée, mais qui est toujours inférieur à votre nombre aléatoire. Ou vice versa.

La valeur minimale vous permet de donner des probabilités différentes aux prix sans utiliser un tableau géant qui a une entrée pour tous les nombres. Les probabilités sont définies par les distances des valeurs entre différents prix.

1

Dans cet exemple, je suppose que vos prix sont des chaînes (mais cela fonctionne aussi avec des objets). Créer une liste et ajouter tous vos prix à lui, de la manière suivante:

//using System.Collections.Generic; 
var prices = new List<string>(); 
//Add all of your prices here 
var random = new Random(); 
var price = prices[random.Next(0,prices.Count)]; 
Questions connexes