add determineTerritory to Game.endGame for empty points
This commit is contained in:
parent
19a5282b73
commit
1b3dbd870a
1 changed files with 275 additions and 3 deletions
|
@ -299,10 +299,25 @@ const Game = ({ gameData = {}, gameRecord = [] } = {}) => {
|
|||
// form groups for empty points
|
||||
const joinEmptyPoints = (point) => {
|
||||
if (point.stone) return point;
|
||||
return point.joinGroup({ point, Game: this });
|
||||
point.joinGroup({ point, Game: this });
|
||||
return point;
|
||||
};
|
||||
const boardState = pipeMap(joinEmptyPoints)(this.boardState);
|
||||
// for each empty point group determine territory
|
||||
// for each point determine territory
|
||||
const determineTerritory = (point) => {
|
||||
if (point.stone || point.territory) return point;
|
||||
const points = Array.from(this.groups[point.group].stones);
|
||||
const neighbors = points.flatMap((pt) =>
|
||||
getNeighbors({ Game: this, point: pt })
|
||||
);
|
||||
const stones = neighbors.filter((point) => point.stone !== 0);
|
||||
point.territory =
|
||||
stones.reduce((acc, { stone }) => acc + stone, 0) || "d";
|
||||
return point;
|
||||
};
|
||||
|
||||
let boardState = pipeMap(joinEmptyPoints)(this.boardState);
|
||||
boardState = pipeMap(determineTerritory)(boardState);
|
||||
this.boardState = boardState;
|
||||
// for each non-empty point group determine life
|
||||
// submit board state to users
|
||||
// if boardState is approved calculate winner
|
||||
|
@ -479,3 +494,260 @@ module.exports = {
|
|||
Game,
|
||||
Point,
|
||||
};
|
||||
|
||||
const honinboGameRecord = [
|
||||
{ player: "black", pos: { x: 4, y: 16 } },
|
||||
{ player: "white", pos: { x: 3, y: 4 } },
|
||||
{ player: "black", pos: { x: 16, y: 4 } },
|
||||
{ player: "white", pos: { x: 17, y: 16 } },
|
||||
{ player: "black", pos: { x: 15, y: 17 } },
|
||||
{ player: "white", pos: { x: 5, y: 3 } },
|
||||
{ player: "black", pos: { x: 17, y: 14 } },
|
||||
{ player: "white", pos: { x: 16, y: 15 } },
|
||||
{ player: "black", pos: { x: 16, y: 14 } },
|
||||
{ player: "white", pos: { x: 14, y: 15 } },
|
||||
{ player: "black", pos: { x: 15, y: 14 } },
|
||||
{ player: "white", pos: { x: 14, y: 17 } },
|
||||
{ player: "black", pos: { x: 14, y: 18 } },
|
||||
{ player: "white", pos: { x: 13, y: 17 } },
|
||||
{ player: "black", pos: { x: 16, y: 17 } },
|
||||
{ player: "white", pos: { x: 15, y: 15 } },
|
||||
{ player: "black", pos: { x: 13, y: 18 } },
|
||||
{ player: "white", pos: { x: 11, y: 17 } },
|
||||
{ player: "black", pos: { x: 17, y: 17 } },
|
||||
{ player: "white", pos: { x: 18, y: 16 } },
|
||||
{ player: "black", pos: { x: 12, y: 17 } },
|
||||
{ player: "white", pos: { x: 12, y: 16 } },
|
||||
{ player: "black", pos: { x: 12, y: 18 } },
|
||||
{ player: "white", pos: { x: 16, y: 10 } },
|
||||
{ player: "black", pos: { x: 17, y: 7 } },
|
||||
{ player: "white", pos: { x: 13, y: 13 } },
|
||||
{ player: "black", pos: { x: 15, y: 11 } },
|
||||
{ player: "white", pos: { x: 11, y: 16 } },
|
||||
{ player: "black", pos: { x: 15, y: 10 } },
|
||||
{ player: "white", pos: { x: 16, y: 8 } },
|
||||
{ player: "black", pos: { x: 17, y: 8 } },
|
||||
{ player: "white", pos: { x: 15, y: 9 } },
|
||||
{ player: "black", pos: { x: 17, y: 9 } },
|
||||
{ player: "white", pos: { x: 16, y: 9 } },
|
||||
{ player: "black", pos: { x: 13, y: 10 } },
|
||||
{ player: "white", pos: { x: 16, y: 7 } },
|
||||
{ player: "black", pos: { x: 16, y: 6 } },
|
||||
{ player: "white", pos: { x: 15, y: 6 } },
|
||||
{ player: "black", pos: { x: 16, y: 5 } },
|
||||
{ player: "white", pos: { x: 13, y: 7 } },
|
||||
{ player: "black", pos: { x: 11, y: 10 } },
|
||||
{ player: "white", pos: { x: 13, y: 4 } },
|
||||
{ player: "black", pos: { x: 3, y: 9 } },
|
||||
{ player: "white", pos: { x: 10, y: 8 } },
|
||||
{ player: "black", pos: { x: 9, y: 10 } },
|
||||
{ player: "white", pos: { x: 7, y: 16 } },
|
||||
{ player: "black", pos: { x: 4, y: 14 } },
|
||||
{ player: "white", pos: { x: 8, y: 9 } },
|
||||
{ player: "black", pos: { x: 8, y: 14 } },
|
||||
{ player: "white", pos: { x: 8, y: 10 } },
|
||||
{ player: "black", pos: { x: 9, y: 11 } },
|
||||
{ player: "white", pos: { x: 8, y: 11 } },
|
||||
{ player: "black", pos: { x: 10, y: 14 } },
|
||||
{ player: "white", pos: { x: 9, y: 15 } },
|
||||
{ player: "black", pos: { x: 12, y: 14 } },
|
||||
{ player: "white", pos: { x: 11, y: 13 } },
|
||||
{ player: "black", pos: { x: 12, y: 13 } },
|
||||
{ player: "white", pos: { x: 12, y: 12 } },
|
||||
{ player: "black", pos: { x: 13, y: 14 } },
|
||||
{ player: "white", pos: { x: 14, y: 14 } },
|
||||
{ player: "black", pos: { x: 11, y: 14 } },
|
||||
{ player: "white", pos: { x: 14, y: 13 } },
|
||||
{ player: "black", pos: { x: 14, y: 9 } },
|
||||
{ player: "white", pos: { x: 12, y: 9 } },
|
||||
{ player: "black", pos: { x: 12, y: 10 } },
|
||||
{ player: "white", pos: { x: 16, y: 12 } },
|
||||
{ player: "black", pos: { x: 16, y: 11 } },
|
||||
{ player: "white", pos: { x: 17, y: 12 } },
|
||||
{ player: "black", pos: { x: 18, y: 11 } },
|
||||
{ player: "white", pos: { x: 18, y: 12 } },
|
||||
{ player: "black", pos: { x: 15, y: 12 } },
|
||||
{ player: "white", pos: { x: 15, y: 13 } },
|
||||
{ player: "black", pos: { x: 17, y: 11 } },
|
||||
{ player: "white", pos: { x: 15, y: 3 } },
|
||||
{ player: "black", pos: { x: 16, y: 3 } },
|
||||
{ player: "white", pos: { x: 16, y: 2 } },
|
||||
{ player: "black", pos: { x: 17, y: 2 } },
|
||||
{ player: "white", pos: { x: 3, y: 7 } },
|
||||
{ player: "black", pos: { x: 5, y: 9 } },
|
||||
{ player: "white", pos: { x: 8, y: 4 } },
|
||||
{ player: "black", pos: { x: 5, y: 11 } },
|
||||
{ player: "white", pos: { x: 4, y: 17 } },
|
||||
{ player: "black", pos: { x: 3, y: 17 } },
|
||||
{ player: "white", pos: { x: 5, y: 17 } },
|
||||
{ player: "black", pos: { x: 3, y: 18 } },
|
||||
{ player: "white", pos: { x: 5, y: 16 } },
|
||||
{ player: "black", pos: { x: 4, y: 15 } },
|
||||
{ player: "white", pos: { x: 15, y: 2 } },
|
||||
{ player: "black", pos: { x: 4, y: 3 } },
|
||||
{ player: "white", pos: { x: 4, y: 4 } },
|
||||
{ player: "black", pos: { x: 10, y: 4 } },
|
||||
{ player: "white", pos: { x: 8, y: 3 } },
|
||||
{ player: "black", pos: { x: 12, y: 7 } },
|
||||
{ player: "white", pos: { x: 13, y: 6 } },
|
||||
{ player: "black", pos: { x: 5, y: 2 } },
|
||||
{ player: "white", pos: { x: 4, y: 2 } },
|
||||
{ player: "black", pos: { x: 10, y: 7 } },
|
||||
{ player: "white", pos: { x: 9, y: 7 } },
|
||||
{ player: "black", pos: { x: 10, y: 6 } },
|
||||
{ player: "white", pos: { x: 12, y: 8 } },
|
||||
{ player: "black", pos: { x: 9, y: 8 } },
|
||||
{ player: "white", pos: { x: 10, y: 9 } },
|
||||
{ player: "black", pos: { x: 8, y: 5 } },
|
||||
{ player: "white", pos: { x: 9, y: 9 } },
|
||||
{ player: "black", pos: { x: 6, y: 3 } },
|
||||
{ player: "white", pos: { x: 5, y: 4 } },
|
||||
{ player: "black", pos: { x: 7, y: 5 } },
|
||||
{ player: "white", pos: { x: 6, y: 4 } },
|
||||
{ player: "black", pos: { x: 12, y: 4 } },
|
||||
{ player: "white", pos: { x: 11, y: 3 } },
|
||||
{ player: "black", pos: { x: 12, y: 3 } },
|
||||
{ player: "white", pos: { x: 10, y: 3 } },
|
||||
{ player: "black", pos: { x: 14, y: 4 } },
|
||||
{ player: "white", pos: { x: 15, y: 4 } },
|
||||
{ player: "black", pos: { x: 13, y: 5 } },
|
||||
{ player: "white", pos: { x: 15, y: 5 } },
|
||||
{ player: "black", pos: { x: 9, y: 4 } },
|
||||
{ player: "white", pos: { x: 9, y: 3 } },
|
||||
{ player: "black", pos: { x: 7, y: 7 } },
|
||||
{ player: "white", pos: { x: 12, y: 6 } },
|
||||
{ player: "black", pos: { x: 11, y: 4 } },
|
||||
{ player: "white", pos: { x: 8, y: 8 } },
|
||||
{ player: "black", pos: { x: 6, y: 8 } },
|
||||
{ player: "white", pos: { x: 2, y: 8 } },
|
||||
{ player: "black", pos: { x: 2, y: 9 } },
|
||||
{ player: "white", pos: { x: 9, y: 12 } },
|
||||
{ player: "black", pos: { x: 10, y: 12 } },
|
||||
{ player: "white", pos: { x: 10, y: 10 } },
|
||||
{ player: "black", pos: { x: 10, y: 11 } },
|
||||
{ player: "white", pos: { x: 9, y: 13 } },
|
||||
{ player: "black", pos: { x: 9, y: 14 } },
|
||||
{ player: "white", pos: { x: 10, y: 13 } },
|
||||
{ player: "black", pos: { x: 11, y: 11 } },
|
||||
{ player: "white", pos: { x: 7, y: 13 } },
|
||||
{ player: "black", pos: { x: 7, y: 14 } },
|
||||
{ player: "white", pos: { x: 6, y: 13 } },
|
||||
{ player: "black", pos: { x: 6, y: 14 } },
|
||||
{ player: "white", pos: { x: 5, y: 13 } },
|
||||
{ player: "black", pos: { x: 8, y: 13 } },
|
||||
{ player: "white", pos: { x: 8, y: 12 } },
|
||||
{ player: "black", pos: { x: 6, y: 11 } },
|
||||
{ player: "white", pos: { x: 7, y: 11 } },
|
||||
{ player: "black", pos: { x: 6, y: 15 } },
|
||||
{ player: "white", pos: { x: 14, y: 8 } },
|
||||
{ player: "black", pos: { x: 19, y: 12 } },
|
||||
{ player: "white", pos: { x: 19, y: 13 } },
|
||||
{ player: "black", pos: { x: 18, y: 13 } },
|
||||
{ player: "white", pos: { x: 19, y: 11 } },
|
||||
{ player: "black", pos: { x: 19, y: 14 } },
|
||||
{ player: "white", pos: { x: 16, y: 13 } },
|
||||
{ player: "black", pos: { x: 19, y: 12 } },
|
||||
{ player: "white", pos: { x: 13, y: 15 } },
|
||||
{ player: "black", pos: { x: 11, y: 18 } },
|
||||
{ player: "white", pos: { x: 10, y: 18 } },
|
||||
{ player: "black", pos: { x: 19, y: 10 } },
|
||||
{ player: "white", pos: { x: 8, y: 18 } },
|
||||
{ player: "black", pos: { x: 5, y: 19 } },
|
||||
{ player: "white", pos: { x: 13, y: 9 } },
|
||||
{ player: "black", pos: { x: 14, y: 10 } },
|
||||
{ player: "white", pos: { x: 18, y: 18 } },
|
||||
{ player: "black", pos: { x: 18, y: 17 } },
|
||||
{ player: "white", pos: { x: 19, y: 17 } },
|
||||
{ player: "black", pos: { x: 17, y: 18 } },
|
||||
{ player: "white", pos: { x: 8, y: 15 } },
|
||||
{ player: "black", pos: { x: 4, y: 13 } },
|
||||
{ player: "white", pos: { x: 17, y: 1 } },
|
||||
{ player: "black", pos: { x: 18, y: 2 } },
|
||||
{ player: "white", pos: { x: 1, y: 9 } },
|
||||
{ player: "black", pos: { x: 1, y: 10 } },
|
||||
{ player: "white", pos: { x: 1, y: 8 } },
|
||||
{ player: "black", pos: { x: 2, y: 10 } },
|
||||
{ player: "white", pos: { x: 9, y: 6 } },
|
||||
{ player: "black", pos: { x: 9, y: 5 } },
|
||||
{ player: "white", pos: { x: 6, y: 6 } },
|
||||
{ player: "black", pos: { x: 8, y: 7 } },
|
||||
{ player: "white", pos: { x: 5, y: 7 } },
|
||||
{ player: "black", pos: { x: 6, y: 18 } },
|
||||
{ player: "white", pos: { x: 7, y: 18 } },
|
||||
{ player: "black", pos: { x: 10, y: 19 } },
|
||||
{ player: "white", pos: { x: 9, y: 19 } },
|
||||
{ player: "black", pos: { x: 9, y: 17 } },
|
||||
{ player: "white", pos: { x: 11, y: 19 } },
|
||||
{ player: "black", pos: { x: 19, y: 18 } },
|
||||
{ player: "white", pos: { x: 4, y: 19 } },
|
||||
{ player: "black", pos: { x: 4, y: 18 } },
|
||||
{ player: "white", pos: { x: 5, y: 18 } },
|
||||
{ player: "black", pos: { x: 3, y: 19 } },
|
||||
{ player: "white", pos: { x: 6, y: 17 } },
|
||||
{ player: "black", pos: { x: 19, y: 16 } },
|
||||
{ player: "white", pos: { x: 11, y: 2 } },
|
||||
{ player: "black", pos: { x: 12, y: 2 } },
|
||||
{ player: "white", pos: { x: 14, y: 5 } },
|
||||
{ player: "black", pos: { x: 13, y: 3 } },
|
||||
{ player: "white", pos: { x: 6, y: 10 } },
|
||||
{ player: "black", pos: { x: 3, y: 8 } },
|
||||
{ player: "white", pos: { x: 2, y: 7 } },
|
||||
{ player: "black", pos: { x: 5, y: 10 } },
|
||||
{ player: "white", pos: { x: 18, y: 15 } },
|
||||
{ player: "black", pos: { x: 19, y: 15 } },
|
||||
{ player: "white", pos: { x: 6, y: 19 } },
|
||||
{ player: "black", pos: { x: 12, y: 19 } },
|
||||
{ player: "white", pos: { x: 18, y: 1 } },
|
||||
{ player: "black", pos: { x: 10, y: 19 } },
|
||||
{ player: "white", pos: { x: 9, y: 18 } },
|
||||
{ player: "black", pos: { x: 10, y: 15 } },
|
||||
{ player: "white", pos: { x: 10, y: 16 } },
|
||||
{ player: "black", pos: { x: 19, y: 2 } },
|
||||
{ player: "white", pos: { x: 18, y: 14 } },
|
||||
{ player: "black", pos: { x: 17, y: 13 } },
|
||||
{ player: "white", pos: { x: 6, y: 9 } },
|
||||
{ player: "black", pos: { x: 7, y: 9 } },
|
||||
{ player: "white", pos: { x: 7, y: 10 } },
|
||||
{ player: "black", pos: { x: 5, y: 8 } },
|
||||
{ player: "white", pos: { x: 7, y: 8 } },
|
||||
{ player: "black", pos: { x: 6, y: 7 } },
|
||||
{ player: "white", pos: { x: 4, y: 7 } },
|
||||
{ player: "black", pos: { x: 6, y: 5 } },
|
||||
{ player: "white", pos: { x: 5, y: 5 } },
|
||||
{ player: "black", pos: { x: 7, y: 4 } },
|
||||
{ player: "white", pos: { x: 7, y: 3 } },
|
||||
{ player: "black", pos: { x: 11, y: 7 } },
|
||||
{ player: "white", pos: { x: 4, y: 8 } },
|
||||
{ player: "black", pos: { x: 4, y: 9 } },
|
||||
{ player: "white", pos: { x: 5, y: 12 } },
|
||||
{ player: "black", pos: { x: 4, y: 12 } },
|
||||
{ player: "white", pos: { x: 17, y: 10 } },
|
||||
{ player: "black", pos: { x: 18, y: 10 } },
|
||||
{ player: "white", pos: { x: 15, y: 16 } },
|
||||
{ player: "black", pos: { x: 12, y: 5 } },
|
||||
{ player: "white", pos: { x: 11, y: 6 } },
|
||||
{ player: "black", pos: { x: 14, y: 2 } },
|
||||
{ player: "white", pos: { x: 14, y: 3 } },
|
||||
{ player: "black", pos: { x: 11, y: 1 } },
|
||||
{ player: "white", pos: { x: 10, y: 1 } },
|
||||
{ player: "black", pos: { x: 12, y: 1 } },
|
||||
{ player: "white", pos: { x: 17, y: 15 } },
|
||||
{ player: "black", pos: { x: 19, y: 13 } },
|
||||
{ player: "white", pos: { x: 17, y: 3 } },
|
||||
{ player: "black", pos: { x: 18, y: 3 } },
|
||||
{ player: "white", pos: { x: 11, y: 8 } },
|
||||
{ player: "black", pos: { x: 10, y: 5 } },
|
||||
{ player: "white", pos: { x: 14, y: 1 } },
|
||||
{ player: "black", pos: { x: 13, y: 1 } },
|
||||
{ player: "white", pos: { x: 13, y: 12 } },
|
||||
{ player: "black", pos: { x: 15, y: 1 } },
|
||||
{ player: "white", pos: { x: 16, y: 1 } },
|
||||
{ player: "black", pos: { x: 14, y: 1 } },
|
||||
{ player: "white", pos: { x: 4, y: 19 } },
|
||||
{ player: "black", pos: { x: 13, y: 4 } },
|
||||
{ player: "white", pos: { x: 5, y: 19 } },
|
||||
{ player: "black", pos: { x: 11, y: 19 } },
|
||||
];
|
||||
const honinboGame = Game({ gameRecord: honinboGameRecord })
|
||||
.submitPass("white")
|
||||
.submitPass("black");
|
||||
|
|
Loading…
Reference in a new issue