Có 2 vấn đề khó khăn trong khoa học máy tính. Đặt tên mọi thứ, vô hiệu hóa bộ đệm và lỗi off-by-one.
Đây là một vấn đề vô hiệu hóa bộ đệm.
Nếu bạn có một bản ghi "là cái này bên trong", bất cứ khi nào một khối được đặt hoặc gỡ bỏ, việc cập nhật nó và khu vực của nó thông qua việc lấp lũ là khá dễ dàng.
Để tối ưu hóa điều này, bạn có thể muốn có một tập hợp các "độ trong".
"Ô" là một khu vực được bao quanh bởi các khối do người chơi đặt (lên đến một kích thước nhất định).
Một "căn phòng" là một ô có gạch nền.
"Bên trong" là một căn phòng có cửa, đèn và ghế.
Khi bạn đặt một khối tiền cảnh do người chơi đặt, hãy đi bộ theo chiều kim đồng hồ / ngược chiều kim đồng hồ để xem một ô mới có được hình thành không. Khi bạn loại bỏ khối nền trước do người chơi đặt, hãy kiểm tra xem nó có phá vỡ bất kỳ ô nào không - nếu vậy, hãy xem liệu một ô mới có được hình thành hay không bằng cách hợp nhất hai ô đó.
Khi một ô mới được hình thành hoặc không được định dạng, hãy kiểm tra xem nó là một căn phòng hay bên trong.
Các tế bào có thể theo dõi có bao nhiêu gạch nền mà chúng cần là một căn phòng. Sau đó, một số đếm đơn giản khi một ô được hình thành, một ô nền được thêm hoặc xóa khỏi ô, có thể xác định nếu đó là một phòng.
Tương tự, các tế bào có thể theo dõi có bao nhiêu ghế và nguồn sáng (và trên thực tế là các loại vật thể) nằm trong chúng. Sau đó kiểm tra bên trong là tầm thường.
Một số lượng lối vào cũng có thể được thực hiện.
Vì vậy, chúng tôi tăng cường bản đồ với "các tế bào". Khi gạch được thêm hoặc xóa, chúng tôi kiểm tra ô của vị trí và tăng / giảm số lượng trong ô.
Sử dụng đi bộ theo chiều kim đồng hồ / ngược chiều kim đồng hồ để xác định bên trong và bên ngoài của một ô khi một khối nền trước được thêm hoặc xóa. Khi kích thước của các ô bị giới hạn, bước đi này sẽ có một số bước giới hạn.
Như một phần thưởng, bây giờ bạn có một cách rẻ tiền để nói về các phòng "sang trọng" hoặc "phòng được ban phước bởi một đài phun nước thần thánh", hoặc bất cứ điều gì khác về một căn phòng, vì các phòng có số lượng từng loại đối tượng trong đó. (Hoặc, khi các phòng bị giới hạn về kích thước, chỉ cần thực hiện một lần lặp; việc này sẽ xóa bộ đệm).
Mỗi vị trí nằm trong tối đa một ô, vì vậy bạn có thể lưu trữ id ô của từng vị trí trên bản đồ chính.