add simple make move
checks for legality of move and player turn after submission
This commit is contained in:
parent
3b2927de24
commit
3a483049a4
1 changed files with 46 additions and 17 deletions
63
src/main.js
63
src/main.js
|
@ -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) {
|
||||
|
@ -488,23 +490,40 @@ function clickCloseMenu(evt) {
|
|||
/*----- gameplay functions -----*/
|
||||
|
||||
function clickBoard(evt) {
|
||||
evt.stopPropagation();
|
||||
if (gameState.pass > 1 || gameState.winner) return editTerritory(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 point = findPointFromIdx(placement);
|
||||
//checks that this placement was marked as legal
|
||||
if ( !checkLegal(point) ) return null;
|
||||
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();
|
||||
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);
|
||||
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() {
|
||||
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue