Atölye › Conway'in Hayat Oyunu › 14/32. adım
Şu an kenarlar duvar gibi: kayarak ilerleyen bir desen kenara çarpınca bozulur. Birçok Hayat Oyunu programı dünyayı başa saran (wrap around) yapar: son sütunun sağı ilk sütundur, en üst satırın üstü en alt satırdır. Eski video oyunlarında ekranın sağından çıkıp solundan giren karakter gibi. Böyle bir dünyanın şekli simittir (torus).
Bunun için kalan işaretini kullanacağız: %.
```js
// Live neighbours among the 8 around (r, c). The edges wrap around, so the world has no border.
function countNeighbors(r, c) {
let count = 0
for (let dr = -1; dr <= 1; dr++) {
for (let dc = -1; dc <= 1; dc++) {
if (dr === 0 && dc === 0) continue
count += grid[(r + dr + ROWS) % ROWS][(c + dc + COLS) % COLS]
}
}
return count
}
```a % b → a'yı b'ye böldüğünde kalanı verir: 7 % 3 = 1, 60 % 60 = 0, 5 % 60 = 5. Sütun 60 olursa
(tahtanın dışı) 60 % 60 ile 0'a, yani en sola döner.-1 olur ve JavaScript'te -1 % 60 yine -1'dir. Çözüm, önce COLS eklemek:
(-1 + 60) % 60 = 59, yani en sağ sütun. Gerek yoksa da zarar vermez: (5 + 60) % 60 = 5.grid[(r + dr + ROWS) % ROWS][(c + dc + COLS) % COLS] → satır için aynısı ROWS ile. Her komşu artık tahtada
bir yere denk gelir; "tahtanın içinde mi?" sorusuna gerek kalmadı.countNeighbors'ın üstündeki yorumu kodda görüldüğü gibi değiştir.const nr = ..., const nc = ... ve uzun if (nr >= 0 ... satırlarını sil; yerine tek count += ...
satırını yaz.Beceriler: Diziler ve nesneler
← Nesli göster Canlıları say →