Atölye › Satranç › 28/48. adım
Bir hamlenin şahı tehlikede bırakıp bırakmadığını anlamanın en kolay yolu: hamleyi tahtada dene, şaha bak, sonra geri al. Geri alabilmek için hamle neyi değiştirdiğini hatırlamalı: hangi taş oynadı, hedefte ne vardı?
Bu yüzden play'i ikiye ayırıyoruz:
makeMove(m) → yalnız tahtadaki işi yapar (taş, sıra) ve geri alma bilgisini (undo) döndürür.play(m) → gerçek bir hamle: makeMove'u çağırır, sonra seçimi temizler.Oyun aynı oynanır; ama artık hamleleri "hayalde" deneyebileceğiz.
```js
// Play a move on the board, and return what is needed to take it back.
function makeMove(m) {
const [fr, fc] = m.from
const [tr, tc] = m.to
const piece = board[fr][fc]
const undo = { m, piece, captured: board[tr][tc] }
board[tr][tc] = m.promo ? piece[0] + m.promo : piece
board[fr][fc] = ''
turn = other(turn)
return undo
}
function play(m) {
makeMove(m)
selected = null
targets = []
}
```function play(m) → adı makeMove oldu; başına bir yorum eklendi.const undo = { m, piece, captured: board[tr][tc] } → geri alma bilgisi. { m, piece } kısaltması
{ m: m, piece: piece } demek: değişkenin adı alanın adı olur. captured → hedefte ne vardı (yenen taş ya
da ''). Bu satır tahta değişmeden önce gelmeli; sonra hedefte artık oynayan taş olur.return undo → bilgiyi geri verir.selected = null ve targets = [] → makeMove'dan çıktı, yeni play'e taşındı. makeMove seçime dokunmamalı;
birazdan onu oyuncunun haberi olmadan yüzlerce kez çağıracağız.play(m) → makeMove(m) ile tahtayı değiştirir, sonra seçimi temizler.function play(m) { satırının üstüne yorum satırını yaz ve adını makeMove yap.const piece = ... satırının altına const undo = ... satırını yaz.selected = null ve targets = [] satırlarını sil; turn = other(turn) satırının altına return undo yaz.makeMove'un kapanan }'inin altına bir boş satır bırak ve yeni play fonksiyonunu yaz.Beceriler: Fonksiyonlar, Yeniden düzenleme
← Şah tehdit altında mı? Hamleyi geri al →