Skocz do zawartości

Kilka losowości pod rząd w C


Jaklub

Rekomendowane odpowiedzi

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

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

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

  • 1 miesiąc temu...

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...