import { TrigoGame } from "../inc/trigo/game"; // Test hasCapturingMove() function console.log("=== Test: hasCapturingMove() on 7x1x1 ===\n"); // 7x1x1: a(0), b(1), c(2), 0(3), x(4), y(5), z(6) const game = new TrigoGame({ x: 7, y: 1, z: 1 }); game.startGame(); const labels = ["a", "b", "c", "0", "x", "y", "z"]; function showState(msg: string) { console.log(`\n--- ${msg} ---`); const board = game.getBoard(); const boardStr = labels.map((l, i) => { const s = board[i][0][0]; return `${l}:${s === 0 ? "." : s === 1 ? "B" : "W"}`; }).join(" "); console.log(`Board: ${boardStr}`); console.log(`Current player: ${game.getCurrentPlayer() === 1 ? "Black" : "White"}`); console.log(`hasCapturingMove(): ${game.hasCapturingMove()}`); const territory = game.getTerritory(); console.log(`Territory: B=${territory.black} W=${territory.white} N=${territory.neutral}`); } // Initial state showState("Initial (empty board)"); // 1. Black plays 0 (center) game.drop({ x: 3, y: 0, z: 0 }); console.log("\n1. Black: 0"); showState("After Black 0"); // 2. White plays z (corner) game.drop({ x: 6, y: 0, z: 0 }); console.log("\n2. White: z"); showState("After White z"); // 3. Black plays y (threatens z) game.drop({ x: 5, y: 0, z: 0 }); console.log("\n3. Black: y (captures White z!)"); showState("After Black y - White z captured"); // Let's create a different scenario where capturing is possible but not yet done console.log("\n\n" + "=".repeat(60)); console.log("=== Test 2: Position with capturing move available ==="); console.log("=".repeat(60)); const game2 = new TrigoGame({ x: 7, y: 1, z: 1 }); game2.startGame(); // Build: 1. 0 z 2. b Pass // After this, Black can play 'y' to capture White's z (z has 1 liberty at y) const moves2 = [ { pos: { x: 3, y: 0, z: 0 }, name: "0" }, // Black: center { pos: { x: 6, y: 0, z: 0 }, name: "z" }, // White: corner z (has 1 liberty at y) { pos: { x: 1, y: 0, z: 0 }, name: "b" }, // Black: b (doesn't threaten z) { pos: null, name: "Pass" }, // White: Pass ]; for (const move of moves2) { if (move.pos) { game2.drop(move.pos); } else { game2.pass(); } } const board2 = game2.getBoard(); const boardStr2 = labels.map((l, i) => { const s = board2[i][0][0]; return `${l}:${s === 0 ? "." : s === 1 ? "B" : "W"}`; }).join(" "); console.log(`\nBoard: ${boardStr2}`); console.log(`Current player: ${game2.getCurrentPlayer() === 1 ? "Black" : "White"}`); console.log("Black can play 'y' to capture White's z"); // Now check both players console.log(`\nhasCapturingMove(Black): ${game2.hasCapturingMove(1)}`); console.log(`hasCapturingMove(White): ${game2.hasCapturingMove(2)}`); console.log("\n" + "=".repeat(60)); console.log("=== Test 3: Position with NO capturing moves ==="); console.log("=".repeat(60)); const game3 = new TrigoGame({ x: 5, y: 1, z: 1 }); game3.startGame(); // 5x1x1: a(0), b(1), 0(2), x(3), y(4) // Build a position where all stones are safe // 1. 0 (Black center) 2. Pass 3. b 4. Pass 5. x const moves3 = [ { pos: { x: 2, y: 0, z: 0 }, name: "0" }, { pos: null, name: "Pass" }, { pos: { x: 1, y: 0, z: 0 }, name: "b" }, { pos: null, name: "Pass" }, { pos: { x: 3, y: 0, z: 0 }, name: "x" }, ]; for (const move of moves3) { if (move.pos) { game3.drop(move.pos); } else { game3.pass(); } } const labels5 = ["a", "b", "0", "x", "y"]; const board3 = game3.getBoard(); const boardStr3 = labels5.map((l, i) => { const s = board3[i][0][0]; return `${l}:${s === 0 ? "." : s === 1 ? "B" : "W"}`; }).join(" "); console.log(`\nBoard: ${boardStr3}`); console.log(`Current player: ${game3.getCurrentPlayer() === 1 ? "Black" : "White"}`); console.log(`hasCapturingMove(): ${game3.hasCapturingMove()}`); const territory3 = game3.getTerritory(); console.log(`Territory: B=${territory3.black} W=${territory3.white} N=${territory3.neutral}`);