Atölye › Pac-Man Tarzı Labirent Kovalamaca › 7/42. adım
Bir şey hareket etmeden önce nereye gidebileceğini bilmeli. İki soru:
isWall(col, row) → "bu döşeme duvar mı?" Haritaya bakar. Hayalet evi (-) de oyuncu için duvar sayılır.canGo(e, dir) → "e (oyuncu ya da hayalet) bu yöne bir adım atabilir mi?" Yön bir çift: [dx, dy]. [-1, 0]
sola, [0, 1] aşağı.Bir de tünel var: 0. sütunun solu yok, ama oradan çıkan 18. sütuna girmeli. Sütunu sarmalayacağız: -1 → 18, 19 → 0. Saatin 12'den sonra 1'e dönmesi gibi.
```js
const wrap = (col) => (col + COLS) % COLS
function isWall(col, row) {
const ch = MAZE[row][wrap(col)]
return ch === '#' || ch === '-'
}
function canGo(e, dir) {
return !isWall(e.col + dir[0], e.row + dir[1])
}
```const wrap = (col) => (col + COLS) % COLS → % bölümden kalan. (-1 + 19) % 19 → 18, (19 + 19) % 19 →
0, (5 + 19) % 19 → 5. Tahtanın bir ucundan taşan sütun öbür uçtan geri gelir. Önce COLS eklemek -1'i artıya
çevirir.const ch = MAZE[row][wrap(col)] → o döşemenin harfi.return ch === '#' || ch === '-' → || "veya": duvar ya da evse true.canGo(e, dir) → e.col + dir[0], e.row + dir[1]: bir adım ötedeki döşeme. ! "değil": duvar
değilse gidilebilir.const key = ... satırının hemen altına wrap satırını, sonra bir boş satır bırakıp isWall ve canGo
fonksiyonlarını yaz (aralarında ve fillPellets'ten önce birer boş satır).Beceriler: Çarpışma tespiti
← Oyuncu Hareket edenin hafızası →