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;
|
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];
|
||||||
|
|
Loading…
Reference in a new issue