From 88e51fdbf9b872d9f52e8fba795a7d4074650117 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Sat, 2 May 2020 20:30:28 -0700 Subject: [PATCH] add clearKo to Game called after makeMove is verified as legal --- packages/server/services/Game.v2.js | 24 +++++++++--------------- packages/server/test/Game.v2.spec.js | 23 +++++++++++++++++++++-- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/server/services/Game.v2.js b/packages/server/services/Game.v2.js index 3ce51b1..ba4b4c0 100644 --- a/packages/server/services/Game.v2.js +++ b/packages/server/services/Game.v2.js @@ -196,6 +196,13 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => ({ // does not affect game object return { winner: this.winner, turn: this.turn, pass: this.pass, playerState: this.playerState, gameRecord: this.gameRecord } }, + + clearKo: function() { + this.kos.forEach(ko => { + this.boardState[ko] = { ...this.boardState[ko], legal: true, ko: false }; + }) + this.kos = []; + }, makeMove: function({ player, pos: {x, y}}) { let game = this; @@ -205,6 +212,7 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => ({ || ( game.turn === -1 && player === 'white' ); if (isTurn) { if (point.legal) { + if (this.kos.length) this.clearKo(); point.makeMove(game); game.turn *= -1; success = true; @@ -362,18 +370,4 @@ const Point = ({x, y, boardSize = 19}) => { module.exports = { Game, Point -} - -Game().initGame() -.makeMove({ player: 'black', pos: { x: 4, y: 4 } }) // 3 4 5 6 7 -.makeMove({ player: 'white', pos: { x: 5, y: 4 } }) // 4 1 1 -1 -.makeMove({ player: 'black', pos: { x: 5, y: 6 } }) // 5 1 -1 -1 1 -1 -.makeMove({ player: 'white', pos: { x: 5, y: 7 } }) // 6 1 1 -1 -.makeMove({ player: 'black', pos: { x: 4, y: 5 } }) // (13) at {5,6} -.makeMove({ player: 'white', pos: { x: 4, y: 6 } }) -.makeMove({ player: 'black', pos: { x: 5, y: 3 } }) -.makeMove({ player: 'white', pos: { x: 6, y: 6 } }) -.makeMove({ player: 'black', pos: { x: 6, y: 5 } }) -.makeMove({ player: 'white', pos: { x: 16, y: 16 } }) -.makeMove({ player: 'black', pos: { x: 6, y: 4 } }) -.makeMove({ player: 'white', pos: { x: 5, y: 5 } }); \ No newline at end of file +} \ No newline at end of file diff --git a/packages/server/test/Game.v2.spec.js b/packages/server/test/Game.v2.spec.js index 648de28..01b95a7 100644 --- a/packages/server/test/Game.v2.spec.js +++ b/packages/server/test/Game.v2.spec.js @@ -382,8 +382,27 @@ describe('capture logic: snapback, ko and playing in eyes', () => { koGame().legalMoves['5-5'].should.eql('k'); done(); }) - // ko cleared on Point after move - // ko cleared on Game after move + + it('ko cleared on Point after move', done => { + koGame().makeMove({ player: 'black', pos: { x: 16, y: 16 } }) + .makeMove({ player: 'white', pos: { x: 4, y: 16 } }) + .boardState['5-5'].ko.should.eql(false); + done(); + }); + + it('ko cleared on Game after move', done => { + koGame().makeMove({ player: 'black', pos: { x: 16, y: 16 } }) + .makeMove({ player: 'white', pos: { x: 4, y: 16 } }) + .kos.should.eql([]) + done(); + }); + + it('ko cleared on legalMoves after move', done => { + koGame().makeMove({ player: 'black', pos: { x: 16, y: 16 } }) + .makeMove({ player: 'white', pos: { x: 4, y: 16 } }) + .legalMoves['5-5'].should.eql('l'); + done(); + }) })