#1 allicce
Víceméně ti již petr odpovědeli, ale nadruhou stranu je třeba říci že že jen použití náhodného generátoru a "hranice úspěchu"(tj procenta) může být pro některé případy problematické.
Například je problém v rozložení hodnot které generátor dává. To ani zdaleka nemusí být rovnoměrné, nebo může být cca rovnoměrné aje jen při velkém počtu použitých čísel. Například pro milion vyčtených náhodných čísel to bude rovnoměrné, ale pokud ale hráč "použije" jen stovku čísel (např 100 střel za jednu hru). Tak může nastat situace že prostě netrefí vůbec nic. Ačkoliv by asi měl.
Další variací na toto téma je pokud se jeden náhodný generátor použije pro generování hodnot pro různé hráče a zbraně. Co když zrovna na někoho vyjdou ta vyšší čísla z toho rovnoměrného rozložení? To se klidně může stát pokud je generátor dostatečně náhodný. Takový hráč pak trefí všechno a ostatní sotva něco. ... .
Podobné je to i tím o, že není jasné co přesně znamená 70% provděpodobnost.
Matematicky se k tomu číslu můžeš dostat i tak že prvních 7 výstřelů vždy zasáhne, a zbylé 3 nezasáhnou. Nebo 70/30 nebo 700/300. Vše čistě bez náhodného elementu.
A stejně jako čím méně čísel z generátoru se použije,tím je větší problém s náhodností a "kvalitou".
Tak platí, že čím menší je rozsah do kterého se potřebuje hráč trefit, tím větší jsou nároky na "kvalitu" toho rozložení. Pokud je šance třeba jen jedno procento, tak je vliv "náhodnosti a rozložení" mnohem větší.
Těm procentům toiž chybí rozměr a rozložení.
např: "během jedné hry (cca 100 střel) má být pro jednu konkrétní zbraň pravděpodobnost 70% že něco zasáhne" je trochu odlišné od "během jednoho dne všechny střely z daného typu zbraně zasáhnou v 70procentech případů". Obojí vyjde 70% ale to druhé může také znamenat že 70% hráčů s touto zbraní zasáhne vše a 30procent z nich se netrefí nikdy.
Obě varianty jsou tak trochu "krajní" ale snad je na nich vidět že jen náhodnost, a procenta nestačí.
Některé hry to opravdu neřeší a pak se při velkém počtu hráčů může stát že někomu padají celý den samá "malá" čísla, a někdo má zas neuvěřitelné štěstí. To nutně nemusí vadit pro kratší časový interval(pár minut nebo část bitvy), ale pokud to trvá celou dobu co hráč ten den hraje, tak to je frustrující.
Možná by také stálo za to kontrolně vygenerovat danný počet čísel (např dle očekávaného počtu střel pro které mají platit ta procenta - např za jednu hru) a spočítat zda jednoduché vyhodnocení hranic bude fungovat. tj. spočítat kolik ze (např 100) se vejde pod hranici 50%,70%,80%,90%,95%,99%
Např můj kód v C (porovnání hodnoty z generátoru náhodných čísel bez korekce jako petrova ukázka) mi vrátil pro deset náhodných hodnot toto:
NumOfValues=10
1.0%= 0 hits =>0.0
5.0%= 1 hits =>10.0
50.0%= 5 hits =>50.0
70.0%= 7 hits =>70.0
80.0%= 7 hits =>70.0
90.0%= 8 hits =>80.0
95.0%= 9 hits =>90.0
99.0%= 10 hits =>100.0
99.9%= 10 hits =>100.0
a pro 100 hodnot toto:
NumOfValues=100
1.0%= 2 hits =>2.0
5.0%= 6 hits =>6.0
50.0%= 42 hits =>42.0
70.0%= 69 hits =>69.0
80.0%= 77 hits =>77.0
90.0%= 86 hits =>86.0
95.0%= 91 hits =>91.0
99.0%= 98 hits =>98.0
99.9%=100 hits =>100.0
Funkce pro náhodná čísla v pythonu https://docs.python.org/2/library/random.html
Takže opravdu dopručuju se zamyslet a doplnit nějakou korekci.
Například lze počítat úspěšnost v posledních 100 zásazích, a pokud bude výrazně pod požadovanou úrovní(třeba 50% místo 70%) tak hranici snížit, nebo naopak, pokud bude výrazně vyšší tak zvýšit. Samozřejmně pokud bude požadováno 1% bude třeba nastavit hranice jinak, případně povolit korekci až po určitém počtu výstřelů.
Možná by se ty korekce neměli počítat zvlášť pro každou hráčovu zbraň ale spíše, pro každou střelu s požadovaným procentem zásahu(případně v několika rozsazích), jednoho hráče.
Není to úplně snadné, možná bych radil pro jednoduchost začítl tak jak poradil petr. A vylepšovat až pak.