Jika semua yang ingin Anda lakukan adalah memastikan bahwa ubin yang diklik memiliki ubin terbuka di sekitarnya, saya hanya akan membuat fungsi yang memeriksa ubin di sekitarnya. Dan kemudian menyebutnya di ubin yang diklik.
Anda bisa mengaturnya dalam loop (bersarang) atau hanya membuat pernyataan if untuk itu. Jadi, dalam pseudo-code:
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
Edit Berdasarkan Komentar
Ada dua cara Anda bisa menangani situasi:
- (Paling mudah) Anda bisa memainkan suara dan menunjukkan bahwa posisi yang mereka pilih tidak valid dan mereka harus memilih opsi lain.
- Gunakan algoritma pencarian untuk menemukan ubin terbuka. Namun, saya pikir harus ada batasan pada bagaimana Anda menggunakan ini. Ambil, misalnya, situasi di mana mereka mengklik di sisi kiri peta dan satu-satunya tempat terbuka jauh di sisi kanan. Algoritme pencarian Anda menemukan tempat terbuka itu dan menempatkan warp lain di sana. Ini sepertinya tidak intuitif dan mungkin membuat frustrasi. Saran saya dalam hal ini (dengan asumsi Anda tidak ingin melakukan # 1 yang merupakan saran utama saya), adalah hanya mencari ubin di sekitar ubin saat ini (mungkin dalam radius n-ubin). Dengan cara ini gerbang warp tidak akan muncul terlalu jauh dari tempat Anda mengklik. Untuk melakukan pencarian seperti ini (dengan asumsi radius 1-ubin), Anda hanya perlu memanggil fungsi di atas pada delapan ubin di sekitar yang saat ini (dengan asumsi yang saat ini tidak tersedia). Anda bisa melakukan ini dalam satu lingkaran atau, sekali lagi, dengan pernyataan if.