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) {
@ -488,23 +490,40 @@ function clickCloseMenu(evt) {
/*----- gameplay functions -----*/ /*----- gameplay functions -----*/
function clickBoard(evt) { 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 = [
let point = findPointFromIdx(placement); parseInt(evt.target.closest('td').id.split('-')[0]),
//checks that this placement was marked as legal parseInt(evt.target.closest('td').id.split('-')[1])
if ( !checkLegal(point) ) return null; ];
clearKo(); let update = {
clearPass(); payload: {
resolveCaptures(point); event: 'make_move',
point.stone = gameState.turn; placement,
point.joinGroup(); player: userName
playSound(point); }
clearCaptures(); };
gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`); let descr = `${userName} move at ${placement}`;
gameState.turn*= -1; return sendUpdate (update, descr);
renderGame(); }
function makeMove (payload) {
let { placement, player } = payload;
let point = findPointFromIdx(placement);
if (!checkLegal (point)) return;
if (!checkTurn (player)) return;
clearKo();
clearPass();
resolveCaptures(point);
point.stone = gameState.turn;
point.joinGroup();
playSound(point);
clearCaptures();
gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`);
gameState.turn*= -1;
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];