Atölye › Mayın Tarlası › 15/26. adım

Taşma dolgusu

Ne yapıyoruz

Gerçek oyunda bir 0'a tıklayınca koca bir alan birden açılır. Çünkü 0 "çevremde hiç mayın yok" demek: bütün komşularını açmak güvenli. O komşulardan biri de 0 ise onun komşuları da güvenli... Böyle yayılır gider. Buna taşma dolgusu (flood fill) denir; resim programlarındaki boya kovası aynı şeyi yapar.

Açılacak hücreleri bir yapılacaklar listesinde biriktireceğiz: bir yığın (stack). Masadaki kâğıt yığını gibi: en üste koyarsın (push), en üsttekini alırsın (pop). Liste boşalana kadar: bir hücre al, aç, 0 ise komşularını listeye ekle.

```js
// Flood fill with our own stack: open the cell, and keep opening around every empty (0) cell.
const stack = [start]
while (stack.length > 0) {
  const cell = stack.pop()
  if (cell.revealed) continue
  cell.revealed = true
  if (cell.count === 0) {
    for (const next of neighbors(cell)) {
      if (!next.revealed && !next.mine) stack.push(next)
    }
  }
}
```

Ne işe yarıyor

Sıra sende

reveal içindeki start.revealed = true satırını sil, yerine yorum satırını ve taşma dolgusunu yaz. Çalıştır ve bir hücreye tıkla: ilk tıklamada koca bir alan açılmalı, kenarında sayılar dizilmeli.

Beceriler: Döngüler, Diziler ve nesneler

Tüm adımlar

  1. Hücre nesnelerinden bir ızgara
  2. Tuval ve kalem
  3. Tarlayı çiz
  4. Her karede çiz
  5. Komşular
  6. Mayınlar, ama ilk tıklamanın altına değil
  7. Adayları karıştır
  8. Çevredeki mayınları say
  9. Hücre aç
  10. Açık hücre farklı görünür
  11. Renkli sayılar
  12. Tıkla ve aç
  13. Mayına basmak
  14. Mayınları göster
  15. Taşma dolgusu
  16. Sağ tuşla bayrak
  17. Bayrak hücresini korur
  18. Bayrakları çiz
  19. Kalan mayınlar
  20. Kazanmak
  21. Son ve yeni oyun
  22. Saat kaç?
  23. Saat
  24. Saati durdur
  25. En iyi süre
  26. Kendin yap: yanlış bayraklar