Autor Wątek: Algorytmika - algorytm generowania mapy.  (Przeczytany 2367 razy)

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 18:44:16
Witam, od dawna śledzę te forum, i warsztaty, ale teraz naszło mnie, gdy mam problem zarejestrować się ;)
Mianowicie, potrzebuję algorytmu, do generowania mapy, sam się nad tym trudziłem i nie wymyśliłem ;/ Google znalazło jedynie to: http://translate.google.pl/translate?hl=pl&sl=en&tl=pl&u=http://roguebasin.roguelikedevelopment.org/index.php%3Ftitle%3DCellular_Automata_Method_for_Generating_Random_Cave-Like_Levels&anno=2 i to

Potrzebuje to do mojej gry RPG ;) Na razie piszę, pewnego rodzaju szkielet oparty na klasach. Ktoś mógłby, mi wyjaśnić ten algorytm ? lub podrzucić, jakiś inny. Szkielet piszę w wersji konsolowej, dalsze postępy będą za użyciem SDL.
Dziękuje i pozdrawiam Missqu ;)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline s0d

  • Użytkownik

# Luty 27, 2011, 18:55:52
Przysiądź na tyłku i czytaj kod zamieszczony na wiki aż zrozumiesz, czytaj linijka po linijce i zapisuj co każda instrukcja robi

Offline Xirdus

  • Redaktor

# Luty 27, 2011, 19:21:53
Potrzebuje to do mojej gry RPG ;)
Jeśli to ma być RPG w pełnym tego słowa znaczeniu (z naciskiem na RP), nie implementuj tego. Jeśli ma to być dungeon crawler lub inny hack'n'slash, to OK, ale nie nazywaj tego wtedy RPG.

PS nie używaj translatora; tylko ci on namiesza.

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 19:29:15
Ehh... Xirdus nmiałem nbapisać te oto zdania :)
Cytuj
Myslisz, że teog nie zrobiłem ?:) Jedyne co zrozumiałem, to to, że należy wypełnić mapę losowo i sprawdzić, czy nie ma w poblizu ściany, i zrobić to we wszystkich kaflach naraz, jakoś tak...  Dalszej, części nawet na polski , przetłumaczyć nie potrafiłem, po zasięgnięciu do słownika nie trzymało się to do kupy...

wielokrotnie stosować 4-5 zasada: dachówka jest ściana, czy jest to ściana i 4 (lub więcej), które są sąsiadami ściany Jak dla mnie to przetłumaczone zdanie nie ma sensu...
Translatora nie używałem ;) Jedynie tłumaczyłem pojedyncze słowa,w których znaczenia nie znalem. Jak już mówiłem, będę korzystał z SDL, jest tam bodajże SDL.net Będzie możliwość, of course kampanii, no i 2 innych trybów, losowej mapy, i multi. I te właśnie tryby będą korzystać z generowania mapy. Od siebie do algorytmu po prostu dodam w sensownej odległości "miasta", ponieważ ta mapa, będzie mapą świata, ponieważ w grze chciałem całkowicie postawić na fabułę, bo ona jest tak naprawdę najważniejsza ;)

Offline Xirdus

  • Redaktor

# Luty 27, 2011, 19:44:59
Translatora nie używałem ;)
Zasugerowałem się tym, że w temacie dałeś link do google translate.

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 19:47:55
co do wyjaśnienia, masz propozycję jakąś ? Wskazówkę sugestię ? Cokolwiek ;/ Kminie to od soboty i estm załąmany...  W depresję nie wpadłem :E

Offline Xirdus

  • Redaktor

# Luty 27, 2011, 20:01:51
  • Robisz dwie tablice wielkości mapy
  • Pierwszą po kolei wypełniasz losowo ścianą lub brakiem ściany (45% szans że ściana będzie)
  • Drugą po kolei wypełniasz ścianą lub pustym zależnie od ilości sąsiadujących ścian z odpowiadającą komórką w pierwszej tablicy (5 lub więcej ścian -> jest ściana)
  • Teraz druga tablica jest pierwszą a pierwsza drugą
  • Powtarzasz od punktu 3. około 5 razy

To będzie coś w tym stylu.

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 21:04:01
i to wszystko ?napisałeś to trochę dziwnie...
a na koniec ? Wybieram po prostu tablicę i kopiuje zawartość do mapy...
no nic rozpisze sobie to na kartce, w razie czego zmodyfikuje i dam znać :)

Offline Xirdus

  • Redaktor

# Luty 27, 2011, 21:10:38
i to wszystko ?napisałeś to trochę dziwnie...
Jeszcze znajdywanie niepołączonych jaskiń i ich łączenie. A pisałem w takim stylu, by czytając móc z marszu zaimplementować.

BTW na tamtej stronie masz kod źródłowy C gotowego generatora.

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 21:29:06
wiem, jednak jeżeli go nie zrozumie to nic mi po tym ;) C może i jest podobny do C++ , przecież to jego poprzednik, no ale zmiany są
Właśnie ja chcę to zrozumieć, tlyko zrozumieć, zaimplementuje w swoim czasie, narazie jest to tylko projekt, zaimplementowane jest kilka klas, ale dopóki nie zrobię generatora, wolałbym nie kodzić "modelu" graficznego, moim zdaniem byłoby zbyt wiele "gruntownych" zmian w późniejszym czasie. PO za tym, jest to mój pierwszy poważny projekt, a nie gra na 5 min. Chyba rozumiesz o co mi chodzi ?
Reasumując:
Potrzebne mi zrozumienie zagadnienia, a nie same "kodzenie algorytmu".

A tu o co biega ?;) "Pierwszą po kolei wypełniasz losowo ścianą lub brakiem ściany (45% szans że ściana będzie)" mam po kolei jak leci przelecieć wszytkie kafle i losować prawdopodobieństwo ? Jeżeli tak wartośc 1 jeżeli nie wartość 0 ? Potwierdź czy dobrze zrozumiałem ;)
Następnie, sprawdzamy czy dookoła kafla jest więcej niż 5 niedostępnych kafli, jeśli tak zapełniamy niedostępna ścianą jeżeli nie zostawiamy. Jeżeli tak zrobimy, to będzie generować jedynie ściany tak...

Offline Xirdus

  • Redaktor

# Luty 27, 2011, 21:46:14
Dokładnie tak jak piszesz. Jest to automat komórkowy. Działa on na tej zasadzie, że po iluś przebiegach z chaosu powinny wyróżnić się zbite grupy ścian i puste przestrzenie pomiędzy.

BTW parametry generatora (45%, 5 ścian wokół, 5 przebiegów) możesz dowolnie zmieniać na takie, które według ciebie dadzą najlepsze średnie efekty.
« Ostatnia zmiana: Luty 27, 2011, 21:47:46 wysłana przez Xirdus »

Offline Missqu

  • Użytkownik

# Luty 27, 2011, 21:49:29
no dziękuje ;) teraz sobie mniej wiecej w projekcie  w zeszycie w kratke zrobie :D później pokombinuje z kodem w oddzielnym projekcie i dodam do tego poprawnego ;)

Pozdrawiam !
Missqu