Atölye › Satranç › 10/48. adım
Her tahta oyununun kalbi hamle listesidir: "şu an hangi hamleler yapılabilir?" pseudoMoves(color) bu listeyi
yapacak. Şimdilik yalnız atlar için; diğer taşları adım adım ekleyeceğiz.
Yöntem: 64 kareyi gez; o renkte bir at bulursan 8 sıçramayı dene. Sıçrama tahtada kalıyorsa ve orada kendi
taşın yoksa bu bir hamledir (rakip taş varsa onu yer). Her hamle bir nesne: { from: [r, c], to: [tr, tc] }
(nereden, nereye).
Adındaki "pseudo" (sözde) şu demek: şah kuralına henüz bakmıyoruz. Üstteki yorum da bunu söylüyor; o kural sonra gelecek.
```js
// Every move that follows the pieces' patterns, without checking whether it leaves the king in check.
function pseudoMoves(color) {
const moves = []
const add = (r, c, tr, tc) => moves.push({ from: [r, c], to: [tr, tc] })
for (let r = 0; r < 8; r++) {
for (let c = 0; c < 8; c++) {
const piece = board[r][c]
if (piece[0] !== color) continue
const kind = piece[1]
if (kind === 'N') {
for (const [dr, dc] of KNIGHT) {
const tr = r + dr
const tc = c + dc
if (inside(tr, tc) && board[tr][tc][0] !== color) add(r, c, tr, tc)
}
}
}
}
return moves
}
```const moves = [] → boş bir liste; bulunan hamleler buna eklenecek.const add = (r, c, tr, tc) => moves.push({ ... }) → hamle ekleyen küçük yardımcı. push dizinin sonuna
eleman ekler. tr, tc hedef satır ve sütun (target).for → 64 kareyi gezer (tahtayı çizerken yaptığımız gibi).if (piece[0] !== color) continue → !== "eşit değil". Bu karedeki taş istenen renkte değilse (ya da kare boşsa)
continue döngünün bu turunu atlar, sonraki kareye geçer.const kind = piece[1] → taşın türü ('N', 'K', ...).for (const [dr, dc] of KNIGHT) { → for ... of listenin her elemanını sırayla alır. [dr, dc] o elemanı
açar: [1, 2] gelince dr = 1, dc = 2.const tr = r + dr → sıçramanın indiği satır; tc sütunu.inside(tr, tc) && board[tr][tc][0] !== color → hedef tahtada ve orada kendi rengimiz yok. Boş karenin
[0]'ı undefined (yok) olduğu için boş kareler de geçer. && soldaki yanlışsa sağdakine hiç bakmaz; bu yüzden
tahta dışındaki kareyi okumaya çalışıp hata vermeyiz.return moves → listeyi geri verir; fonksiyon burada biter.const inside = ... satırının altına bir boş satır bırak; yorum satırını ve pseudoMoves fonksiyonunu yaz.Beceriler: Diziler ve nesneler, Döngüler
← Atın sıçramaları veri olarak Şah da adım atar →