Jaklub Opublikowano 1 Listopada 2008 Opublikowano 1 Listopada 2008 Mam problem w C. Piszę sobie grę na PSP. Mam skrypt losowania terenu: terrainy[i]=70; randomize(0,20); menu=-10+rando; for(i=1; i<=60; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=61; i<=120; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=121; i<=180; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=181; i<=240; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=241; i<=300; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=301; i<=i+360; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=361; i<=420; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=421; i<=480; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=481; i<=540; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=541; i<=600; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=601; i<=660; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } randomize(0,20); menu=-10+rando; for(i=661; i<=720; i++) { terrainy[i]=terrainy[i-1]+menu; if(terrainy[i]<20) terrainy[i]=20; if(terrainy[i]>200) terrainy[i]=200; } Powinien on losować nieco kanciasty teren. Kiedy jednak przechodzę do jego wykonywania, gra się zawiesza. Wcześniej próbowałem za pomocą jednej pętli for zrobić, żeby gra co 60 i losowała integer menu, ale jednak ten integer był wciąż ten sam. Co zrobić, aby to poprawnie działało? Jest jakaś lepsza metoda losowania liczb w C? Skrypt randomize(-,-) to: int randomize(int minimal, int range) { srand(time(NULL)); rando=rand() % range + minimal; } Czy ktoś może mi pomóc?
Tymon Opublikowano 1 Listopada 2008 Opublikowano 1 Listopada 2008 Ta funkcja randomize nie powinna zwracać czegoś?
PsichiX Opublikowano 1 Listopada 2008 Opublikowano 1 Listopada 2008 Dziwne ale ja tam nigdzie nie widzę deklaracji zmiennej "rando" (tej z funkcji). Może po prostu jest gdzieś wcześniej niż w tym kodzie co dałeś ale po prostu to mi się rzuciło pierwsze w oczy
Jaklub Opublikowano 2 Listopada 2008 Autor Opublikowano 2 Listopada 2008 rando jest zadeklarowane w mainie. To randomize(); działa (sprawdzone). Problem jest w tym, że wcześniej gra losowała liczbę tylko raz (mimo, że powinna to robić kilka razy) i miałem np. wielki spadek, a potem równinę. Teraz gra mi się zawiesza. Czy ktoś wie, jak można parę razy pod rząd wylosować liczbę w C? Czy ktoś zna lepszą metodę losowania liczb?
kubasz Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 Pokombinuj z srand, to jest "seed" (nasionko) liczby do wylosowania! np: srand((rand()/time(NULL) + 3) / 2) wiem, że to dziwna kombinacja, ale co tam :P PS. Nie używaj * (mnożenia), bo wyskoczą błędy o tym że liczba się nie mieści w zakresie
kryniak Opublikowano 28 Grudnia 2008 Opublikowano 28 Grudnia 2008 Skoro za każdym razem wywołujesz srand(time(null)) za każdym razem to funkcja weźmie zawsze tą samą liczbę (w końcu nie będzie się skypt wykonywać więcej niż sekundę). Wywal z funkcji "srand()" i umieść go gdzieś na początku wykonywania, żeby tylko raz się wywołał.
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się