Ada 2 masalah sulit dalam ilmu komputer. Memberi nama hal-hal, cacat cache dan kesalahan satu-per-satu.
Ini adalah masalah pembatalan cache.
Jika Anda memiliki catatan "apakah ini di dalam", setiap kali blok ditempatkan atau dihapus, cukup mudah untuk memperbaruinya dan wilayahnya melalui banjir.
Untuk mengoptimalkan ini, Anda mungkin ingin memiliki serangkaian tingkatan "insideness".
"Sel" adalah wilayah yang dikelilingi oleh blok yang ditempatkan pemain (hingga ukuran tertentu).
"Kamar" adalah sel dengan ubin latar belakang.
"Di dalam" adalah ruangan dengan pintu, lampu, dan kursi.
Saat Anda meletakkan blok latar depan yang ditempatkan pemain, lakukan gerakan searah jarum jam / berlawanan arah jarum jam untuk melihat apakah sel baru terbentuk. Saat Anda menghapus blok latar depan yang ditempatkan pemain, periksa apakah itu memecah sel - jika demikian, lihat apakah sel baru terbentuk dengan menggabungkan keduanya.
Ketika sel baru terbentuk atau tidak terbentuk, periksa apakah itu ruangan atau bagian dalam.
Sel dapat melacak berapa banyak ubin latar belakang yang mereka butuhkan untuk sebuah ruangan. Kemudian hitungan sederhana ketika sel terbentuk, ubin latar belakang ditambahkan atau dihapus dari sel, dapat menentukan apakah itu sebuah ruangan.
Demikian pula, Cell dapat melacak berapa banyak kursi dan sumber cahaya (dan sebenarnya objek dari semua jenis) di dalamnya. Kemudian cek di dalam adalah sepele.
Hitungan pintu masuk juga bisa dilakukan.
Jadi kami menambah peta dengan "sel". Ketika ubin ditambahkan atau dihapus, kami memeriksa sel lokasi, dan menambah / mengurangi jumlah dalam sel.
Gunakan berjalan searah jarum jam / berlawanan arah jarum jam untuk menentukan bagian dalam dan luar sel ketika blok latar depan ditambahkan atau dihapus. Karena ukuran sel terbatas, langkah ini akan mengambil sejumlah langkah terbatas.
Sebagai bonus, Anda sekarang memiliki cara yang murah untuk berbicara tentang kamar "mewah", atau "kamar diberkati oleh air mancur suci", atau apa pun tentang kamar, karena kamar memiliki jumlah setiap jenis objek di dalamnya. (Atau, karena ukuran kamar dibatasi, lakukan iterasi saja; ini akan menghapus cache).
Setiap lokasi paling banyak dalam satu sel, sehingga Anda dapat menyimpan id sel dari setiap lokasi di peta utama.