NukeBoards

Artykuły i e-ziny - [Algorytm] AutoTile

Cootje - 11-09-2013, 02:07
: Temat postu: [Algorytm] AutoTile
Witam,

Chciałbym przedstawić sposób na stworzenie AutoTile - metody używanej w wielu edytorach map bardzo przydatnej i przyśpieszającej maping naszych gier.
Istnieje wiele różnych algorytmów przykładowo dla podłoży jak w RPG Maker lub dla samych ścian, ale ja przedstawię uniwersalny sposób nadający się do tworzenia map dla gier z widokiem z góry jak i platformówek.


Algorytm:


Kod:

1.0 Ustaw badany klocek na ostatnio postawiony.

1.1 Dla badanego klocka zlicz sąsiadów ustawiając odpowiednio 8 flag (0 - pole puste, 1 - pole pełne).

1.2 Podczas liczenia jeśli napotkamy sąsiadujący klocek, który nie był jeszcze sprawdzony i jest sąsiadem ostatnio postanowionego
wracamy do punktu 1.1

1.2.1 Jeśli napotkamy sąsiada ustawiamy flage na 1 jeśli nie to na 0. ( sąsiad 1 flaga1, sąsiad 2 lfaga2 itd... )

1.3 Po skończeniu zliczania sąsiadów ustawiamy danemu klockowi animacje według jego flag po czym zerujemy flagi.



Wizualizacja:



Na fioletowo zaznaczono aktualnie badany klocek.


Schemat flag jeśli pierwsza oznacza klocka badanego po lewej i dalej kierując się w kierunku wskazówek zegara:



00000000 =
1?0?0?0? =
0?1?0?0? =
0?0?1?0? =
0?0?0?1? =
0?1?0?1? =
1?0?1?0? =
10101010 =
11111111 =
1?1?0?0? =
0?1?1?0? =
0?0?1?1? =
1?0?0?1? =
0?1?1?1? =
1?0?1?1? =
1?1?0?1? =
1?1?1?0? =
0?11111? =
0?0?111? =
1?0?1111 =
1?0?0?11 =
111?0?11 =
111?0?0? =
11111?0? =
0?111?0? =
0?11101? =
0?10111? =
1?0?1110 =
1?0?1011 =
101?0?11 =
111?0?10 =
11101?0? =
10111?0? =
11101110 =
10111011 =
10101110 =
10101011 =
11101010 =
10111010 =
11101011 =
11111010 =
10111110 =
10101111 =
11111011 =
11111110 =
10111111 =
11101111 =


Download:
AutoTile

Fadex - 11-09-2013, 02:37
:
No... Dijkstra to to nie jest, ale prosty i skuteczny algorytm :P

Zakodzenie tego zaoszczędza sporo czasu, powiem od razu że układanie tak kafelków w edytorze poziomów to głupota. W Twoim poście znajduje się wszystko poza... opisaniem co właściwie pokazujesz :P więc może dopowiem:

Oczywiście jest to sposób ustawienia klocków tak by pasowały do sąsiadujących graficznie. Najlepiej jest to zrobić prostym algorytmem, gdyż ustawianie tego ręcznie nie ma sensu. Do tego algorytmu bardzo przydaje się kolejka, a z implementacją jej w klikach może być różnie zależnie od tego jakiej struktury do tego użyjemy - no ale cóż, to nie c++ :P

PS: Tak w ogóle to czy nie ma jakiegoś rozszerzenia obsługującego kolejkę (albo lepiej całą strukturę dekową - wraz ze stosem, mieszaniem i sortowaniem)? Bo w sumie byłoby to dość przydatne w implementacji wieeelu algorytmów.
Cootje - 11-09-2013, 02:58
:
Ja użyłem tylko Map object (Zastępstwo array do przechowywania planszy), jednego activa z grafikami i kolejnego jako wskaźnik myszy, a reszta to sprytne użycie pętli odpalanej 1 raz w MMF2. :D

Dla osób, które nie radzą sobie z pętlami w MMF2 jest jeszcze Queque Object, choć nie wiem jak działa bo nie miałem okazji używać.
Fadex - 11-09-2013, 12:38
:
Aaaa. To z pętli zrobiłeś sobie taki stos systemowy. W sumie dobry pomysł :)
Cootje - 11-09-2013, 14:10
:
Można tak powiedzieć.