2010-11-01 9 views
0

J'essaie de faire un simulateur de base sur le pourcentage et d'être changé par un global ... quelle est la meilleure façon de le faire?Simuler un pourcentage calculé basé sur un autre pourcentage

Nous voulons simuler, par exemple, un swing. 20% pour calculer quelque chose à la suite du frappeur et du lanceur de la liste générale et déterminer s'il frappe ou non le ballon. Donc, s'il frappe la balle, est-il fait une course à domicile, une fausse balle, un coup ... etc.

Merci

+5

« Il y a un mot beaucoup le seul un hasard "?! ?? – Stephen

+2

question n'est pas claire – Adam

+2

Je ne sais pas comment analyser "Il ya beaucoup de mot le seul un hasard ..." –

Répondre

2
private static Random rand = new Random(); 

public static T ChooseRandomOutcome<T>(Dictionary<T,int> relativeWeights) 
{ 
    Random rand = new Random(); 

    var total = relativeWeights.Values.Sum(); 
    var randomValue = rand.Next(total); 
    var runningSum = 0; 
    foreach (var pair in relativeWeights) 
    { 
     if (randomValue < pair.Value) 
     { 
      return pair.Key; 
     } 
     runningSum += pair.Value; 
    } 
    throw new Exception("This should never happen.");  
} 

utilisation:

public Enum PitchOutcome 
{ 
    Ball, 
    Strike, 
    Hit 
} 

public Enum HitOutcome 
{ 
    PopFly, 
    HomeRun, 
    Single, 
} 

var weights = new Dictionary<PitchOutcome, int>(); 
weights.Add(PitchOutcome.Ball, 40); 
weights.Add(PitchOutcome.Strike, 30); 
weights.Add(PitchOutcome.Hit, 30); 
PitchOutcome randomOutcome = ChooseRandomOutcome(weights); 
// it should be a Hit 30% of the time. 

if (randomOutcome == PitchOutcome.Hit) 
{ 

    var hitWeights = new Dictionary<HitOutcome, int>(); 
    hitWeights.Add(HitOutcome.PopFly, 50); 
    hitWeights.Add(HitOutcome.HomeRun, 5); 
    hitWeights.Add(HitOutcome.Single, 45); 
    HitOutcome hitResult = ChooseRandomOutcome(hitWeights); 
} 
+0

J'ai essayé cela et, pour cet exemple, le circuit est venu trop de temps si je compare à la MLB. Comme, genre de 5x à 10x plus de temps. Et que puis-je faire si c'est plus qu'un échec ou un succès. Disons: est-ce une faute de balle, homerun, une prise, etc? –

+0

@Simon Je pense que vous allez devoir être plus clair sur ce que vous cherchez. – McKay

+1

@McKay: Désolé j'ai essayé mais je parle d'habitude français et il est difficile d'expliquer quelque chose de si difficile ... J'ai essayé mais on dirait que j'ai échoué ... –

Questions connexes