Nếu tất cả những gì bạn muốn làm là đảm bảo rằng các ô được nhấp vào có các ô mở xung quanh nó, tôi sẽ chỉ tạo một hàm kiểm tra các ô xung quanh nó. Và sau đó gọi nó trên gạch nhấp chuột.
Bạn có thể thiết lập nó trong một vòng lặp (lồng nhau) hoặc chỉ tạo các câu lệnh if cho nó. Vì vậy, trong mã giả:
function IsTileOpen(tile)
if tile NOT open
return false because if the clicked tile isn't open, why check any others
if tile on top row
return false because we're against the top wall
if tile on left column
return false because we're against the left wall
if tile on right column
return false because we're against the right wall
if tile on bottom row
return false because we're against the bottom wall
if top left tile NOT open
return false
if top tile NOT open
return false
if top right tile NOT open
return false
if left tile NOT open
return false
if right tile NOT open
return false
if bottom left tile NOT open
return false
if bottom tile NOT open
return false
if bottom right tile NOT open
return false
return true because all the surrounding tiles were open
end function
Chỉnh sửa dựa trên nhận xét
Có hai cách bạn có thể xử lý tình huống:
- (Dễ nhất) Bạn chỉ có thể phát âm thanh và cho biết vị trí họ chọn không hợp lệ và họ cần chọn tùy chọn khác.
- Sử dụng một thuật toán tìm kiếm để tìm một lát mở. Tuy nhiên, tôi nghĩ nên có giới hạn về cách bạn sử dụng điều này. Lấy ví dụ, một tình huống mà họ nhấp vào bên trái của bản đồ và điểm mở duy nhất nằm ở phía bên phải. Thuật toán tìm kiếm của bạn tìm thấy điểm mở đó và đặt các sợi dọc khác ở đó. Điều này có vẻ không trực quan và có thể gây bực bội. Đề xuất của tôi trong trường hợp này (giả sử bạn không muốn làm số 1, đó là đề xuất chính của tôi), là chỉ tìm kiếm các ô xung quanh ô hiện tại (có thể trong bán kính n-gạch). Bằng cách này, cổng warp sẽ không xuất hiện quá xa so với nơi bạn nhấp. Để thực hiện tìm kiếm như thế này (giả sử bán kính 1 ô), bạn chỉ cần gọi hàm trên trên tám ô xung quanh ô hiện tại (giả sử hiện tại không có sẵn). Bạn có thể làm điều này trong một vòng lặp hoặc, một lần nữa, với câu lệnh if.