51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const board2string = (board) => board.map((row) => row.join('')).join('\n');
|
|
|
|
const execMove = (board, move) => {
|
|
const originX = fieldToXPosition(originField(move));
|
|
const originY = fieldToYPosition(originField(move));
|
|
const targetX = fieldToXPosition(targetField(move));
|
|
const targetY = fieldToYPosition(targetField(move));
|
|
|
|
board[targetY][targetX] = board[originY][originX];
|
|
board[originY][originX] = emptyBoard()[originY][originX];
|
|
return board;
|
|
};
|
|
|
|
const boardInStartPosition = () => [
|
|
['♜', '♞', '♝', '♛', '♚', '♝', '♞', '♜'],
|
|
['♟', '♟', '♟', '♟', '♟', '♟', '♟', '♟'],
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
['♙', '♙', '♙', '♙', '♙', '♙', '♙', '♙'],
|
|
['♖', '♘', '♗', '♕', '♔', '♗', '♘', '♖'],
|
|
];
|
|
|
|
const emptyBoard = () => [
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
['◻', '▦', '◻', '▦', '◻', '▦', '◻', '▦'],
|
|
['▦', '◻', '▦', '◻', '▦', '◻', '▦', '◻'],
|
|
];
|
|
|
|
const originField = (move) => move.substr(0, 2);
|
|
const targetField = (move) => move.substr(2);
|
|
|
|
const fieldToXPosition = (field) => letterToChessIndex(field.charAt(0));
|
|
const fieldToYPosition = (field) => numberToChessIndex(field.charAt(1));
|
|
const letterToChessIndex = (letter) => 'abcdefgh'.indexOf(letter);
|
|
const numberToChessIndex = (num) => 8 - num;
|
|
|
|
console.log(board2string(boardInStartPosition()));
|
|
|
|
console.log('\n');
|
|
|
|
console.log(board2string(execMove(boardInStartPosition(), 'e2e4')));
|