2009-08-28 15 views
5

Zastanawiam się, jakie są najczęściej używane algorytmy stosowane do znajdowania wzorców w grach logicznych, które są zgodne z siatkami komórek.Wyszukiwanie wzorców w grach logicznych

Wiem, że zależy to od wielu czynników, takich jak rodzaj wzorców, które chcesz wykryć, czy zasad gry ... ale chciałem wiedzieć, jakie są najczęściej używane algorytmy w tego typu problemach.

Na przykład gry takie jak kolumny, bejewelled, a nawet tetris.

Chciałbym również wiedzieć, czy wykrywanie wzorców za pomocą "brutalnej siły" (np. Skanowanie całej siatki próbującej znaleźć trzy komórki celi tego samego koloru) jest znacznie gorsze niż stosowanie określonych algorytmów w bardzo małych siatkach, takich jak 4 X 4 na przykład (i znowu wiem, że zależy to od rodzaju gry i zasad ...)

Jakie struktury są powszechnie używane w tego rodzaju grach?

Odpowiedz

5

To zawsze zależy od domeny. Ale są też dwie sytuacje, w których wykonujesz tego rodzaju wyszukiwania. Sytuacja jest następująca po ruchu (zmiana pola gry dokonanego przez gracza), a druga to sytuacja, w której/całość zmieni się.

W Tetris nie trzeba będzie skanować całej planszy po upuszczeniu kawałka. Musisz po prostu przeszukać rzędy, których dotyka kawałek.

W grach typu "match-3", takich jak "Bejeweled", w których zamieniasz dwie sąsiednie części naraz, musisz najpierw przeprowadzić zlokalizowane wyszukiwanie w każdym kierunku wokół każdego zmienianego kwadratu, aby sprawdzić, czy jakieś elementy zostały uruchomione. Następnie, jeśli tak, gra zrzuci kilka nowych losowych elementów na planszę. Teraz możesz uruchomić to samo zlokalizowane wyszukiwanie wokół każdego zmienionego kwadratu, ale może to wymagać wielu stwierdzeń if i może być wolniejsze, aby skanować całą planszę od góry po lewej do prawej dolnej. To zależy od twojej implementacji i wymagałoby profilowania.

Jak mówi Adrian, wystarczająca jest prosta tablica 2D. Często jednak można dodać "obramowanie" pikseli wokół tej tablicy, aby uprościć szukanie wzorców. Bez obramowania, będziesz musiał mieć instrukcje if wzdłuż kwadratów krawędzi, które mówią "dobrze, jeśli jesteś w górnym rzędzie, nie szukaj w górze (i chodź z tablicy)".Dzięki obramowaniu wokół niego możesz bezpiecznie przeszukiwać wszystko: zapisywanie siebie, oszczędzanie sobie rozgałęzień, oszczędzanie sobie problemów z rurociągami, wyszukiwanie szybciej.

Jon: Takie rzeczy naprawdę mają znaczenie w zaawansowanych ustawieniach, nawet na nowoczesnych komputerach, jeśli tworzysz algorytm wyszukiwania, który umożliwia grę/rozwiązanie gry. Jeśli tak, to chcesz, aby podstawowa symulacja działała tak szybko, jak to możliwe, aby wyszukiwać jak najgłębiej w jak najmniejszej liczbie cykli.

2

Odnośnie algorytmów: to na pewno zależy od gry. Na przykład w przypadku tetris wystarczy zeskanować każdy wiersz, jeśli ma on ten sam kolor. Nie mogę nawet wymyślić czegoś, co nie byłoby równoznaczne z podejściem brutalnej siły w tym przypadku. Ale w przypadku większości zwykłych gier brutalna siła powinna być idealnie dobra. Rozpoznawanie wzorów powinno być pomijalne w porównaniu do przetwarzania grafiki i dźwięku.

W odniesieniu do struktur: Prosta tablica 2D powinna wystarczyć do reprezentowania tablicy.

0

Biorąc pod uwagę średnią prędkość komputera w dzisiejszych czasach, jeśli jest to gra w czasie rzeczywistym, użytkownik prawdopodobnie nie będzie miał znaczenia (EDYCJA: tylko w przypadku bardzo małych gier). Z pewnością zależałoby to od złożoności logiki gry, ale także od tego, jak szybko kod będzie działał na maszynie docelowej (tj. Jest to strona internetowa JavaScript lub aplikacja Windows napisana w C++).

Jeśli ma to na celu symulację strategii gry, użyj bardziej wydajnego algorytmu.

Bardziej wydajna strategia może polegać na śledzeniu przyrostowych zmian na planszy, zamiast ponownego skanowania całej tablicy za każdym razem.

Powiązane problemy