Spaces:
Sleeping
Sleeping
File size: 2,585 Bytes
15f353f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import { TrigoGame } from "../inc/trigo/game";
// Test case: 2x3 board with moves aa zz z0 a0
// Expected: NOT terminal
console.log("=== Test: 2x3 board - aa zz z0 a0 ===\n");
// 2x3x1 board layout:
// y=2: az zz
// y=1: a0 z0
// y=0: aa za
// x=0 x=1
// For 2x3 board notation:
// x: a(0), z(1)
// y: a(0), 0(1), z(2)
const game = new TrigoGame({ x: 2, y: 3, z: 1 });
game.startGame();
console.log("Board shape: 2x3x1");
console.log("Position notation:");
console.log(" y=2: az(0,2) zz(1,2)");
console.log(" y=1: a0(0,1) z0(1,1)");
console.log(" y=0: aa(0,0) za(1,0)");
console.log();
// Moves: aa zz z0 a0
const moves = [
{ pos: { x: 0, y: 0, z: 0 }, name: "aa" }, // Black
{ pos: { x: 1, y: 2, z: 0 }, name: "zz" }, // White
{ pos: { x: 1, y: 1, z: 0 }, name: "z0" }, // Black
{ pos: { x: 0, y: 1, z: 0 }, name: "a0" }, // White
];
for (let i = 0; i < moves.length; i++) {
const move = moves[i];
const player = i % 2 === 0 ? "Black" : "White";
const success = game.drop(move.pos);
console.log(`${i + 1}. ${player}: ${move.name} (${move.pos.x},${move.pos.y}) - ${success ? "OK" : "FAILED"}`);
}
// Show board state
console.log("\nBoard state:");
const board = game.getBoard();
for (let y = 2; y >= 0; y--) {
let row = `y=${y}: `;
for (let x = 0; x < 2; x++) {
const stone = board[x][y][0];
const mark = stone === 0 ? "." : (stone === 1 ? "B" : "W");
row += mark + " ";
}
console.log(row);
}
// Check terminal conditions
const territory = game.getTerritory();
console.log("\nTerritory:", { black: territory.black, white: territory.white, neutral: territory.neutral });
const hasCapture = game.hasCapturingMove();
console.log("hasCapturingMove():", hasCapture);
const validMoves = game.validMovePositions();
console.log("validMovePositions():", validMoves.length);
// Count coverage
let stoneCount = 0;
for (let x = 0; x < 2; x++) {
for (let y = 0; y < 3; y++) {
if (board[x][y][0] !== 0) stoneCount++;
}
}
const coverage = stoneCount / 6;
console.log("Coverage:", (coverage * 100).toFixed(1) + "%");
console.log("\n" + "=".repeat(50));
console.log("Terminal check:");
console.log(" - neutral == 0?", territory.neutral === 0);
console.log(" - coverage > 50%?", coverage > 0.5);
console.log(" - hasCapturingMove?", hasCapture);
const shouldBeTerminal = territory.neutral === 0 && coverage > 0.5 && !hasCapture;
console.log("\nWith current logic, isTerminal:", shouldBeTerminal);
console.log("Expected: false (NOT terminal)");
console.log("Test", shouldBeTerminal === false ? "PASSED ✓" : "FAILED ✗");
|