Atölye › XOX › 31/33. adım

İleriye bak: minimax

Ne yapıyoruz

Oyun bitmediyse puanı nasıl bulacağız? Satranç oyuncusu gibi düşünerek: "Buraya oynarsam o şuraya oynar, sonra ben..."

score, sırası gelen oyuncu için her boş kutuyu dener, çıkan tahtayı yine score ile puanlar ve hamleyi geri alır. İki tarafın da en iyi oynadığını varsayar: O en büyük puanı, X en küçük puanı seçer. Bu yönteme minimax denir. XOX küçük olduğu için bilgisayar bütün olasılıkları göz açıp kapayıncaya kadar tarar.

```js
  if (end === 'draw') return 0
  const scores = []
  for (let index = 0; index < 9; index++) {
    if (cells[index] !== '') continue
    cells[index] = turn
    scores.push(score(cells, turn === 'O' ? 'X' : 'O'))
    cells[index] = ''
  }
  return turn === 'O' ? Math.max(...scores) : Math.min(...scores)
}
```

Ne işe yarıyor

Sıra sende

  1. score içinde if (end === 'draw') return 0 satırının altına yeni satırları yaz.
  2. Fonksiyonun kapanan } işareti en altta kalsın.
  3. Çalıştır. Oyun henüz değişmez (bilgisayar score'u bir sonraki adımda kullanacak); kontroller birkaç saniye sürebilir.

Beceriler: Fonksiyonlar, Döngüler

Tüm adımlar

  1. Canvas'ı ve kalemi al
  2. Tahtayı boya
  3. İlk ızgara çizgisi
  4. Döngüyle tekrarla
  5. Izgarayı tamamla
  6. Liste olarak tahta
  7. Çizen bir fonksiyon
  8. Bir X yaz
  9. Kutu numarasından konuma
  10. Tahtada ne varsa çiz
  11. Her işarete bir renk
  12. Hamle yap
  13. Dolu kutuya oynanmaz
  14. Tıklamayı dinle
  15. Hangi kutuya tıklandı?
  16. Her ekran boyunda tıklama
  17. Sekiz kazanan çizgi
  18. Üçü yan yana bul
  19. Kazanç, beraberlik ya da devam
  20. Tur biter
  21. Kazananı göster
  22. Kazanan çizgiyi parlat
  23. Yeni tur fonksiyonu
  24. Tekrar oynamak için tıkla
  25. Kutu seçen bir bilgisayar
  26. Bilgisayar cevap verir
  27. Birinci kural: ortayı al
  28. İkinci kural: kazanabiliyorsan kazan
  29. Üçüncü kural: rakibi engelle
  30. Biten oyuna puan ver
  31. İleriye bak: minimax
  32. Hiç kaybetmeyen bir bilgisayar
  33. Kendin yap: skoru tut