Atölye › Candy Crush Tarzı Üçlü Eşleştirme › 14/29. adım
Şimdi yerçekimi: her sütunda deliklerin üstündeki mücevherler aşağı düşüp delikleri doldursun; yukarıda açılan yerlere yeni rastgele mücevherler gelsin.
Bir sütunu aşağıdan yukarı gezeceğiz, iki sayaçla:
r → okuduğumuz hücre;write → henüz doldurulmamış en alttaki yer.Bulduğumuz her mücevheri write'a kopyalar, write'ı bir yukarı çıkarırız. Delikleri atlarız. Sonunda write'ın
üstünde kalan yerler yeni mücevherlerle dolar. Buna iki işaretçi (two pointers) yöntemi denir.
```js
// Everything above a gap falls down to fill it, and new gems drop in at the top.
function collapse() {
for (let c = 0; c < N; c++) {
let write = N - 1
for (let r = N - 1; r >= 0; r--) {
if (board[r][c] < 0) continue
board[write][c] = board[r][c]
write--
}
for (let r = write; r >= 0; r--) board[r][c] = randomGem()
}
}
collapse()
```for (let c = 0; c < N; c++) { → her sütun için ayrı ayrı.let write = N - 1 → doldurulacak ilk yer: en alt satır (7).for (let r = N - 1; r >= 0; r--) { → r 7'den 0'a geri sayar (r-- 1 azaltır): aşağıdan yukarı.if (board[r][c] < 0) continue → delikse atla.board[write][c] = board[r][c] → mücevheri aşağıdaki boş yere indir. (Delik yoksa write ile r aynıdır;
mücevher kendi yerine yazılır.)write-- → bir sonraki boş yer bir üstte.for (let r = write; r >= 0; r--) board[r][c] = randomGem() → write'tan yukarısı arta kaldı: yeni mücevherler.write 0'da kalır ve yalnız 0. satıra yeni mücevher
gelir.collapse() (trySwap içinde) → silmeden hemen sonra.function cellAt(event) { satırının üstüne yorum satırını ve collapse fonksiyonunu yaz; altında bir boş satır
kalsın.trySwap içinde en sondaki return true satırının üstüne collapse() yaz.Beceriler: Diziler ve nesneler, Döngüler
← Eşleşeni sil Silmenin iki yarısı →