Temes Temat założony przez niniejszego użytkownika |
Losowanie liczb - brak losowości » 2011-09-12 15:44:33 Witam, ostatnio, przy pisaniu gierki, natknąłem się na pewien problem.
A mianowicie z linijką:
Moja gra polega na tym że komputer losuje liczbę (zależy jaki przedział, jest 9 poziomów) a użytkownik musi ją zgadnąć...
I tu znalazłem błąd z <ctime>.
Wybrałem zakres liczb 1-1000 (przy takim widać) i wciskałem ciągle "Liczba - Enter - Liczba - Enter [...]" i zauważyłem, jak tak szybko pisałem, komputer nie losował liczb tylko pisał po kolei: (To przykład, nie pamiętam ile pokazywał, ale liczby różniły się chyba 3,4,5,6 lub 7)
" 643, 647, 651, 655, 659 [...]"
Jak widać te liczby się nie losowały, różniły się troszeczkę, bo nie były takie: LICZBA + 1 tylko np. LICZBA + 5.
Czy jest jakaś inna komenda która umożliwi mi na losowanie np. takich liczb:
" 528, 164, 985, 273, 642, 904, 263, 354",
a nie takie:
" 104, 108, 112, 116, 120, 124, 128, 132"? |
|
DejaVu |
» 2011-09-12 15:47:03 Zapewne napisałeś źle kod. |
|
m4tx |
» 2011-09-12 15:54:04 ctime mogłeś załączyć, ale czy skorzystałeś z dobrodziejstw ( srand( time( 0 ) ) ) to już inna sprawa :P |
|
Figlu |
» 2011-09-12 18:37:15 O tym pisalo na jednej z lekcji.
Jestem początkujący i nie wiem czy dobrze to rozumiem ale widze to tak: te liczby to po prostu czas na komputerze w postaci licby, jak zmieniasz jego zakrez np. aby losowalo z 1000 liczb od 1, to poprosu go dzielisz... a jesli dobrze mi wiadomo to czas plynie DO PRZODU, wiec chyba naturalne ze ci losuje liczby 123,130,147,150 itd.
jesli cos zle powiedzialem poprawcie mnie ... |
|
pekfos |
» 2011-09-12 18:43:34 wiec chyba naturalne ze ci losuje liczby 123,130,147,150 itd.
|
nie nie nie.. to nie czas zapisany w postaci liczby tylko wynik działania generatora pseudolosowego do którego podaje się czas tylko jako składnik wyniku. dzięki temu liczby są jako tako losowe ale dzięki algorytmowi nie są tendencyjne. Co do przedziałów to nie dzielenie tylko modulo. |
|
Temes Temat założony przez niniejszego użytkownika |
» 2011-09-13 15:46:39 Ja w moim kodzie napisałem: [...] srand( time( NULL ) ); int liczba =( rand() % 5 ) + 1;
To czesc tego kodu, i przez ten kod pisze mi co kilka ale w góre np. 120,125,130,135,140,145... Jest na to jakaś rada? |
|
DejaVu |
» 2011-09-13 15:49:39 srand
Wklej sobie przykład i sprawdź czy działa.
/edit:
Tak swoją drogą funkcję srand wywołuje się raz na początku programu, a nie przy każdym losowaniu. |
|
pekfos |
» 2011-09-13 15:53:00 |
|
« 1 » 2 |