Atölye › Pac-Man Tarzı Labirent Kovalamaca › 8/42. adım
Oyuncu döşemeden döşemeye zıplamayacak, kayacak. Bir döşemeyi geçmesi 8 kare (yaklaşık 0.13 saniye) sürecek. Bunun için oyuncunun yerinden başka şeyleri de hatırlaması gerek:
dir → şu an gittiği yön.want → oyuncunun gitmek istediği yön (bastığı ok tuşu). Neden ayrı olduğunu birazdan göreceğiz.progress → şu anki adımda kaç kare yol aldı (0'dan 8'e).frames → bir adım kaç kare sürer.STOP = [0, 0] "hiçbir yöne" demek. İki yönü karşılaştırmak için de same yardımcısını yazacağız. Bu adımda
ekranda değişiklik yok.
```js
const STOP = [0, 0]
const PLAYER_FRAMES = 8 // frames the player needs to cross one tile
const same = (a, b) => a[0] === b[0] && a[1] === b[1]
player = { col: MAZE[row].indexOf('P'), row, dir: STOP, want: STOP, progress: 0, frames: PLAYER_FRAMES }
```const STOP = [0, 0] → adım atmayan yön: sütuna da sıraya da 0 ekler.PLAYER_FRAMES = 8 → oyuncu bir döşemeyi 8 karede geçer. Sayı küçüldükçe oyuncu hızlanır.const same = (a, b) => a[0] === b[0] && a[1] === b[1] → iki yön aynı mı? İki diziyi === ile karşılaştıramayız:
[0, 0] === [0, 0] bile false, çünkü === "aynı dizi mi" diye bakar, içine değil. Bu yüzden iki sayıyı tek tek
karşılaştırıyoruz. && "ve".player = { ..., dir: STOP, want: STOP, progress: 0, frames: PLAYER_FRAMES } → oyuncu başta duruyor, yarım
kalmış bir adımı yok.const COLS = ... satırının altına STOP ve PLAYER_FRAMES satırlarını yaz.canGo fonksiyonunun altına bir boş satır bırakıp same satırını yaz.placeActors içinde player = { ... } satırının sonuna, }'den önce dört yeni alanı ekle.Beceriler: Oyun durumları
← Nereden yürünür? Bir karelik hareket →