Atölye › Sokoban › 27/29. adım
Bir sonraki hedef: bölümü daha az hamlede çözmek. Her bölüm için ayrı bir rekor tutacağız ve sayfa kapansa bile unutulmayacak.
Rekorlar bir sözlükte duracak: bölüm numarası → en az hamle. { 0: 1, 1: 9 } gibi. Tarayıcının küçük not
defteri localStorage sadece yazı saklar; sözlüğü fotoğraflardaki gibi JSON yazısına çevirip saklarız.
```js
let best = JSON.parse(localStorage.getItem('sokoban-best') || '{}') // fewest moves, per level
moves += 1
if (solved() && (best[level] === undefined || moves < best[level])) {
best[level] = moves
localStorage.setItem('sokoban-best', JSON.stringify(best))
}
```localStorage.getItem('sokoban-best') → defterden kaydı okur. İlk seferde kayıt yoktur: null gelir.|| '{}' → soldaki işe yaramazsa '{}' kullan: boş bir nesnenin yazısı.JSON.parse(...) → yazıyı nesneye çevirir. İlk seferde best boş sözlük: {}.best[level] → bu bölümün rekoru. Köşeli parantezle nesneden değişken bir adla okuruz. Bölüm hiç çözülmediyse
undefined.solved() && (best[level] === undefined || moves < best[level]) → bölüm çözüldü ve (henüz rekor yok veya bu
sefer daha az hamle). Parantez önce "veya"yı hesaplatır.best[level] = moves → yeni rekor.localStorage.setItem('sokoban-best', JSON.stringify(best)) → bütün sözlüğü yazıya çevirip deftere yaz.let history satırının altına best satırını yaz.move'un sonunda moves += 1 satırının altına if (solved() && ...) { ... } bloğunu yaz.Beceriler: Oyun durumları
← Baştan başla Rekoru göster →