Atölye › Satranç › 24/48. adım
Öbür uca (beyaz için 0. sıra, siyah için 7. sıra) ulaşan piyon terfi eder: vezir olur. Bunu hamlenin kendisine
yazacağız: böyle bir hamle fazladan bir alan taşır, promo: 'Q'.
Üç küçük değişiklik:
add isteğe bağlı fazladan alanlar alabilsin.promo: 'Q' eklensin.play, promo'lu bir hamlede tahtaya piyon değil vezir koysun.```js
const add = (r, c, tr, tc, extra = {}) => moves.push({ from: [r, c], to: [tr, tc], ...extra })
const dir = color === 'w' ? -1 : 1
const last = color === 'w' ? 0 : 7
const promote = (tr) => (tr === last ? { promo: 'Q' } : {})
if (!board[r + dir][c]) {
add(r, c, r + dir, c, promote(r + dir))
if (board[tr][tc] && board[tr][tc][0] !== color) add(r, c, tr, tc, promote(tr))
board[tr][tc] = m.promo ? piece[0] + m.promo : piece
```extra = {} → varsayılan değer: add beşinci bir şey verilmeden çağrılırsa extra boş nesne {} olur.
Böylece eski çağrılar hiç değişmeden çalışır....extra → nesnelerde de yayma var: extra'nın alanlarını hamle nesnesine kopyalar. {} ise hiçbir şey
eklemez; { promo: 'Q' } ise hamleye promo: 'Q' ekler.const last = color === 'w' ? 0 : 7 → piyonun varacağı son sıra.const promote = (tr) => (tr === last ? { promo: 'Q' } : {}) → hedef sıra son sıraysa { promo: 'Q' }, değilse
{}. (Nesneyi ok fonksiyonunda döndürürken parantez içine alırız.)add(..., promote(r + dir)) ve add(..., promote(tr)) → düz yürüyüş ve çapraz yeme, ikisi de terfi edebilir.
(İki kare gitme hiç son sıraya varmaz.)m.promo ? piece[0] + m.promo : piece → hamlede promo varsa rengi koru, türü değiştir: 'w' + 'Q' → 'wQ'.pseudoMoves'un başındaki const add = ... satırını yenisiyle değiştir.const dir = ... satırının altına last ve promote satırlarını yaz.add(r, c, r + dir, c) çağrısının sonuna , promote(r + dir) ekle; çapraz yemedeki
add(r, c, tr, tc) çağrısının sonuna , promote(tr) ekle.play içinde board[tr][tc] = piece satırını board[tr][tc] = m.promo ? piece[0] + m.promo : piece yap.Beceriler: Fonksiyonlar, Oyun durumları
← Piyon çapraz yer Kare saldırı altında mı? →