Atölye › 2048 › 10/26. adım
Bütün oyun tek bir fonksiyona dayanıyor: bir satırı sola kaydırmak. Diğer üç yönü de sonra buna çevireceğiz.
Önce yalnız kayma: karolar boşlukların üstünden sola kayar. Kolay bir yolu var: sıfırları at, kalanları sırayla
yaz, sonra sonunu yine sıfırla doldur. [0, 4, 0, 2] → [4, 2] → [4, 2, 0, 0].
Fonksiyonu saf (pure) yazacağız: satırı alır, yeni bir satır ve kazanılan puanı geri verir; tahtaya ya da başka hiçbir şeye dokunmaz. Saf fonksiyonlar test etmesi ve güvenmesi en kolay koddur: aynı girdi hep aynı sonucu verir.
```js
// Slides one row to the left. Pure: returns a new row and the points gained, and changes nothing else.
function slideRow(row) {
const tiles = row.filter((value) => value !== 0)
const result = []
let gained = 0
for (let i = 0; i < tiles.length; i++) {
result.push(tiles[i])
}
while (result.length < SIZE) result.push(0)
return { row: result, gained }
}
```row.filter((value) => value !== 0) → filter yalnız koşulu doğru olan elemanlardan yeni bir liste yapar:
sıfır olmayan karolar. Asıl row'a dokunmaz.const result = [] → yeni satır burada kurulacak. let gained = 0 → bu kaydırmada kazanılan puan.for döngüsü karoları sırayla result'a ekler. (Birleştirme bir sonraki adımda buraya gelecek.)while (result.length < SIZE) result.push(0) → while, koşul doğru olduğu sürece tekrarlar: result 4
elemana ulaşana kadar sonuna 0 ekler.return { row: result, gained } → iki şeyi birden bir nesne içinde geri verir: yeni satır ve puan.function cellX(col) { satırının üstüne yorum satırını ve slideRow fonksiyonunu yaz; altında bir boş satır
kalsın. Çalıştır: ekran değişmez.
Beceriler: Fonksiyonlar, Diziler ve nesneler
← Başlangıçta iki karo Eşit karoları birleştir →