In der Informatik gibt es zwei schwierige Probleme. Benennen von Dingen, Ungültigmachen des Cache und Fehler nach dem anderen.
Dies ist ein Cache-Invalidierungsproblem.
Wenn Sie eine Aufzeichnung von "Ist dies in" haben, ist es ziemlich einfach, einen Block und seine Region über eine Überflutungsfüllung zu aktualisieren, wenn er platziert oder entfernt wird.
Um dies zu optimieren, möchten Sie möglicherweise eine Reihe von Stufen der "Insidenz" haben.
Eine "Zelle" ist eine Region, die von vom Spieler platzierten Blöcken (bis zu einer bestimmten Größe) umgeben ist.
Ein "Raum" ist eine Zelle mit Hintergrundkacheln.
"Inside" ist ein Raum mit einer Tür, einem Licht und einem Stuhl.
Wenn Sie einen vom Spieler platzierten Vordergrundblock platzieren, gehen Sie im / gegen den Uhrzeigersinn, um festzustellen, ob eine neue Zelle gebildet wird. Wenn Sie einen vom Spieler platzierten Vordergrundblock entfernen, prüfen Sie, ob er Zellen beschädigt. Wenn dies der Fall ist, prüfen Sie, ob durch Zusammenführen der beiden Zellen eine neue Zelle entsteht.
Wenn eine neue Zelle geformt oder nicht geformt ist, prüfen Sie, ob es sich um einen Raum oder ein Inneres handelt.
Zellen können verfolgen, wie viele Hintergrundkacheln sie benötigen, um einen Raum zu bilden. Wenn dann eine Zelle gebildet wird, eine Hintergrundkachel hinzugefügt oder aus der Zelle entfernt wird, kann eine einfache Zählung bestimmen, ob es sich um einen Raum handelt.
Ebenso kann Cells verfolgen, wie viele Stühle und Lichtquellen (und tatsächlich Objekte aller Art) sich in ihnen befinden. Dann ist der Insider-Check trivial.
Eine Zählung der Zugänge ist ebenfalls möglich.
Also erweitern wir die Karte mit "Zellen". Wenn Kacheln hinzugefügt oder entfernt werden, überprüfen wir die Zelle der Position und erhöhen / verringern die Anzahl in der Zelle.
Verwenden Sie das Gehen im / gegen den Uhrzeigersinn, um das Innere und Äußere einer Zelle zu definieren, wenn ein Vordergrundblock hinzugefügt oder entfernt wird. Da die Größe der Zellen begrenzt ist, ist die Anzahl dieser Schritte begrenzt.
Als Bonus haben Sie jetzt eine günstige Möglichkeit, über "opulente" Räume zu sprechen, oder über "Raum ist durch einen heiligen Brunnen gesegnet", oder irgendetwas anderes über einen Raum, da in Räumen die Anzahl der einzelnen Objekttypen angegeben ist. (Da die Größe der Räume begrenzt ist, müssen Sie nur eine Iteration durchführen. Dadurch wird ein Cache entfernt.)
Jeder Standort befindet sich in höchstens einer Zelle, sodass Sie die Zellen-ID jedes Standorts auf der Hauptkarte speichern können.