Split move doing from event handling

This commit is contained in:
Juhani Krekelä 2021-01-10 17:29:01 +02:00
parent 56d64c813e
commit e9f6480d90
1 changed files with 21 additions and 24 deletions

View File

@ -207,6 +207,13 @@
return;
}
let ret = doMove(move);
if ('error' in ret) {
alert(ret.error);
}
}
function doMove(move) {
// Piece
let piece = move.slice(0, 1);
let index = 0;
@ -230,8 +237,7 @@
piece = 'P';
break;
default:
alert('Not a valid piece: ' + piece);
return;
return {error: 'Not a valid piece: ' + piece};
}
// Start square
@ -242,8 +248,7 @@
startLetter === '' || !'abcdefgh'.includes(startLetter) ||
startNumber === '' || !'12345678'.includes(startNumber)
) {
alert('Not a valid coordinate: ' + startLetter + startNumber);
return;
return {error: 'Not a valid coordinate: ' + startLetter + startNumber};
}
// Capturing
@ -261,8 +266,7 @@
endLetter === '' || !'abcdefgh'.includes(endLetter) ||
endNumber === '' || !'12345678'.includes(endNumber)
) {
alert('Not a valid coordinate: ' + endLetter + endNumber);
return;
return {error: 'Not a valid coordinate: ' + endLetter + endNumber};
}
// Promotion
@ -277,16 +281,13 @@
promotion = move.slice(index, index + 1);
break;
case 'K':
alert('Cannot promote a piece to king');
return;
return {error: 'Cannot promote a piece to king'};
break;
case 'P':
alert('Cannot promote a piece to pawn');
return;
return {error: 'Cannot promote a piece to pawn'};
break;
default:
alert('Unrecognized piece: ' + move.slice(index, index + 1));
return;
return {error: 'Unrecognized piece: ' + move.slice(index, index + 1)};
}
index++;
}
@ -303,8 +304,7 @@
// TODO: Checkmate'
break;
default:
alert('Unexpected contents at the end of the move: ' + move.slice(index));
return;
return {error: 'Unexpected contents at the end of the move: ' + move.slice(index)};
}
// End of parsing, start of move construction
@ -321,20 +321,17 @@
// Are we moving the piece onto itself?
if (startLetter === endLetter && startNumber === endNumber) {
alert('Start and end squares of the move cannot be identical');
return;
return {error: 'Start and end squares of the move cannot be identical'};
}
// Are we moving the piece from where it is located?
let startSquare = document.getElementById(startLetter + startNumber);
if (startSquare.childNodes.length === 0) {
alert('No piece on square ' + startLetter + startNumber);
return;
return {error: 'No piece on square ' + startLetter + startNumber};
}
if (startSquare.childNodes[0].data !== renderedPiece) {
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;
return {error: (whiteMove ? 'White' : 'Black') + ' ' + pieceNames[piece] + ' not on square ' + startLetter + startNumber};
}
// TODO: Check piece is allowed to move like that
@ -342,12 +339,10 @@
// Can the piece move to this location?
let endSquare = document.getElementById(endLetter + endNumber);
if (endSquare.childNodes.length !== 0 && !captures) {
alert('Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?');
return;
return {error: 'Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?'};
}
if (endSquare.childNodes.length === 0 && captures) {
alert('Square ' + endLetter + endNumber + ' empty even though capture was specified');
return;
return {error: 'Square ' + endLetter + endNumber + ' empty even though capture was specified'};
}
// Record our alterations to the table
@ -377,6 +372,8 @@
// Empty input field
document.getElementById('move').value = '';
return {}
}
function undoMove() {