Skocz do zawartości

Kilka losowości pod rząd w C


Rekomendowane odpowiedzi

Opublikowano

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?

Opublikowano

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

Opublikowano

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?

  • 1 miesiąc temu...
Opublikowano

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

Opublikowano

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ł.

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ę...