Atölye › Dört Bağla › 22/38. adım
lineThrough (içinden geçen çizgi) bir diskten başlayıp bir yönde yürüyecek: disk aynı renk olduğu sürece ilerler
ve hücreleri toplar. Sonra ters yönde aynısını yapar.
Yön iki sayıyla verilir: [dx, dy] → her adımda sütun (dx) ve satır (dy) ne kadar değişir. [1, 0] yatay (her adım
bir sütun sağa), [0, 1] dikey, [1, 1] ve [1, -1] çaprazlar.
İki yöne yürümek önemli: boşluğun ortasına atılan bir disk (X X _ X) ucunda olmasa da dörtlüyü tamamlar.
```js
// Count the discs in a row through (row, col) in one direction and its opposite.
function lineThrough(row, col, [dx, dy]) {
const who = board[row][col]
const cells = [[row, col]]
for (const sign of [1, -1]) {
let r = row + dy * sign
let c = col + dx * sign
while (inside(r, c) && board[r][c] === who) {
cells.push([r, c])
r += dy * sign
c += dx * sign
}
}
return cells
}
```function lineThrough(row, col, [dx, dy]) → üçüncü bilgi bir dizi olarak gelir; köşeli parantezli yazım onun iki
elemanına dx ve dy adlarını verir.const who = board[row][col] → başladığımız diskin rengi.const cells = [[row, col]] → bulunan hücrelerin listesi, diskin kendisiyle başlar. Her hücre bir [satır, sütun]
çifti.for (const sign of [1, -1]) → "dizideki her değer için": önce sign = 1 (ileri), sonra sign = -1 (geri).let r = row + dy * sign → bir adım ötedeki satır; c sütun.while (koşul) { ... } → yeni bir döngü türü: koşul doğru olduğu sürece tekrarla. Kaç kez döneceğini önceden
bilmediğimizde kullanılır: aynı renk bitene kadar yürürüz.inside(r, c) && board[r][c] === who → önce tahtada mıyız diye sorarız; && ilk koşul yanlışsa ikincisine hiç
bakmaz, böylece tahtanın dışını okumaya çalışmayız.cells.push([r, c]) → hücreyi listeye ekle; sonra bir adım daha at.return cells → bulunan bütün hücreler.function play( satırının üstüne yorum satırını ve lineThrough fonksiyonunu yaz; altında bir boş satır kalsın.
Çalıştır: ekran değişmez, kontroller yeşil olmalı.
Beceriler: Döngüler, Diziler ve nesneler
← Tahtanın içinde mi? Dört yan yana mı? →