Atölye › Mayın Tarlası › 6/26. adım
Kimse ilk tıklamada patlamayı sevmez. Gerçek oyun bu yüzden mayınları ilk tıklamadan sonra koyar: tıklanan hücreye ve komşularına asla koymaz. Böylece ilk tıklama hep biraz alan açar.
Her hücreye yeni bir bilgi ekliyoruz: mine (mayın var mı). placeMines(safe) yasak hücreleri ayırıp kalanlara 10
mayın koyacak. Bu adımda mayınları henüz sırayla koyuyoruz; bir sonraki adımda karıştıracağız.
```js
const MINES = 10
Array.from({ length: SIZE }, (_, col) => ({ row, col, mine: false })),
// Mines are placed on the first click, never on or next to the clicked cell, so the first click always opens space.
function placeMines(safe) {
const forbidden = new Set([safe, ...neighbors(safe)])
const candidates = grid.flat().filter((cell) => !forbidden.has(cell))
for (const cell of candidates.slice(0, MINES)) cell.mine = true
}
```mine: false → her hücre mayınsız başlar. true/false → "evet"/"hayır" (mantıksal değer, boolean).new Set([safe, ...neighbors(safe)]) → yasak hücrelerin kümesi. Set (küme) "içinde var mı?" sorusunu
(forbidden.has(cell)) hızla cevaplar. ... (yayma) komşu listesinin elemanlarını tek tek buraya döker: küme =
güvenli hücre + komşuları.grid.flat().filter((cell) => !forbidden.has(cell)) → filter listeden koşulu sağlayanları tutar. ! "değil":
yasak olmayan hücreler aday olur.candidates.slice(0, MINES) → listenin ilk 10 elemanı (0'dan başlayıp 10'a kadar, 10 hariç).cell.mine = true → bu hücreye mayın koy. Tek komutlu for süslü parantezsiz yazılabilir.TOP satırının altına const MINES = 10 yaz.newGame içindeki hücre nesnesine mine: false ekle: ({ row, col, mine: false }).neighbors fonksiyonunun altına bir boş satır bırakıp yorum satırını ve placeMines'ı yaz.Beceriler: Diziler ve nesneler
← Komşular Adayları karıştır →