SimianVirus7 Opublikowano 22 Stycznia 2016 Udostępnij Opublikowano 22 Stycznia 2016 Witam. Czy idzie uzyskać prawdziwą losowść w gm:s ? Wiem, ze samo choose nie wystarczy, poniewaz przy włączaniu gry od nowa, "losowość" jest taka sama, jak poprzednio. Moze mnie ktoś nakierować na dobrą drogę do uzyskania tego efektu ? Próbowałem napisać kod z duzą ilością obliczeń: GML for(i=0;i<10;i++){ rand=ceil(random(500)); } if rand>=250 then instance_create(x+9,y,oMushroom_red_item) if rand<=250 then instance_create(x+9,y,oFlower) ale ciągle to samo. Tak samo było w przypadku funkcji "choose" w "choose", co skutkowało tylko odwróceniem się spawnienia obiektów. Wiem, ze był juz taki temat, ale nie ma odpowiedzi (https://forum.gmclan.org/index.php?showtopic=32499&hl=losowo). (tak, nie działa mi "ż", ten jest skopiowany :P ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 22 Stycznia 2016 Udostępnij Opublikowano 22 Stycznia 2016 Musisz użyć randomize(), w swoim programie. Ustala on seed twojej pseudolosowości. Można też użyć random_set_seed(x), gdzie x to nasz właśnie seed. Czyli ustawiając zawsze ten sam seed, będziemy mieli zawsze ten sam ciąg liczb losowych. W wypadku randomize(), ustawia się on za każdym razem inny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 22 Stycznia 2016 Udostępnij Opublikowano 22 Stycznia 2016 Prawdziwa losowość nie istnieje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 22 Stycznia 2016 Autor Udostępnij Opublikowano 22 Stycznia 2016 Gdzieś o tym czytałem Vader, ale chodziło mi o uzyskanie "bardziej" losowych liczb, niz przy zwykłym wykorzystaniu choose czy random. Niedługo sprawdze ten randomize i dam znać czy działa ;) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 23 Stycznia 2016 Udostępnij Opublikowano 23 Stycznia 2016 Ja troszeczkę poopowiadam. Komputery są maszynami deterministycznymi: kolejny stan takiej maszyny zależy wyłącznie od poprzednich stanów. Oznacza to, między innymi, że nie istnieje algorytm, który zwróci liczbę prawdziwie losową - liczba, którą wygeneruje, zależy tylko od tego, jakie dane wejściowe ma ten algorytm. Istnieją metody do generowania liczb, które wydają się być losowe. Ponieważ jednak nie są one prawdziwie losowe, nazywa się je pseudo-losowymi. Każda z tych metod korzysta z czegoś, co się nazywa seed (po polsku byłoby pewnie "ziarno", ale "seed" jest krótsze). To, jakie liczby zostaną wygenerowane przez algorytm pseudo-losowy zależy od tego, jaką wartość posiada seed. Dla różnych wartości seed liczby wygenerowane przy wywołaniu funkcji z tymi samymi argumentami mogą być różne. Funkcje: choose(), irandon_range(), irandom(), random_range(), random() działają różnie, ale mają wspólną cechę: wszystkie generują liczby w ten sam sposób, korzystając z wewnętrznego algorytmu pseudolosowego. Oznacza to, że wszystkie funkcje losowe w GM-ie dzielą ten sam seed. GameMaker Studio dla każdego projektu przypisuje pewną domyślną wartość seed, więc przy każdym uruchomieniu aplikacji wywołania funkcji losowych w tej samej kolejności zwrócą te same wartości. GM posiada funkcje do interakcji z seedem: -randomize() jest tym, czego chcesz - ustawia seed na losową wartość (*) -random_set_seed() pozwala ręcznie ustawić wartość seed -random_get_seed() zwraca aktualną wartość seed. randomize() wystarczy wywołać raz, przy uruchomieniu aplikacji. (*) Ta losowa wartość nie jest losowa - to po prostu czas systemowy, wartość zmieniająca się bardzo często (chyba co milisekundę), więc nie ma mowy o przewidzeniu wartości seed przy uruchomieniu aplikacji, a o to przecież chodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Stycznia 2016 Udostępnij Opublikowano 23 Stycznia 2016 Popraweczki, bo jestem na bieżąco. :P GameMaker Studio dla każdego projektu przypisuje pewną domyślną wartość seed, więc przy każdym uruchomieniu aplikacji wywołania funkcji losowych w tej samej kolejności zwrócą te same wartości.Domyślny seed to 0. Dla każdej gry zrobionej w GM. @SimianVirus7 wybierz liczbę całkowitą od 1 do 10. Nie obchodzi mnie co to za liczba, obchodzi mnie czemu ja wybrałeś i czemu nie jest losowa. :) seed możesz sobie wyobrazić (w ogromnym uproszczeniu) jako punkt startowy. Nie ważne jaką liczbę wybrałeś to jeżeli dodasz do niej aktualny czas to wyjdzie Ci 'w miarę' losowa liczba. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 28 Stycznia 2016 Autor Udostępnij Opublikowano 28 Stycznia 2016 Dobra działa :3 . Dzięki za pomoc, jak zwykle :P. Przychodze tu od 3-4 lat, a forum o dziwo zawsze skłonne do pomocy :) 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ę