Skocz do zawartości

zabawa w pętli (pytanie zielonego)


Luvac

Rekomendowane odpowiedzi

Sprawa jest taka, że losuje dwie zmienne, które będą mnożone, ale wynik tego mnożenia musi znaleźć sie w określonym zakresie. Np w jednym z poziomów gry zakres to 15-35.

Wymyśliłem takie coś:

 

 
q=0
w=0

q=round(random(8))+2

do
w=round(random(10))
until
(14<(q*w)<36);

global.a=q
global.b=w

 

Niestety to nie działa. Program losuje jak chce. Z góry dziękuję za zainteresowanie i ewentualną pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
var wynik,tab,rand;

wynik = irandom_range(15,35) //dowolne liczby

tab[0] = 0

for(i = 0; i < sqrt(wynik)-2; i += 1) tab = (wynik/(i+2))*(frac(wynik/(i+2)) == 0) //szukanie dzielników, 0 jeżeli nie dzieli

rand = irandom(sqrt(wynik))

while(!tab[rand]) rand = irandom(sqrt(wynik)-2)

global.a = tab[rand]

global.b = wynik/tab[rand]

Powinno działać, choć na pewno da się zoptymalizować.

Odnośnik do komentarza
Udostępnij na innych stronach

moze lepiej niech program obliczy drugi numer mnozenia(_source2) .

prosty sposob,lecz skuteczny:

GML
_target_range_min = 15;

_target_range_max = 35;

_target = random_range(_target_range_min, _target_range_max);

 

_source1_range_min = 2;

_source1_range_max = 8;

_source1 = random_range(_source1_range_min, _source1_range_max);

 

_source2 = _target/_source1;

nastepnie zawsze _source1 * _source2 = _target

 

mozes uzyc nawet irandom_range i pozyskac fajny efekt kdy wynik jest zawsze caly numer.

vystarczy uzyc:

GML
_target = irandom_range(_target_range_min, _terget_range_max);
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ę...