IPVGO: Record full history to avoid infinite ko capture loops on larger boards (#1299)

This commit is contained in:
Michael Ficocelli
2024-06-02 23:19:26 -04:00
committed by GitHub
parent 2f7950b49c
commit d9f04203cf
7 changed files with 61 additions and 28 deletions
+2 -2
View File
@@ -9,7 +9,7 @@ import { SnackbarEvents } from "../../ui/React/Snackbar";
import { getNewBoardState, getStateCopy, makeMove, passTurn, updateCaptures } from "../boardState/boardState";
import { bitverseArt, weiArt } from "../boardState/asciiArt";
import { getScore, resetWinstreak } from "../boardAnalysis/scoring";
import { boardFromSimpleBoard, evaluateIfMoveIsValid, getAllValidMoves } from "../boardAnalysis/boardAnalysis";
import { boardFromBoardString, evaluateIfMoveIsValid, getAllValidMoves } from "../boardAnalysis/boardAnalysis";
import { useRerender } from "../../ui/React/hooks";
import { OptionSwitch } from "../../ui/React/OptionSwitch";
import { boardStyles } from "../boardState/goStyles";
@@ -150,7 +150,7 @@ export function GoGameboardWrapper({ showInstructions }: GoGameboardWrapperProps
if (!boardState.previousBoards.length) return boardState;
const priorState = getStateCopy(boardState);
priorState.previousPlayer = boardState.previousPlayer === GoColor.black ? GoColor.white : GoColor.black;
priorState.board = boardFromSimpleBoard(boardState.previousBoards[0]);
priorState.board = boardFromBoardString(boardState.previousBoards[0]);
updateCaptures(priorState.board, priorState.previousPlayer);
return priorState;
}
+2 -2
View File
@@ -7,7 +7,7 @@ import { GoColor } from "@enums";
import { columnIndexes } from "../Constants";
import { findNeighbors } from "../boardState/boardState";
import { pointStyle } from "../boardState/goStyles";
import { findAdjacentLibertiesAndAlliesForPoint, getColorOnSimpleBoard } from "../boardAnalysis/boardAnalysis";
import { findAdjacentLibertiesAndAlliesForPoint, getColorOnBoardString } from "../boardAnalysis/boardAnalysis";
interface GoPointProps {
state: BoardState;
@@ -42,7 +42,7 @@ export function GoPoint({ state, x, y, traditional, hover, valid, emptyPointOwne
const sizeClass = getSizeClass(state.board[0].length, classes);
const isNewStone =
state.previousBoards.length && getColorOnSimpleBoard(state.previousBoards[0], x, y) === GoColor.empty;
state.previousBoards.length && getColorOnBoardString(state.previousBoards[0], x, y) === GoColor.empty;
const isPriorMove = player === state.previousPlayer && isNewStone;
const emptyPointColorClass =