Compare commits
2 commits
56d64c813e
...
881a9b803c
Author | SHA1 | Date | |
---|---|---|---|
|
881a9b803c | ||
|
e9f6480d90 |
1 changed files with 22 additions and 24 deletions
46
takhta.html
46
takhta.html
|
@ -207,6 +207,13 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let ret = doMove(move);
|
||||||
|
if ('error' in ret) {
|
||||||
|
alert(ret.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function doMove(move) {
|
||||||
// Piece
|
// Piece
|
||||||
let piece = move.slice(0, 1);
|
let piece = move.slice(0, 1);
|
||||||
let index = 0;
|
let index = 0;
|
||||||
|
@ -230,8 +237,7 @@
|
||||||
piece = 'P';
|
piece = 'P';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('Not a valid piece: ' + piece);
|
return {error: 'Not a valid piece: ' + piece};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start square
|
// Start square
|
||||||
|
@ -242,8 +248,7 @@
|
||||||
startLetter === '' || !'abcdefgh'.includes(startLetter) ||
|
startLetter === '' || !'abcdefgh'.includes(startLetter) ||
|
||||||
startNumber === '' || !'12345678'.includes(startNumber)
|
startNumber === '' || !'12345678'.includes(startNumber)
|
||||||
) {
|
) {
|
||||||
alert('Not a valid coordinate: ' + startLetter + startNumber);
|
return {error: 'Not a valid coordinate: ' + startLetter + startNumber};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Capturing
|
// Capturing
|
||||||
|
@ -261,8 +266,7 @@
|
||||||
endLetter === '' || !'abcdefgh'.includes(endLetter) ||
|
endLetter === '' || !'abcdefgh'.includes(endLetter) ||
|
||||||
endNumber === '' || !'12345678'.includes(endNumber)
|
endNumber === '' || !'12345678'.includes(endNumber)
|
||||||
) {
|
) {
|
||||||
alert('Not a valid coordinate: ' + endLetter + endNumber);
|
return {error: 'Not a valid coordinate: ' + endLetter + endNumber};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Promotion
|
// Promotion
|
||||||
|
@ -277,16 +281,13 @@
|
||||||
promotion = move.slice(index, index + 1);
|
promotion = move.slice(index, index + 1);
|
||||||
break;
|
break;
|
||||||
case 'K':
|
case 'K':
|
||||||
alert('Cannot promote a piece to king');
|
return {error: 'Cannot promote a piece to king'};
|
||||||
return;
|
|
||||||
break;
|
break;
|
||||||
case 'P':
|
case 'P':
|
||||||
alert('Cannot promote a piece to pawn');
|
return {error: 'Cannot promote a piece to pawn'};
|
||||||
return;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('Unrecognized piece: ' + move.slice(index, index + 1));
|
return {error: 'Unrecognized piece: ' + move.slice(index, index + 1)};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@ -300,11 +301,11 @@
|
||||||
// TODO: Check
|
// TODO: Check
|
||||||
break;
|
break;
|
||||||
case '++':
|
case '++':
|
||||||
|
case '#':
|
||||||
// TODO: Checkmate'
|
// TODO: Checkmate'
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert('Unexpected contents at the end of the move: ' + move.slice(index));
|
return {error: 'Unexpected contents at the end of the move: ' + move.slice(index)};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// End of parsing, start of move construction
|
// End of parsing, start of move construction
|
||||||
|
@ -321,20 +322,17 @@
|
||||||
|
|
||||||
// Are we moving the piece onto itself?
|
// Are we moving the piece onto itself?
|
||||||
if (startLetter === endLetter && startNumber === endNumber) {
|
if (startLetter === endLetter && startNumber === endNumber) {
|
||||||
alert('Start and end squares of the move cannot be identical');
|
return {error: 'Start and end squares of the move cannot be identical'};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Are we moving the piece from where it is located?
|
// Are we moving the piece from where it is located?
|
||||||
let startSquare = document.getElementById(startLetter + startNumber);
|
let startSquare = document.getElementById(startLetter + startNumber);
|
||||||
if (startSquare.childNodes.length === 0) {
|
if (startSquare.childNodes.length === 0) {
|
||||||
alert('No piece on square ' + startLetter + startNumber);
|
return {error: 'No piece on square ' + startLetter + startNumber};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (startSquare.childNodes[0].data !== renderedPiece) {
|
if (startSquare.childNodes[0].data !== renderedPiece) {
|
||||||
let pieceNames = {'K': 'king', 'Q': 'vizier', 'R': 'rook', 'B': 'elephant', 'N': 'horse', 'P': 'pawn'};
|
let pieceNames = {'K': 'king', 'Q': 'vizier', 'R': 'rook', 'B': 'elephant', 'N': 'horse', 'P': 'pawn'};
|
||||||
alert((whiteMove ? 'White' : 'Black') + ' ' + pieceNames[piece] + ' not on square ' + startLetter + startNumber);
|
return {error: (whiteMove ? 'White' : 'Black') + ' ' + pieceNames[piece] + ' not on square ' + startLetter + startNumber};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Check piece is allowed to move like that
|
// TODO: Check piece is allowed to move like that
|
||||||
|
@ -342,12 +340,10 @@
|
||||||
// Can the piece move to this location?
|
// Can the piece move to this location?
|
||||||
let endSquare = document.getElementById(endLetter + endNumber);
|
let endSquare = document.getElementById(endLetter + endNumber);
|
||||||
if (endSquare.childNodes.length !== 0 && !captures) {
|
if (endSquare.childNodes.length !== 0 && !captures) {
|
||||||
alert('Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?');
|
return {error: 'Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?'};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (endSquare.childNodes.length === 0 && captures) {
|
if (endSquare.childNodes.length === 0 && captures) {
|
||||||
alert('Square ' + endLetter + endNumber + ' empty even though capture was specified');
|
return {error: 'Square ' + endLetter + endNumber + ' empty even though capture was specified'};
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record our alterations to the table
|
// Record our alterations to the table
|
||||||
|
@ -377,6 +373,8 @@
|
||||||
|
|
||||||
// Empty input field
|
// Empty input field
|
||||||
document.getElementById('move').value = '';
|
document.getElementById('move').value = '';
|
||||||
|
|
||||||
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function undoMove() {
|
function undoMove() {
|
||||||
|
|
Loading…
Reference in a new issue