Atölye › Puzzle Bobble Tarzı Balon Atıcı › 14/31. adım
Balonun durduğu yer neredeyse hiçbir zaman tam bir hücre değildir. Bu yüzden en yakın boş hücreye oturtacağız:
snap (yapış). Bu tek adım, serbest uçuşu yeniden ızgaraya çevirir; bundan sonraki her şey (eşleşme, düşme) yalnız
hücrelerle uğraşacak.
attach (tak) rengi o hücreye yazacak. Şimdilik tek işi bu; ileride patlatmayı da o yapacak.
```js
// The empty cell closest to where the bubble stopped.
function snap(x, y) {
let nearest = null
for (let r = 0; r < ROWS; r++) {
for (let c = 0; c < cols(r); c++) {
if (grid[r][c] >= 0) continue
const p = cellPos(r, c)
const d = Math.hypot(p.x - x, p.y - y)
if (!nearest || d < nearest.d) nearest = { r, c, d }
}
}
return nearest
}
function attach(r, c, color) {
grid[r][c] = color
}
if (touches(shot.x, shot.y)) {
const cell = snap(shot.x, shot.y)
attach(cell.r, cell.c, shot.color)
shot = null
}
```snap: let nearest = null → şimdiye kadar bulunan en yakın boş hücre.if (grid[r][c] >= 0) continue → dolu hücreleri atla; yalnız boşlar aday.const d = Math.hypot(...) → hücrenin merkezi ile balon arasındaki uzaklık.if (!nearest || d < nearest.d) nearest = { r, c, d } → ilk aday ya da daha yakınsa sakla.attach(r, c, color) → rengi hücreye yaz: balon artık ızgaranın parçası.update içinde: touches doğruysa en yakın boş hücreyi bul, balonu oraya tak ve shot = null: havada balon kalmadı,
sıradaki atılabilir.function update() { satırının üstüne yorumuyla snap ve attach fonksiyonlarını yaz; her birinin altında bir
boş satır kalsın.update içinde duvar bloğunun kapanan }'sinin altına if (touches(...)) { ... } bloğunu yaz.Beceriler: Çarpışma tespiti, Diziler ve nesneler
← Bir şeye değiyor mu? Daha küçük adımlar →