Atölye › Klondike Solitaire › 38/40. adım
Her iyi kâğıt oyununda geri al vardır. Programlamanın en kullanışlı fikirlerinden biriyle yapacağız: fotoğraf
yığını. Masada bir şey değişmeden hemen önce bütün masanın bir kopyasını history (geçmiş) dizisine koyacağız.
Geri almak, son fotoğrafı geri yüklemek olacak (bir sonraki adım).
Ekranda bir şey değişmeyecek; fotoğrafları biriktiriyoruz.
```js
let history // earlier positions, for undo
history = []
const save = () => history.push(JSON.stringify(piles))
function flipStock() {
save()
if (!allowed) return false
save()
```let history → fotoğraflar dizisi; deal içinde history = [] ile her yeni oyunda boşalır.JSON.stringify(piles) → bütün yığınları tek bir uzun yazıya çevirir:
'{"stock":[{"rank":5,"suit":2,"up":false},...'. Yazı donmuş bir kopyadır; sonradan masa değişse de o değişmez.history.push(piles) değil? Çünkü o, aynı nesneyi saklar: bir sonraki hamle onu değiştirince "eski"
fotoğraf da değişirdi. Nesne değişkenleri kopyayı değil, aynı şeyi gösterir.const save = () => ... → fotoğrafı çekip history'nin sonuna ekleyen kısa fonksiyon.flipStock'un en başında save() → çevirmeden önce fotoğraf.tryMove içinde if (!allowed) return false'dan sonra save() → yalnız izin verilen hamleden önce. Kurala
aykırı denemeler geçmişe girmez.let moves satırının altına yorumuyla birlikte let history ... yaz.deal içinde moves = 0 satırının altına history = [] yaz.canFound fonksiyonunun altına bir boş satır bırak ve save satırını yaz.flipStock içinde ilk satır olarak save() yaz.tryMove içinde if (!allowed) return false satırının altına save() yaz. Çalıştır.Beceriler: Diziler ve nesneler, Oyun durumları