add simple make move

checks for legality of move and player turn after submission
This commit is contained in:
sorrel 2024-06-23 19:25:57 -04:00
parent 3b2927de24
commit 3a483049a4

View file

@ -283,6 +283,9 @@ window.webxdc.setUpdateListener((update) => {
let { payload, summary } = update;
switch (payload.event) {
case 'make_move':
makeMove (payload);
break;
case 'new_game':
initGame (payload);
break;
@ -455,7 +458,6 @@ function clickUpdatePlayerMeta(evt) {
if (evt.target.name == 'black-rank-certain') gameState.playerMeta.b.rankCertain = !gameState.playerMeta.b.rankCertain;
if (evt.target.name == 'white-rank-certain') gameState.playerMeta.w.rankCertain = !gameState.playerMeta.w.rankCertain;
renderMenu();
}
function clickBoardSize(evt) {
@ -491,10 +493,26 @@ function clickBoard(evt) {
evt.stopPropagation();
if (gameState.pass > 1 || gameState.winner) return editTerritory(evt);
// checks for placement and pushes to cell
let placement = [ parseInt(evt.target.closest('td').id.split('-')[0]), parseInt(evt.target.closest('td').id.split('-')[1]) ];
let placement = [
parseInt(evt.target.closest('td').id.split('-')[0]),
parseInt(evt.target.closest('td').id.split('-')[1])
];
let update = {
payload: {
event: 'make_move',
placement,
player: userName
}
};
let descr = `${userName} move at ${placement}`;
return sendUpdate (update, descr);
}
function makeMove (payload) {
let { placement, player } = payload;
let point = findPointFromIdx(placement);
//checks that this placement was marked as legal
if ( !checkLegal(point) ) return null;
if (!checkLegal (point)) return;
if (!checkTurn (player)) return;
clearKo();
clearPass();
resolveCaptures(point);
@ -505,6 +523,7 @@ function clickBoard(evt) {
gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`);
gameState.turn*= -1;
renderGame();
return;
}
function clearKo() {
@ -546,6 +565,16 @@ function checkLegal(point) {
return true;
}
function checkTurn (player) {
if (gameState.turn == 1) {
return gameState.playerMeta.b.name == player;
}
if (gameState.turn == -1) {
return gameState.playerMeta.w.name == player;
}
return false;
}
function clearOverlay() {
for (let point in boardState) {
point = boardState[point];