trigo / trigo-web /tools /testTerminal.ts
k-l-lambda's picture
Update trigo-web with VS People multiplayer mode
15f353f
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}`);