add clearKo to Game called after makeMove is verified as legal
This commit is contained in:
parent
2237e344c1
commit
88e51fdbf9
2 changed files with 30 additions and 17 deletions
|
@ -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 } });
|
||||
}
|
|
@ -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();
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue