Luvac Opublikowano 5 Września 2013 Udostępnij Opublikowano 5 Września 2013 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 Więcej opcji udostępniania...
cysior Opublikowano 5 Września 2013 Udostępnij Opublikowano 5 Września 2013 z1 = round(random(8)) ; z2 = round(random(10)); while!(14<(z1*z2) && (z1*z2)<36) { z1 = round(random(8)) ; z2 = round(random(10)); } global.a=z1 global.b=z2 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 5 Września 2013 Udostępnij Opublikowano 5 Września 2013 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 Więcej opcji udostępniania...
Luvac Opublikowano 5 Września 2013 Autor Udostępnij Opublikowano 5 Września 2013 Obu nie rozumiem do konca:p Sprawdzilem pomysl cysiora i dziala. Ustawialem rozne przedzialy i jest ok. Wielkie dzieki wam obu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 5 Września 2013 Udostępnij Opublikowano 5 Września 2013 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 Więcej opcji udostępniania...
Threef Opublikowano 5 Września 2013 Udostępnij Opublikowano 5 Września 2013 @ereg bardzo fajne podejście! Brawo! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 6 Września 2013 Udostępnij Opublikowano 6 Września 2013 A to przypadkiem te dzielniki nie mają być całkowite? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 6 Września 2013 Udostępnij Opublikowano 6 Września 2013 A to przypadkiem te dzielniki nie mają być całkowite? mozna tak i tak lub pokombinovac, dzieki random a irandom komendzie 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ę