Atölye › Satranç › 31/48. adım
Rok, şahı kaleye doğru iki kare götürüp kaleyi de şahın öbür yanına atlatan özel bir hamle. Yalnız şah ve o kale hiç oynamamışsa yapılabilir.
"Hiç oynamadı mı?" sorusunun cevabı tahtada görünmez; bu bir geçmiş bilgisi. O yüzden dört bayrak tutacağız:
castling = { wK, wQ, bK, bQ }. wK beyazın şah tarafı (kısa rok), wQ vezir tarafı (uzun rok); siyah için aynısı.
Hepsi başta true.
Bu adımda yalnız rok hamlelerini listeye ekliyoruz: şah kendi başlangıç karesinde, bayrak açık, aradaki kareler boş ve kale köşesinde. Kaleyi taşımayı bir sonraki adımda yapacağız.
```js
let castling // which castlings are still allowed
castling = { wK: true, wQ: true, bK: true, bQ: true }
// Castling: the king still on its first square, the squares between free and the rook in its corner.
if (kind === 'K' && c === 4 && r === (color === 'w' ? 7 : 0)) {
const rook = color + 'R'
if (castling[color + 'K'] && !board[r][5] && !board[r][6] && board[r][7] === rook) add(r, c, r, 6, { castle: 'K' })
if (castling[color + 'Q'] && !board[r][1] && !board[r][2] && !board[r][3] && board[r][0] === rook) add(r, c, r, 2, { castle: 'Q' })
}
```let castling → dört rok hakkı. reset hepsini true yapar.kind === 'K' && c === 4 && r === (color === 'w' ? 7 : 0) → şah, kendi başlangıç karesinde mi (e1 ya da e8)?const rook = color + 'R' → kendi kalemiz: 'wR' ya da 'bR'.castling[color + 'K'] → köşeli parantezle, adı metinden kurulan bir alanı okuruz: castling['wK'], yani
castling.wK.{ castle: 'K' } eklenir.{ castle: 'Q' }.let turn ... satırının altına let castling ... satırını yaz.reset içinde turn = 'w' satırının altına castling = { ... } satırını yaz.pseudoMoves içinde piyon bloğu kapandıktan hemen sonra (aynı hizada) yorum satırını ve rok bloğunu yaz.Beceriler: Oyun durumları
← Yalnız yasal hamleler Kale üstünden atlar →