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.