Atölye › Pac-Man Tarzı Labirent Kovalamaca › 18/42. adım
Sıra avcılarda. Hayaletleri önce bir tarif listesinde tanımlayacağız: GHOSTS (şimdilik tek bir tane: kırmızı).
placeActors bu listeden, oyunda gerçekten dolaşacak nesneleri (ghosts) yapacak.
Her hayalet oyuncuyla aynı alanlara sahip: col, row, dir, progress, frames. Böylece position ve
birazdan advance onlar için de aynen çalışacak. Kırmızı hayalet evin hemen üstündeki döşemede (EXIT, çıkış)
başlıyor, sola bakıyor. Bu adımda yalnız çizeceğiz; henüz kıpırdamayacak.
```js
const EXIT = { col: 9, row: 7 } // the tile just above the ghost house
const GHOSTS = [{ name: 'red', color: '#ef4444' }]
let ghosts
ghosts = GHOSTS.map((g) => ({ ...g, col: EXIT.col, row: EXIT.row, dir: [-1, 0], progress: 0, frames: 10 }))
for (const g of ghosts) {
const q = position(g)
ctx.fillStyle = g.color
ctx.fillRect(q.x * TILE + 3, TOP + q.y * TILE + 3, TILE - 6, TILE - 6)
}
```const EXIT = { col: 9, row: 7 } → evin hemen üstündeki döşeme: hayaletlerin çıkış kapısı.const GHOSTS = [{ name: 'red', color: '#ef4444' }] → hayalet tarifleri: adı ve rengi. Hiç değişmezler.let ghosts → oyunda dolaşan hayaletler; her oyunda ve her turda yeniden yapılır.GHOSTS.map((g) => ({ ... })) → her tariften yeni bir nesne. Ok fonksiyonu bir nesne döndürürken onu ( )
içine alırız; yoksa { fonksiyon gövdesi sanılır....g → tarifin alanlarını (ad, renk) yeni nesneye kopyalar; sonra hareket alanları eklenir. Tarif
değişmeden kalır.frames: 10 → hayaletin bir adımı kaç kare sürer (birazdan ayarlayacağız).position ile yerini bul; döşemeden her yanda 3 piksel küçük bir kare çiz (18 × 18).
Oyuncudan önce çiziliyor; oyuncu üstte görünsün.const PLAYER_FRAMES = ... satırının altına EXIT ve GHOSTS satırlarını yaz.let player satırının altına let ghosts yaz.placeActors içinde player = { ... } satırının altına ghosts = ... satırını yaz.draw içinde const p = position(player) satırının üstüne hayalet döngüsünü yaz; altında bir boş satır
kalsın.Beceriler: Oyun durumları, Diziler ve nesneler
← Labirenti bitir Hayalet geri dönmez →