Az "esély" megírása, de hogyan?
Igen, szeretek tanulni, nem vagyok kíváncsi a buta és értelmetlen kommentekre, köszi!
Tehát adott egy dice vagy egyéb más "esélyes" játék teljesen mindegy hol/mi alatt van írva. De hogyan számoltassam ki az esélyt konkrétan?
Példának írom: Pontjáték, 10 pontra van 70% esély és 20-ra 30%. Ez mind szép és jó, de ha azt veszem alapul, hogy C#-ben (nem csak ez érdekel és nem csak ezt tanulom) csinálok egy random változót (Random rnd = new Random ...) ebben tudok generálni x-től x-ig szám alapú értéket. Oké, de ha 2 vagy 3, pl a fent említett lehetőségeket akarom csak venni? Hogyan írjak egy olyan programot, ami a megadott százalékok alapján megy végbe/fut le?
Köszönöm!
Random 0 - 9 között,
0-6 = 10
7-9 = 20
Szóval kb a súlyozásnak nézz utána.
Van pár lehetőség. Leírok egyet:
maxSzazalek = 100
dobas_szazalek = random(1, maxSzazalek) // 1 és 100 közötti szám generálása a százalékhoz.
eselyHatosra = 10 // százalék
eselyOtosre = 25
eselyMasra = 65 // ki is jön a 100
if (maxSzazalek - eselyHatosra >= dobas_szazalek)
return 6
else if (maxSzazalek - eselyOtosre >= dobas_szazalek)
return 5
else
return 4 // vizsgáljuk tovább 6-tól 1-ig az eredményt a dobókockánál, ne csak 4-ig
end
Remélem a fenti szöveg tisztán érthető. A lényege, hogy generálunk egy számot 1 és 100 között, amivel eldöntjük, hogy a hány százalékos intervallumban levő számot szeretnénk visszaadni. Feltételvizsgálatnál megnézzük, hogy a maxSzazalek(100) - eselyHatosra(10) = 90 kisebb vagy egyenlő-e a generált számmal.
Az esély arra, hogy az eredmény igaz, pontosan 10 százalék. Ha hamis, akkor megnézni az ötösre teljesül-e az eredményt. Remélem érhető.
Természetesen nem ez a legelegánsabb megoldás, de eléggé egyszerű, még ha nem is a legegyszerűbb.
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int pont = 0;
for (int i = 0; i < 10; ++i)
{
double esely = rnd.NextDouble();
if (esely <= 0.7)
{
pont += 10;
Console.WriteLine("10 pontot kaptal");
}
else if (esely <= 1.0)
{
pont += 20;
Console.WriteLine("20 pontot kaptal");
}
}
Console.WriteLine("Osszes pontod: " + pont);
Console.ReadKey();
}
}
Bocsánat. 2-es vagyok. Az operátorokat elírtam. Nem >=, hanem <= kell oda, mivel
(maxSzazalek - eselyHatosra <= dobas_szazalek) lesz a 90 <= dobas_szazalek. Így fog jól működni.
Igen azt észrevettem! Megköszönni meg én felejtettem el!
Köszönöm a segítséget, mentek a plusszok!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!