Atölye › Pac-Man Tarzı Labirent Kovalamaca › 4/42. adım
Harita değişmez, ama yemler yenecek. O yüzden yemleri haritadan okuyup ayrı, değişebilen bir yerde tutacağız.
Her yemi döşemesinin adıyla tanıyacağız: sütun ve sıra, araya virgül: '8,15'. Bu adları bir Set'e (küme)
koyacağız. Küme bir torba gibidir: içinde bir şey ya vardır ya yoktur, aynı şey iki kez girmez. "Bu döşemede yem
var mı?" (has), "şu yemi çıkar" (delete), "kaç yem kaldı?" (size) soruları çok hızlı cevaplanır.
Güç yemleri (o) ayrı bir kümede: powers.
```js
let pellets // keys of the tiles that still have a pellet
let powers // keys of the tiles that still have a power pellet
const key = (col, row) => col + ',' + row
function fillPellets() {
pellets = new Set()
powers = new Set()
MAZE.forEach((line, row) => {
;[...line].forEach((ch, col) => {
if (ch === '.') pellets.add(key(col, row))
if (ch === 'o') powers.add(key(col, row))
})
})
}
function reset() {
fillPellets()
}
reset()
```let pellets, let powers → yemlerin ve güç yemlerinin kümeleri. let, çünkü her oyunda yeniden doldurulacaklar.const key = (col, row) => col + ',' + row → kısa bir ok fonksiyonu: key(8, 15) → '8,15'. Sayıyla metni
+ ile birleştirmek metin verir.new Set() → boş bir küme yapar. pellets.add(...) → kümeye bir ad ekler.fillPellets → haritayı draw'daki gibi gezer; . gördüğü döşemenin adını pellets'e, o gördüğününkini
powers'a ekler. if gövdesi tek satırsa süslü parantez yazılmayabilir.function reset() → yeni bir oyunu kuracak fonksiyon; şimdilik yalnız yemleri dolduruyor.reset() → döngü başlamadan önce bir kez çalışır.const COLS = ... satırının altına bir boş satır bırakıp iki değişkeni, key'i, fillPellets'i ve reset'i yaz
(aralarında birer boş satır; draw'dan önce de bir boş satır kalsın).requestAnimationFrame(loop) satırının üstüne reset() yaz.Beceriler: Diziler ve nesneler, Oyun durumları