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; let { payload, summary } = update;
switch (payload.event) { switch (payload.event) {
case 'make_move':
makeMove (payload);
break;
case 'new_game': case 'new_game':
initGame (payload); initGame (payload);
break; 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 == '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; if (evt.target.name == 'white-rank-certain') gameState.playerMeta.w.rankCertain = !gameState.playerMeta.w.rankCertain;
renderMenu(); renderMenu();
} }
function clickBoardSize(evt) { function clickBoardSize(evt) {
@ -491,10 +493,26 @@ function clickBoard(evt) {
evt.stopPropagation(); evt.stopPropagation();
if (gameState.pass > 1 || gameState.winner) return editTerritory(evt); if (gameState.pass > 1 || gameState.winner) return editTerritory(evt);
// checks for placement and pushes to cell // 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); let point = findPointFromIdx(placement);
//checks that this placement was marked as legal if (!checkLegal (point)) return;
if ( !checkLegal(point) ) return null; if (!checkTurn (player)) return;
clearKo(); clearKo();
clearPass(); clearPass();
resolveCaptures(point); resolveCaptures(point);
@ -505,6 +523,7 @@ function clickBoard(evt) {
gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`); gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`);
gameState.turn*= -1; gameState.turn*= -1;
renderGame(); renderGame();
return;
} }
function clearKo() { function clearKo() {
@ -546,6 +565,16 @@ function checkLegal(point) {
return true; 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() { function clearOverlay() {
for (let point in boardState) { for (let point in boardState) {
point = boardState[point]; point = boardState[point];