shogiops
Version:
Shogi rules and operations
39 lines • 1.68 kB
JavaScript
import { defined, isDrop, makeSquareName } from '../util.js';
import { pieceCanPromote } from '../variant/util.js';
import { aimingAt, roleToWestern } from './util.js';
// P-7f
export function makeWesternEngineMoveOrDrop(pos, md) {
if (isDrop(md)) {
return roleToWestern(pos.rules)(md.role) + '*' + makeSquareName(md.to);
}
else {
const piece = pos.board.get(md.from);
if (piece) {
const roleStr = roleToWestern(pos.rules)(piece.role), disambStr = aimingAt(pos, pos.board.pieces(piece.color, piece.role), md.to)
.without(md.from)
.isEmpty()
? ''
: makeSquareName(md.from), toCapture = pos.board.get(md.to), toStr = `${toCapture ? 'x' : '-'}${makeSquareName(md.to)}`;
if (defined(md.midStep)) {
const midCapture = pos.board.get(md.midStep), igui = !!midCapture && md.to === md.from;
if (igui)
return `${roleStr}${disambStr}x!${makeSquareName(md.midStep)}`;
else if (md.to === md.from)
return `--`;
else
return `${roleStr}${disambStr}${midCapture ? 'x' : '-'}${makeSquareName(md.midStep)}${toStr}`;
}
else {
const promStr = md.promotion
? '+'
: pieceCanPromote(pos.rules)(piece, md.from, md.to, toCapture)
? '='
: '';
return `${roleStr}${disambStr}${toStr}${promStr}`;
}
}
else
return undefined;
}
}
//# sourceMappingURL=western-engine.js.map