UNPKG

chess-tools

Version:

A collection of tools / libraries for programming chess applications.

310 lines (302 loc) 15 kB
"use strict"; const utils = require('../../utils.js'); let peices = { 'Pawn' : 'P', 'Knight': 'N', 'King': 'K', 'Queen': 'Q', 'Bishop': 'B' }; let files = utils.board.FILES; function algebraic_position_to_xy(algebraic) { let file_and_rank = algebraic.split(""); let x; for (x = 0; x < 8; x++) { if (files[x] === file_and_rank[0]) { break; } } return { x : parseInt(x), y : parseInt(file_and_rank[1])-1 } } function xy_to_algebraic_notation(xy) { let rank = xy.y + 1; let file = files[xy.x]; return file + "" + rank; } class CTGMoveService { constructor() { } decode_move(code, analysis_code, board, is_black, is_mirrored) { var move; var start_position = ""; var end_position = ""; var move_notation = ""; for (move of CTGMoveService.moves) { if (Number(code) === Number(move.code)) { break; } } if (move.move === 'O-O' || move.move === 'O-O-O') { move_notation= move.move; } else { let peice_number = move.peice.match(/([A-Za-z]+) (\d)/); if (peice_number) { let peice_short = peices[peice_number[1]]; let peice_num = peice_number[2]; let pn= 1; let i = 0; for (let position of board) { // if (!position || !position.peice) { console.log("BOARD ERROR", is_black, is_mirrored, i, board.length); console.log(JSON.stringify(board, null, ' ')); process.exit(); } if (position.peice.txt === peice_short) { if (pn == peice_num) { start_position = position.position; let move_info = move.move.match(/(\w)(\d) ?(\w?)(\d?)/); if (move_info) { let x_dir = 1; let y_dir = 1; let x = 0; let y = 0; if (move_info[1] === 'b') { y_dir = is_black ? 1 : -1; } if (move_info[1] === 'r' || move_info[3] === 'r') { x_dir = (is_black && !is_mirrored ) ? 1 : -1; } if (move_info[1] === 'b' || move_info[1] === 'f') { y = move_info[2]; } else { x = move_info[2]; } if (move_info[3]) { x = move_info[4]; } x = x * x_dir; y = y * y_dir; let xy = algebraic_position_to_xy(start_position); xy.y = xy.y + y; xy.x = xy.x + x; move_notation = start_position + "" + xy_to_algebraic_notation(xy); } break; } else { pn++; } } i++; } } } return { "move" : move, "analysis" : this.decode_analysis(analysis_code), "move_notation" : move_notation }; } decode_analysis(analysis_code) { var analysis; for (analysis of CTGMoveService.analysis) { if (Number(analysis.code) === Number(analysis_code)) { break; } } return analysis; } } CTGMoveService.analysis = [ {"code" : "0x00", "description" : "No annotation"}, {"code" : "0x01", "description" : "!"}, {"code" : "0x02", "description" : "?"}, {"code" : "0x03", "description" : "!!"}, {"code" : "0x04", "description" : "??"}, {"code" : "0x05", "description" : "!?"}, {"code" : "0x06", "description" : "?!"}, {"code" : "0x08", "description" : "Only move"}, {"code" : "0x16", "description" : "Zugzwang"}, { "code" : "0x0b", "description" : "="}, { "code" : "0x0d", "description" : "Unclear"}, { "code" : "0x0e", "description" : "=+"}, { "code" : "0x0f", "description" : "+="}, { "code" : "0x10", "description" : "-/+"}, { "code" : "0x11", "description" : "+/-"}, { "code" : "0x13", "description" : "+-"}, { "code" : "0x20", "description" : "Development adv."}, { "code" : "0x24", "description" : "Initiative"}, { "code" : "0x28", "description" : "With attack"}, { "code" : "0x2c", "description" : "Compensation"}, { "code" : "0x84", "description" : "Counterplay"}, { "code" : "0x8a", "description" : "Zeitnot"}, { "code" : "0x92", "description" : "Novelty"} ]; CTGMoveService.moves= [ { "code" : "0x00", "peice": "Pawn 5", "move": "f1 r1" }, { "code" : "0x01", "peice": "Knight 2", "move": "b1 l2" }, { "code" : "0x03", "peice": "Queen 2", "move": "r2" }, { "code" : "0x04", "peice": "Pawn 2", "move": "f1" }, { "code" : "0x05", "peice": "Queen 1", "move": "f1" }, { "code" : "0x06", "peice": "Pawn 4", "move": "f1 l1" }, { "code" : "0x08", "peice": "Queen 2", "move": "r4" }, { "code" : "0x09", "peice": "Bishop 2", "move": "f6 r6" }, { "code" : "0x0a", "peice": "King ", "move": "b1" }, { "code" : "0x0c", "peice": "Pawn 1", "move": "f1 l1" }, { "code" : "0x0d", "peice": "Bishop 1", "move": "f3 r3" }, { "code" : "0x0e", "peice": "Rook 2", "move": "r3" }, { "code" : "0x0f", "peice": "Knight 1", "move": "b1 l2" }, { "code" : "0x12", "peice": "Bishop 1", "move": "f7 r7" }, { "code" : "0x13", "peice": "King ", "move": "f1" }, { "code" : "0x14", "peice": "Pawn 8", "move": "f1 r1" }, { "code" : "0x15", "peice": "Bishop 1", "move": "f5 r5" }, { "code" : "0x18", "peice": "Pawn 7", "move": "f1" }, { "code" : "0x1a", "peice": "Queen 2", "move": "f6" }, { "code" : "0x1b", "peice": "Bishop 1", "move": "f1 l1" }, { "code" : "0x1d", "peice": "Bishop 2", "move": "f7 r7" }, { "code" : "0x21", "peice": "Rook 2", "move": "r7" }, { "code" : "0x22", "peice": "Bishop 2", "move": "f2 l2" }, { "code" : "0x23", "peice": "Queen 2", "move": "f6 r6" }, { "code" : "0x24", "peice": "Pawn 8", "move": "f1 l1" }, { "code" : "0x26", "peice": "Bishop 1", "move": "f7 l7" }, { "code" : "0x27", "peice": "Pawn 3", "move": "f1 l1" }, { "code" : "0x28", "peice": "Queen 1", "move": "f5 r5" }, { "code" : "0x29", "peice": "Queen 1", "move": "r6" }, { "code" : "0x2a", "peice": "Knight 2", "move": "b2 r1" }, { "code" : "0x2d", "peice": "Pawn 6", "move": "f1 r1" }, { "code" : "0x2e", "peice": "Bishop 1", "move": "f1 r1" }, { "code" : "0x2f", "peice": "Queen 1", "move": "r1" }, { "code" : "0x30", "peice": "Knight 2", "move": "b2 l1" }, { "code" : "0x31", "peice": "Queen 1", "move": "r3" }, { "code" : "0x32", "peice": "Bishop 2", "move": "f5 r5" }, { "code" : "0x34", "peice": "Knight 1", "move": "f2 r1" }, { "code" : "0x36", "peice": "Knight 1", "move": "f1 r2" }, { "code" : "0x37", "peice": "Queen 1", "move": "f4" }, { "code" : "0x38", "peice": "Queen 2", "move": "f4 l4" }, { "code" : "0x39", "peice": "Queen 1", "move": "r5" }, { "code" : "0x3a", "peice": "Bishop 1", "move": "f6 r6" }, { "code" : "0x3b", "peice": "Queen 2", "move": "f5 l5" }, { "code" : "0x3c", "peice": "Bishop 1", "move": "f5 l5" }, { "code" : "0x41", "peice": "Queen 2", "move": "f5 r5" }, { "code" : "0x42", "peice": "Queen 1", "move": "f7 l7" }, { "code" : "0x44", "peice": "King ", "move": "b1 r1" }, { "code" : "0x45", "peice": "Queen 1", "move": "f3 r3" }, { "code" : "0x4a", "peice": "Pawn 8", "move": "f2" }, { "code" : "0x4b", "peice": "Queen 1", "move": "f5 l5" }, { "code" : "0x4c", "peice": "Knight 2", "move": "f2 r1" }, { "code" : "0x4d", "peice": "Queen 2", "move": "f1" }, { "code" : "0x50", "peice": "Rook 1", "move": "f6" }, { "code" : "0x52", "peice": "Rook 1", "move": "r6" }, { "code" : "0x54", "peice": "Bishop 2", "move": "f1 l1" }, { "code" : "0x55", "peice": "Pawn 3", "move": "f1" }, { "code" : "0x5c", "peice": "Pawn 7", "move": "f1 r1" }, { "code" : "0x5f", "peice": "Pawn 5", "move": "f2" }, { "code" : "0x61", "peice": "Queen 1", "move": "f6 r6" }, { "code" : "0x62", "peice": "Pawn 2", "move": "f2" }, { "code" : "0x63", "peice": "Queen 2", "move": "f7 l7" }, { "code" : "0x66", "peice": "Bishop 1", "move": "f3 l3" }, { "code" : "0x67", "peice": "King ", "move": "f1 r1" }, { "code" : "0x69", "peice": "Rook 2", "move": "f7" }, { "code" : "0x6a", "peice": "Bishop 1", "move": "f4 r4" }, { "code" : "0x6b", "peice": "Short Castle", "move": "O-O"}, { "code" : "0x6e", "peice": "Rook 1", "move": "r5" }, { "code" : "0x6f", "peice": "Queen 2", "move": "f7 r7" }, { "code" : "0x72", "peice": "Bishop 2", "move": "f7 l7" }, { "code" : "0x74", "peice": "Queen 1", "move": "r2" }, { "code" : "0x79", "peice": "Bishop 2", "move": "f6 l6" }, { "code" : "0x7a", "peice": "Rook 1", "move": "f3" }, { "code" : "0x7b", "peice": "Rook 2", "move": "f6" }, { "code" : "0x7c", "peice": "Pawn 3", "move": "f1 r1" }, { "code" : "0x7d", "peice": "Rook 2", "move": "f1" }, { "code" : "0x7e", "peice": "Queen 1", "move": "f3 l3" }, { "code" : "0x7f", "peice": "Rook 1", "move": "r1" }, { "code" : "0x80", "peice": "Queen 1", "move": "f6 l6" }, { "code" : "0x81", "peice": "Rook 1", "move": "f1" }, { "code" : "0x82", "peice": "Pawn 6", "move": "f1 l1" }, { "code" : "0x85", "peice": "Knight 1", "move": "f2 l1" }, { "code" : "0x86", "peice": "Rook 1", "move": "r7" }, { "code" : "0x87", "peice": "Rook 1", "move": "f5" }, { "code" : "0x8a", "peice": "Knight 1", "move": "b2 r1" }, { "code" : "0x8b", "peice": "Pawn 1", "move": "f1 r1" }, { "code" : "0x8c", "peice": "King ", "move": "b1 l1" }, { "code" : "0x8e", "peice": "Queen 2", "move": "f2 l2" }, { "code" : "0x8f", "peice": "Queen 1", "move": "r7" }, { "code" : "0x92", "peice": "Queen 2", "move": "f1 r1" }, { "code" : "0x94", "peice": "Queen 1", "move": "f3" }, { "code" : "0x96", "peice": "Pawn 2", "move": "f1 r1" }, { "code" : "0x97", "peice": "King ", "move": "l1" }, { "code" : "0x98", "peice": "Rook 1", "move": "r3" }, { "code" : "0x99", "peice": "Rook 1", "move": "f4" }, { "code" : "0x9a", "peice": "Queen 1", "move": "f6" }, { "code" : "0x9b", "peice": "Pawn 3", "move": "f2" }, { "code" : "0x9d", "peice": "Queen 1", "move": "f2" }, { "code" : "0x9f", "peice": "Bishop 2", "move": "f4 l4" }, { "code" : "0xa0", "peice": "Queen 2", "move": "f3" }, { "code" : "0xa2", "peice": "Queen 1", "move": "f2 r2" }, { "code" : "0xa3", "peice": "Pawn 8", "move": "f1" }, { "code" : "0xa5", "peice": "Rook 2", "move": "f5" }, { "code" : "0xa9", "peice": "Rook 2", "move": "r2" }, { "code" : "0xab", "peice": "Queen 2", "move": "f6 l6" }, { "code" : "0xad", "peice": "Rook 2", "move": "r4" }, { "code" : "0xae", "peice": "Queen 2", "move": "f3 r3" }, { "code" : "0xb0", "peice": "Queen 2", "move": "f4" }, { "code" : "0xb1", "peice": "Pawn 6", "move": "f2" }, { "code" : "0xb2", "peice": "Bishop 1", "move": "f6 l6" }, { "code" : "0xb5", "peice": "Rook 2", "move": "r5" }, { "code" : "0xb7", "peice": "Queen 1", "move": "f5" }, { "code" : "0xb9", "peice": "Bishop 2", "move": "f3 r3" }, { "code" : "0xbb", "peice": "Pawn 5", "move": "f1" }, { "code" : "0xbc", "peice": "Queen 2", "move": "r5" }, { "code" : "0xbd", "peice": "Queen 2", "move": "f2" }, { "code" : "0xbe", "peice": "King ", "move": "r1" }, { "code" : "0xc1", "peice": "Bishop 1", "move": "f2 r2" }, { "code" : "0xc2", "peice": "Bishop 2", "move": "f2 r2" }, { "code" : "0xc3", "peice": "Bishop 1", "move": "f2 l2" }, { "code" : "0xc4", "peice": "Rook 2", "move": "r1" }, { "code" : "0xc5", "peice": "Rook 2", "move": "f4" }, { "code" : "0xc6", "peice": "Queen 2", "move": "f5" }, { "code" : "0xc7", "peice": "Pawn 7", "move": "f1 l1" }, { "code" : "0xc8", "peice": "Pawn 7", "move": "f2" }, { "code" : "0xc9", "peice": "Queen 2", "move": "f7" }, { "code" : "0xca", "peice": "Bishop 2", "move": "f3 l3" }, { "code" : "0xcb", "peice": "Pawn 6", "move": "f1" }, { "code" : "0xcc", "peice": "Bishop 2", "move": "f5 l5" }, { "code" : "0xcd", "peice": "Rook 1", "move": "r2" }, { "code" : "0xcf", "peice": "Pawn 4", "move": "f1" }, { "code" : "0xd1", "peice": "Pawn 2", "move": "f1 l1" }, { "code" : "0xd2", "peice": "Knight 2", "move": "f1 r2" }, { "code" : "0xd3", "peice": "Knight 2", "move": "f1 l2" }, { "code" : "0xd7", "peice": "Queen 1", "move": "f1 l1" }, { "code" : "0xd8", "peice": "Rook 2", "move": "r6" }, { "code" : "0xd9", "peice": "Queen 1", "move": "f2 l2" }, { "code" : "0xda", "peice": "Knight 1", "move": "b2 l1" }, { "code" : "0xdb", "peice": "Pawn 1", "move": "f2" }, { "code" : "0xde", "peice": "Pawn 5", "move": "f1 l1" }, { "code" : "0xdf", "peice": "King ", "move": "f1 l1" }, { "code" : "0xe0", "peice": "Knight 2", "move": "b1 r2" }, { "code" : "0xe1", "peice": "Rook 1", "move": "f7" }, { "code" : "0xe3", "peice": "Rook 2", "move": "f3" }, { "code" : "0xe5", "peice": "Queen 1", "move": "r4" }, { "code" : "0xe6", "peice": "Pawn 4", "move": "f2" }, { "code" : "0xe7", "peice": "Queen 1", "move": "f4 r4" }, { "code" : "0xe8", "peice": "Rook 1", "move": "f2" }, { "code" : "0xe9", "peice": "Knight 1", "move": "b1 r2" }, { "code" : "0xeb", "peice": "Pawn 4", "move": "f1 r1" }, { "code" : "0xec", "peice": "Pawn 1", "move": "f1" }, { "code" : "0xed", "peice": "Queen 1", "move": "f7 r7" }, { "code" : "0xee", "peice": "Queen 2", "move": "f1 l1" }, { "code" : "0xef", "peice": "Rook 1", "move": "r4" }, { "code" : "0xf0", "peice": "Queen 2", "move": "r7" }, { "code" : "0xf1", "peice": "Queen 1", "move": "f1 r1" }, { "code" : "0xf3", "peice": "Knight 2", "move": "f2 l1" }, { "code" : "0xf4", "peice": "Rook 2", "move": "f2" }, { "code" : "0xf5", "peice": "Bishop 2", "move": "f1 r1" }, { "code" : "0xf6", "peice": "Long Castle", "move": "O-O-O" }, { "code" : "0xf7", "peice": "Knight 1", "move": "f1 l2" }, { "code" : "0xf8", "peice": "Queen 2", "move": "r1" }, { "code" : "0xf9", "peice": "Queen 2", "move": "f6" }, { "code" : "0xfa", "peice": "Queen 2", "move": "r3" }, { "code" : "0xfb", "peice": "Queen 2", "move": "f2 r2" }, { "code" : "0xfd", "peice": "Queen 1", "move": "f7" }, { "code" : "0xfe", "peice": "Queen 2", "move": "f3 l3" } ]; module.exports = CTGMoveService;