ZyperPL Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Witam! Ostatnio postanowiłem powrócić do Game Makera i dokończyć mój projekcik. Tylko oczywiście mam problem... Nie wiem, czy to zaawansowany czy nie. Jednak napiszę już tutaj, ponieważ z GMem siedzę trochę dłużej. Tak więc, jak napisałem w nazwie tematu chciałbym zrobić losowe generowanie mapy. Ale nie takie chaotyczne (bo takie, gdzie obiekty są byle gdzie to umiem zrobić) tylko takie, gdzie objekty będą poukładane w jakiejś logicznej kolejności. Grafika top-down. Chcę, żeby obiekty tworzyły losowe ściany i korytarze, ale tak, żeby można było tam przejść. Proszę, żeby mi ktoś napisał jak to mniej więcej zrobić. Kody GML mile widziane (choć wystarczy mi to dokładnie opisać) :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Poukładaj sobie mapę z klocków na podłodze i zastanów się przy tym co tobą kieruje, że układasz tak, a nie inaczej. Nie ma na to uniwersalnego algorytmu. To zależy jak te twoje mapy mają wyglądać, jak ma być ta "logiczna kolejność". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Czyli zamierzasz zrobic cos w stylu losowania mapy w heroes? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 29 Marca 2011 Autor Udostępnij Opublikowano 29 Marca 2011 Heroes? Jacy Heroes? Might and Magic? O ile pamiętam, nie było tam losowej mapy. Ale chodzi mi o to, żeby bloki ustawiały się w ściany. A nie jako pojedyńcze bloki. Jak to napisać? Można zrobić tak, że tworzy jeden blok i dokleja inne do niego. Ale jakie są na to polecenia, bo opuściłem się w GM :<? @Platyna, no tak. Tylko raczej nie da się umysłu ludzkiego przepisać do gry. To trzeba jakoś znaleźć inny sposób, tak żeby wydawało się, że to losowe. Trochę nad tym myślałem i zrobiłem ten temat, żeby czegoś więcej się dowiedzieć, bo bez waszej pomocy na pewno tego nie zrobię :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Heroes? Jacy Heroes? Might and Magic? O ile pamiętam, nie było tam losowej mapy. heroes of might &magic <II.Losowanie bylo w edytorze map i tworzeniu mapy w potyczkach. a co do tematu glownego: losuj rozmiar danego pokoju, utworz za pomoca tego sciany, znajdz przyklad w zasobach gmclanu na laczenie murow, a reszta analogicznie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Wrzucaj na listę wszystkie aktualnie istniejące ściany boczne bloczków. Losuj, którąś z listy i dobudowuj do niej nowy bloczek. Ścianę tę usuń z listy, a wrzuć 3 nowe ściany nowego bloczka. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 hmm może w ten sposób: *cały room podzielony jest na grid powiedzmy 64x64 *wszystkie komórki wypełnione są obiektami solid(ściana 64x64) *następnie po roomie zasuwa gumka- obiekt 64x64 który wycina korytarze, jej ruch trzeba dobrze zaprogramować aby wycinanka miała ręce i nogi. *w większych komnatach tworzone są specjalne strefy, tzw komnaty objekty będą poukładane w jakiejś logicznej kolejności. Czyli? że np w komnacie(pomieszczeniu o jakimś tam rozmiarze ) która powstała po wycinance tworzysz cmentarz,->jakieś tam grobki-> sprawdzasz gdzie stworzył się cmentarz-> niedaleko stawiasz wrogów którzy żyją na cmentarzu-> jakieś przedmioty specjalne niedaleko wrogów cmentarnych Analogicznie po wycinance możesz sprawdzić czy jest jakis większy obszar wolny-> stawiac tam obj drzewka etc; leśne żyjątka->leśnych wrogów->leśne skarby W ten sposób mapka może być ciekawa i sensowna, jakby człowiek sam ją ręcznie składał:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 30 Marca 2011 Autor Udostępnij Opublikowano 30 Marca 2011 hmm może w ten sposób: *cały room podzielony jest na grid powiedzmy 64x64 *wszystkie komórki wypełnione są obiektami solid(ściana 64x64) *następnie po roomie zasuwa gumka- obiekt 64x64 który wycina korytarze, jej ruch trzeba dobrze zaprogramować aby wycinanka miała ręce i nogi. *w większych komnatach tworzone są specjalne strefy, tzw komnaty Czyli? że np w komnacie(pomieszczeniu o jakimś tam rozmiarze ) która powstała po wycinance tworzysz cmentarz,->jakieś tam grobki-> sprawdzasz gdzie stworzył się cmentarz-> niedaleko stawiasz wrogów którzy żyją na cmentarzu-> jakieś przedmioty specjalne niedaleko wrogów cmentarnych Analogicznie po wycinance możesz sprawdzić czy jest jakis większy obszar wolny-> stawiac tam obj drzewka etc; leśne żyjątka->leśnych wrogów->leśne skarby W ten sposób mapka może być ciekawa i sensowna, jakby człowiek sam ją ręcznie składał:) Bardzo dobrze mi to wytłumaczyłeś :) Tylko jest jakiś prosty sposób na sprawdzanie wielkości pomieszczenia? distance_to_object chyba za bardzo nie pasuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Marca 2011 Administratorzy Udostępnij Opublikowano 30 Marca 2011 Ja bym stworzył gotowe większe kawałki korytarzy i pomieszczeń i układał je w całośc jak puzzle. Wtedy np. zawsze do danej strefy może być max. 4 wejscia (północ, południe, wschód, zachód), ale nie muszą - nie mniej ustawiając jeden losowy klocek na starcie który ma wejścia na górze i z prawej wiesz, że z lewej i na dole musisz ustawić fragment mapy który wejśc z tej strony mieć nie będzie. To raptem 4 instrukcje if ;) Ew. algorytmy na znajdywanie drogi które są w GM, mogą posłużyć za rysowanie korytarzy pomiędzy takimi pomieszczeniami (wtedy gdy np. masz każdy blok wielkości 200x200 pikseli, wcale nie muszą być one ułożone w siatce tej wielkości - mogą być na różnych wysokościach, żeby korytarz trochę skręcał). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Wielkość pomieszczenia możesz sprawdzać np przez collision_rectangle. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 E tam. Jak by już miały być prostokątne to pole powierzchnia raczej prościej można wyliczyć niż collision_rectangle(). Nie mam w sumie pojęcia jak byś chciał to zastosować. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Ja bym skrobnął takie coś: OBRAZEK 1. tworzysz ds map grida z wylosowanymi w nim zapełnionymi polami 2. losujesz jakieś punkty które nie będą nachodzić na te pola. ( będą to końcówki korytarzy ) 3. Algorytmem A* ( motion planning w GM ) łączysz każdy punkt z każdym tak by omijały kwadraty ( tworzysz osobne pathy ) 4. wywalasz kwadraty 5. teraz wypełniasz naokoło pathów puste miejsca ścianami. 6. pathy usuwasz. Tak były by tworzone korytarze a pokoje to możesz np utworzyć dokładnie w tych czerwonych punktach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Muszę przyznać - sprytne. Dobrze by było gdyby jeszcze nasz pytek odpowiedział w końcu jaką tą mapę chce. W przybliżeniu jak one mają wyglądać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 30 Marca 2011 Autor Udostępnij Opublikowano 30 Marca 2011 No, tylko co dokładniej mam Ci powiedzieć ;) Pisałem top-down i korytarze, więc przepraszam, że mogło być to do końca nie jasne. http://img843.imageshack.us/img843/9269/ma...owageneracj.png Chodzi o coś mniej więcej rogulelike. Ale nie tak zaawansowane. Same korytarze wystarczą. Pomysł LunderLorda* i alwina świetny. Wielkie dzięki również Platynie za pomoc. Ciekaw jestem, czy coś zrobię i czy nie pozapominałem komend (z tym motion planing to masakra). Jak zrobić, żeby pathe powstawały po kątach prostych (90*), bo to nie było tak, że zawsze leciało bardziej płynnie? Może ktoś trochę zarzuci komendami? :S @Dół: Nie przekręciłem. Po prostu zły klawisz wcisnąłem. Sorka. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 tutorial A* w GM http://gmc.yoyogames.com/index.php?showtopic=337222& LunderLorda :D Sporo już przekrętów widziałem. Amerykańce często przekręcają Hunterlord albo HunerLord ale 'L' :D pierwsze widzę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Może przydać nam się jakaś funkcja co przyjmuje jako argumenty liczby a i n i zwraca losową liczbę z przedziału <n-a;n+a> w taki sposób by te najbliżej n miały największe szanse na wylosowanie. Funkcja powinna wyglądać jakoś tak: GML (Skrypt quotlosujquot) a=argument0; n=argument1; l=sqr(random(sqrt(a))); l=n+(sign(random(2)-1)*l); return l; Jeśli się nie pomyliłem to powinno działać. Nie sprawdzałem. :) Teraz możesz przy jej pomocy losować sobie ilość komnat, ich szerokości i wysokości mając jakąś wartość n która chcesz by wypadał najczęściej. Zwraca liczby rzeczywiste jakby co. Możesz sobie je dodatkowo zaokrąglić jak chcesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 30 Marca 2011 Autor Udostępnij Opublikowano 30 Marca 2011 Ehh.. Chyba tego nie ogarniam, co napisał HuderLord. Trzeba robić jeden path, czy do każdego połączenia nowy? I.. i... jak wykrywać czy block koliduje z pathem? Ehh.. przerasta mnie to. Chyba użyję sposobu alwina. IMHO łatwiejszy :< Dawno nie siedziałem z GM, więc teraz trudno mi się myśli :| Sory, i dzięki ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Tak dla każdego połączenia inny path. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 30 Marca 2011 Udostępnij Opublikowano 30 Marca 2011 Możesz zobaczyć ten silniczek- jest tu generowanie mapy, tyle że ciężko się połapać w skryptach. dungeon_rts_source 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ę