Atölye › Dört Bağla › 18/38. adım
Diskler deliğe birden belirmesin, yukarıdan düşsün. Bunun için hamleyi ikiye ayırıyoruz:
play artık tahtayı değiştirmiyor. Onun yerine falling (düşen) adında, yolda olan bir disk yaratıyor. Disk hedef
satırını baştan biliyor.land() (in) hamleyi bitiriyor: disk tahtaya yazılıyor ve sıra geçiyor."Hamleye karar verildi" ile "hamle tamamlandı"yı ayırmak her animasyonlu oyunda işe yarar. Düşme hareketini bir sonraki adımda ekleyeceğiz.
```js
let falling // the disc on its way down, or null
falling = null
function play(col) {
if (falling || dropRow(col) === -1) return
const row = dropRow(col)
falling = { col, row, who: turn, y: -CELL / 2, vy: 0 }
}
function land() {
const { col, row, who } = falling
board[row][col] = who
falling = null
turn = 3 - turn
}
```let falling → düşen disk. Düşen disk yokken değeri null: "hiçbir şey".if (falling || dropRow(col) === -1) return → || "veya": disk zaten düşüyorsa veya sütun doluysa çık. Böylece
hızlı tıklamalar aynı anda iki disk bırakamaz. null yanlış, bir nesne doğru sayılır.falling = { col, row, who: turn, y: -CELL / 2, vy: 0 } → { col, row } kısa yazım: { col: col, row: row }.
who diski atan oyuncu, y: -CELL / 2 disk tuvalin biraz üstünden başlar, vy: 0 hızı sıfırdan.const { col, row, who } = falling → tersi: nesnenin üç alanını aynı adlı üç sabite çıkarır. falling.col yerine
kısaca col.land eski play'in yaptığını yapıyor: diski tahtaya yaz, sırayı değiştir. Bir de falling = null: yolda disk kalmadı.let turn satırının altına let falling ... satırını yaz.reset içinde turn = 1 satırının altına falling = null yaz.play içinde: ilk satıra falling || ekle; board[row][col] = turn ve turn = 3 - turn satırlarını sil, yerine
falling = { ... } satırını yaz.play'in altına bir boş satır bırakıp land fonksiyonunu yaz.Beceriler: Oyun durumları
← 1'den 7'ye tuşlar Yer çekimi →