Istnieją 2 trudne problemy w informatyce. Nazewnictwo rzeczy, unieważnienie pamięci podręcznej i błędy indywidualne.
Jest to problem z unieważnieniem pamięci podręcznej.
Jeśli masz zapis „jest to w środku”, za każdym razem, gdy blok zostanie umieszczony lub usunięty, bardzo łatwo jest go zaktualizować i jego region poprzez wypełnienie zalewowe.
Aby to zoptymalizować, możesz mieć zestaw poziomów „insideness”.
„Komórka” to region otoczony blokami umieszczonymi przez gracza (do pewnego rozmiaru).
„Pokój” to komórka z kafelkami w tle.
„Wewnątrz” jest pokój z drzwiami, światłem i krzesłem.
Po umieszczeniu bloku pierwszego planu umieszczonego przez gracza wykonaj marsz w prawo / w lewo, aby sprawdzić, czy powstaje nowa komórka. Po usunięciu bloku pierwszoplanowego umieszczonego przez gracza sprawdź, czy nie niszczy on żadnych komórek - jeśli tak, sprawdź, czy powstaje nowa komórka, łącząc te dwie.
Po utworzeniu lub nieformowaniu nowej komórki sprawdź, czy jest to pokój lub wnętrze.
Komórki mogą śledzić, ile płytek tła musi pomieścić. Następnie prosta liczba, gdy komórka jest tworzona, kafelek tła jest dodawany lub usuwany z komórki, może ustalić, czy jest to pokój.
Podobnie komórki mogą śledzić, ile krzeseł i źródeł światła (a właściwie wszelkiego rodzaju obiektów) znajduje się w nich. Zatem kontrola wewnętrzna jest banalna.
Można również dokonać liczby wejść.
Więc wzbogacamy mapę o „komórki”. Po dodaniu lub usunięciu kafelków sprawdzamy komórkę lokalizacji i zwiększamy / zmniejszamy liczbę komórek.
Użyj chodzenia zgodnie z ruchem wskazówek zegara / przeciwnie do ruchu wskazówek zegara, aby zdefiniować wnętrze i zewnątrz komórki, gdy blok pierwszego planu jest dodawany lub usuwany. Ponieważ wielkość komórek jest ograniczona, ten spacer będzie wymagał ograniczonej liczby kroków.
Jako bonus możesz teraz tanio rozmawiać o „bogatych” pokojach, „pokoju jest błogosławiony świętą fontanną” lub o czymkolwiek innym o pokoju, ponieważ pokoje zawierają w sobie liczbę typów obiektów. (Lub, ponieważ pokoje mają ograniczony rozmiar, po prostu wykonaj iterację; to usunie pamięć podręczną).
Każda lokalizacja znajduje się w co najwyżej jednej komórce, więc możesz przechowywać identyfikator komórki każdej lokalizacji na głównej mapie.