30. december 2006 - 12:01Der er
6 kommentarer og 1 løsning
Random og sandsynlighed i spil
Jeg har gang i et hobbyprojekt med at omdanne et brætspil til en computerbaseret udgave.
I brætspillet kan man trække nogle kort, og jeg skal selvfølgelig have samme mulighed i computerspillet. Der er ialt 84 kort fordelt på følgende typer (sandsynlighed for at trække kortet står i parentesen):
Venstre: 18 kort (21,43%) Højre: 18 kort (21.43%) 1 frem: 18 kort (21.43%) 2 frem: 12 kort (14,29%) 3 frem: 6 kort (7,14%) 1 tilbage: 6 kort (7,14%) U-vending: 6 kort (7,14%)
Hvordan får jeg omsat det til en stump C# kode, så jeg kan trække et tilfældigt kort, vel at mærke med ovenstående sandsynlighed in mente?
CardStack stack = new CardStack(); Dictionary<Card, int> cardCount = new Dictionary<Card, int>(count); for(int i = 0 ; i < count ; i++ ) { Card c = stack.DrawCard(); if (!cardCount.ContainsKey(c)) cardCount.Add(c, 1); else cardCount[c]++; }
Console.WriteLine("Results:"); int total = 0; double totalPercentage = 0; foreach(Card c in cardCount.Keys) { double percentage = (double)cardCount[c]/count; Console.WriteLine("{0}\t{1}\t{2:0.00} %", c, cardCount[c],percentage * 100); total += cardCount[c]; totalPercentage += percentage; } Console.WriteLine(new string('-', 80)); Console.WriteLine("Total\t{0}\t{1:0.00} %", total, totalPercentage * 100); } } }
Procentsatserne er ikke 100% korrekte, netop fordi de er trukket tilfældigt. Hvis du lader count i testprogrammet være større, vil procentsatserne blive endnu tættere på det forventede resultat.
Du skal lige være obs på hvordan du trækker kortene...
i det eksempel givet her, så svarer det til at du trækker et kort, ligger det tilbage og blander stakken...
Hvis det istedet foregår som så mange andre brætspil, med at du trækker et kort, ligger det fra, trækker et kort ligger det fra... osv til stakken er tom, og så blander det der... så skal der lige ændres i det du har nu...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.