init Game.returnToMove
This commit is contained in:
parent
88e51fdbf9
commit
bdeb9c9d86
2 changed files with 46 additions and 2 deletions
|
@ -191,6 +191,10 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => ({
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
addToRecord: function(moveObject) {
|
||||||
|
this.gameRecord.push(moveObject);
|
||||||
|
},
|
||||||
|
|
||||||
getMeta: function() {
|
getMeta: function() {
|
||||||
// cannot be chained
|
// cannot be chained
|
||||||
// does not affect game object
|
// does not affect game object
|
||||||
|
@ -212,6 +216,7 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => ({
|
||||||
|| ( game.turn === -1 && player === 'white' );
|
|| ( game.turn === -1 && player === 'white' );
|
||||||
if (isTurn) {
|
if (isTurn) {
|
||||||
if (point.legal) {
|
if (point.legal) {
|
||||||
|
game.addToRecord({ player, pos: { x, y } });
|
||||||
if (this.kos.length) this.clearKo();
|
if (this.kos.length) this.clearKo();
|
||||||
point.makeMove(game);
|
point.makeMove(game);
|
||||||
game.turn *= -1;
|
game.turn *= -1;
|
||||||
|
@ -226,6 +231,16 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => ({
|
||||||
const group = Symbol(`${point.pos.x}-${point.pos.y}`);
|
const group = Symbol(`${point.pos.x}-${point.pos.y}`);
|
||||||
this.groups[group] = { stones: new Set(), liberties: new Set()};
|
this.groups[group] = { stones: new Set(), liberties: new Set()};
|
||||||
return { game: this, group };
|
return { game: this, group };
|
||||||
|
},
|
||||||
|
|
||||||
|
returnToMove: function(idx) {
|
||||||
|
if (idx < 0) {
|
||||||
|
const { komi, handicap, boardSize } = this;
|
||||||
|
return Game({
|
||||||
|
gameData: { komi, handicap, boardSize },
|
||||||
|
gameRecord: [...this.gameRecord.slice(0, this.gameRecord.length + idx)]
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -348,11 +348,10 @@ describe('capture logic: snapback, ko and playing in eyes', () => {
|
||||||
.makeMove({ player: 'white', pos: { x: 16, y: 16 } })
|
.makeMove({ player: 'white', pos: { x: 16, y: 16 } })
|
||||||
.makeMove({ player: 'black', pos: { x: 6, y: 4 } })
|
.makeMove({ player: 'black', pos: { x: 6, y: 4 } })
|
||||||
.makeMove({ player: 'white', pos: { x: 5, y: 5 } })
|
.makeMove({ player: 'white', pos: { x: 5, y: 5 } })
|
||||||
|
.makeMove({ player: 'black', pos: { x: 5, y: 6 } });
|
||||||
|
|
||||||
it('snapback functions properly', done => {
|
it('snapback functions properly', done => {
|
||||||
console.log(snapbackGame().boardState['5-6'])
|
|
||||||
snapbackGame()
|
snapbackGame()
|
||||||
.makeMove({ player: 'black', pos: { x: 5, y: 6 } })
|
|
||||||
.success.should.eql(true);
|
.success.should.eql(true);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -402,7 +401,37 @@ describe('capture logic: snapback, ko and playing in eyes', () => {
|
||||||
.makeMove({ player: 'white', pos: { x: 4, y: 16 } })
|
.makeMove({ player: 'white', pos: { x: 4, y: 16 } })
|
||||||
.legalMoves['5-5'].should.eql('l');
|
.legalMoves['5-5'].should.eql('l');
|
||||||
done();
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Game history functionality', () => {
|
||||||
|
const firstMove = { player: 'black', pos: { x: 4, y: 4 }};
|
||||||
|
const secondMove = { player: 'white', pos: { x: 16, y: 16 }};
|
||||||
|
|
||||||
|
it('makeMove creates gameRecord item', done => {
|
||||||
|
Game().initGame()
|
||||||
|
.makeMove(firstMove).gameRecord[0].should.eql(firstMove);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('makeMove holds history', done => {
|
||||||
|
const game = Game().initGame()
|
||||||
|
.makeMove(firstMove).makeMove(secondMove);
|
||||||
|
game.gameRecord[0].should.eql(firstMove);
|
||||||
|
game.gameRecord[1].should.eql(secondMove)
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Game.returnToMove returns new Game with gameRecord', done => {
|
||||||
|
Game().initGame()
|
||||||
|
.makeMove(firstMove)
|
||||||
|
.makeMove(secondMove)
|
||||||
|
.makeMove({ player: 'black', pos: { x: 16, y: 4 } })
|
||||||
|
.returnToMove(-1)
|
||||||
|
.gameRecord.should.eql([ firstMove, secondMove ])
|
||||||
|
done();
|
||||||
})
|
})
|
||||||
|
// .boardState['16-4'].stone.should.eql(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue