Jaklub Opublikowano 1 Listopada 2008 Udostępnij 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? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 1 Listopada 2008 Udostępnij Opublikowano 1 Listopada 2008 Ta funkcja randomize nie powinna zwracać czegoś? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 1 Listopada 2008 Udostępnij 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 2 Listopada 2008 Autor Udostępnij 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? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kubasz Opublikowano 28 Grudnia 2008 Udostępnij 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kryniak Opublikowano 28 Grudnia 2008 Udostępnij 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ł. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
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ę