Atölye › Puzzle Bobble Tarzı Balon Atıcı › 16/31. adım
Aynı renkte değen balonları bulmak için her hücrenin komşularını bilmeliyiz. Bal peteği gibi dizilmiş bir ızgarada bir hücrenin altı komşusu var: iki yanında, iki üstünde, iki altında.
Püf nokta: tek satırlar yarım balon sağa kaymış. Bu yüzden üst ve alt komşuların hangi sütunlarda olduğu satırın çift mi tek mi olduğuna bağlı.
```js
const inGrid = (r, c) => r >= 0 && r < ROWS && c >= 0 && c < cols(r)
// The six cells around (r, c). Odd rows are shifted right, so their neighbours above and below are at c and c + 1;
// even rows' are at c - 1 and c.
function neighbors(r, c) {
const shift = r % 2 === 0 ? -1 : 0
return [
[r, c - 1], [r, c + 1],
[r - 1, c + shift], [r - 1, c + shift + 1],
[r + 1, c + shift], [r + 1, c + shift + 1],
].filter(([nr, nc]) => inGrid(nr, nc))
}
```inGrid(r, c) → böyle bir hücre var mı? Satır 0–13 arasında, sütun 0 ile o satırın uzunluğu arasında olmalı (tek
satırlar bir hücre kısa).const shift = r % 2 === 0 ? -1 : 0 → çift satırda -1, tek satırda 0. Üst ve alt komşular c + shift ve
c + shift + 1 sütunlarında..filter(([nr, nc]) => inGrid(nr, nc)) → ızgaranın dışına düşenleri at (kenardaki hücrelerin daha az komşusu olur).const cellPos = ... satırının üstüne inGrid satırını yaz.cellPos satırının altına bir boş satır bırakıp yorumu ve neighbors fonksiyonunu yaz.Beceriler: Diziler ve nesneler
← Daha küçük adımlar Taşan boya (flood fill) →