Atölye › 2048 › 16/26. adım
Yukarı ve aşağı sütunlarla çalışır. Yine aynı hile: bir sütunu yukarıdan aşağı bir satırmış gibi oku, sola (yani yukarıya) kaydır, sonra sütuna geri yaz. Aşağı da bunun ters çevrilmişi.
Tek bir test edilmiş fonksiyon, dört yönde. Küçük farklarla kod kopyalamak üzereyken böyle bir dönüşüm ara; bir parça kod bütün işi yapsın.
```js
// Every direction is "slide left" on a row or a column, possibly reversed.
function move(direction) {
const before = JSON.stringify(board)
const horizontal = direction === 'left' || direction === 'right'
const reversed = direction === 'right' || direction === 'down'
for (let i = 0; i < SIZE; i++) {
const line = horizontal ? [...board[i]] : board.map((row) => row[i])
if (horizontal) board[i] = row
else row.forEach((value, r) => (board[r][i] = value))
const directions = { ArrowLeft: 'left', ArrowRight: 'right', ArrowUp: 'up', ArrowDown: 'down' }
```horizontal → sol ya da sağ mı? Değilse i bir sütun numarasıdır.reversed → artık aşağı da ters çevrilir (yukarı = sütunda sola, aşağı = ters sütunda sola).horizontal ? [...board[i]] : board.map((row) => row[i]) → yataysa satırın kopyası; değilse map her satırın
i. elemanını alıp yeni bir dizi yapar: sütun, yukarıdan aşağı. (map hep yeni dizi verdiği için ayrıca
kopyalamaya gerek yok.)if (horizontal) board[i] = row → satırı geri koy.else row.forEach((value, r) => (board[r][i] = value)) → sütunu geri yaz: kaymış dizinin her değerini (value)
kendi satırının (r) i. hücresine. forEach her eleman için çalışır; sırasını da verir.function move(direction) { satırının üstüne yorum satırını yaz.const reversed = direction === 'right' satırını sil; yerine horizontal ve yeni reversed satırlarını yaz.const line = [...board[i]] satırını yenisiyle değiştir; board[i] = row satırını sil, yerine iki
satırı (if ve else) yaz.directions tablosuna ArrowUp: 'up', ArrowDown: 'down' ekle.Beceriler: Diziler ve nesneler, Fonksiyonlar
← Sağ, ters çevrilmiş sol Skor →