Spaces:
Sleeping
Sleeping
Commit
·
6f4808d
1
Parent(s):
e144fd4
feat: room rename and room switching with confirmation
Browse filesNew features:
- Room rename: admins can rename rooms with editable input
- Room switching during game: confirmation dialog prevents accidental game abandonment
- Auto-resign when leaving active game after confirmation
Bug fixes included:
- Race conditions in join logic
- Reconnect logic to rejoin previous room
- Memory leak prevention in socket listeners
- Fixed offX() methods undefined handler
- trigo-web/app/dist/assets/{index-BucvvkZ4.js → index-BW0iN4LO.js} +0 -0
- trigo-web/app/dist/index.html +1 -1
- trigo-web/app/src/components/RoomSelector.vue +23 -4
- trigo-web/app/src/composables/useSocket.ts +106 -18
- trigo-web/app/src/stores/playerStore.ts +23 -1
- trigo-web/app/src/views/TrigoView.vue +273 -52
- trigo-web/backend/dist/backend/src/services/gameManager.d.ts.map +1 -1
- trigo-web/backend/dist/backend/src/services/gameManager.js +16 -5
- trigo-web/backend/dist/backend/src/services/gameManager.js.map +1 -1
- trigo-web/backend/dist/backend/src/sockets/gameSocket.d.ts.map +1 -1
- trigo-web/backend/dist/backend/src/sockets/gameSocket.js +68 -4
- trigo-web/backend/dist/backend/src/sockets/gameSocket.js.map +1 -1
- trigo-web/backend/dist/inc/mctsAgent.d.ts +49 -0
- trigo-web/backend/dist/inc/mctsAgent.d.ts.map +1 -1
- trigo-web/backend/dist/inc/mctsAgent.js +256 -137
- trigo-web/backend/dist/inc/mctsAgent.js.map +1 -1
- trigo-web/backend/dist/inc/trigo/game.d.ts +42 -1
- trigo-web/backend/dist/inc/trigo/game.d.ts.map +1 -1
- trigo-web/backend/dist/inc/trigo/game.js +109 -21
- trigo-web/backend/dist/inc/trigo/game.js.map +1 -1
- trigo-web/backend/dist/inc/trigoTreeAgent.d.ts +15 -2
- trigo-web/backend/dist/inc/trigoTreeAgent.d.ts.map +1 -1
- trigo-web/backend/dist/inc/trigoTreeAgent.js +82 -25
- trigo-web/backend/dist/inc/trigoTreeAgent.js.map +1 -1
- trigo-web/backend/src/services/gameManager.ts +36 -0
- trigo-web/backend/src/sockets/gameSocket.ts +38 -0
trigo-web/app/dist/assets/{index-BucvvkZ4.js → index-BW0iN4LO.js}
RENAMED
|
The diff for this file is too large to render.
See raw diff
|
|
|
trigo-web/app/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
<title>Trigo - 3D Go Game</title>
|
| 8 |
-
<script type="module" crossorigin src="/assets/index-
|
| 9 |
<link rel="stylesheet" crossorigin href="/assets/index-Siwlapuk.css">
|
| 10 |
</head>
|
| 11 |
<body>
|
|
|
|
| 5 |
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
<title>Trigo - 3D Go Game</title>
|
| 8 |
+
<script type="module" crossorigin src="/assets/index-BW0iN4LO.js"></script>
|
| 9 |
<link rel="stylesheet" crossorigin href="/assets/index-Siwlapuk.css">
|
| 10 |
</head>
|
| 11 |
<body>
|
trigo-web/app/src/components/RoomSelector.vue
CHANGED
|
@@ -38,7 +38,10 @@
|
|
| 38 |
}"
|
| 39 |
@click="handleSelect(room)"
|
| 40 |
>
|
| 41 |
-
<
|
|
|
|
|
|
|
|
|
|
| 42 |
<span class="player-count" :class="playerCountClass(room)">
|
| 43 |
{{ room.playerCount }}/2
|
| 44 |
</span>
|
|
@@ -57,6 +60,7 @@ import { ref, computed, onMounted, onUnmounted } from "vue";
|
|
| 57 |
|
| 58 |
export interface RoomSummary {
|
| 59 |
id: string;
|
|
|
|
| 60 |
playerCount: number;
|
| 61 |
maxPlayers: number;
|
| 62 |
status: "waiting" | "playing" | "finished";
|
|
@@ -255,11 +259,26 @@ onUnmounted(() => {
|
|
| 255 |
}
|
| 256 |
|
| 257 |
.room-item {
|
| 258 |
-
.room-
|
| 259 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 260 |
font-size: 0.85rem;
|
| 261 |
color: #fff;
|
| 262 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 263 |
}
|
| 264 |
|
| 265 |
.player-count {
|
|
|
|
| 38 |
}"
|
| 39 |
@click="handleSelect(room)"
|
| 40 |
>
|
| 41 |
+
<div class="room-info">
|
| 42 |
+
<span class="room-name">{{ room.name || room.id }}</span>
|
| 43 |
+
<span class="room-id">{{ room.id }}</span>
|
| 44 |
+
</div>
|
| 45 |
<span class="player-count" :class="playerCountClass(room)">
|
| 46 |
{{ room.playerCount }}/2
|
| 47 |
</span>
|
|
|
|
| 60 |
|
| 61 |
export interface RoomSummary {
|
| 62 |
id: string;
|
| 63 |
+
name: string;
|
| 64 |
playerCount: number;
|
| 65 |
maxPlayers: number;
|
| 66 |
status: "waiting" | "playing" | "finished";
|
|
|
|
| 259 |
}
|
| 260 |
|
| 261 |
.room-item {
|
| 262 |
+
.room-info {
|
| 263 |
+
display: flex;
|
| 264 |
+
flex-direction: column;
|
| 265 |
+
gap: 0.15rem;
|
| 266 |
+
flex: 1;
|
| 267 |
+
min-width: 0;
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
.room-name {
|
| 271 |
font-size: 0.85rem;
|
| 272 |
color: #fff;
|
| 273 |
+
overflow: hidden;
|
| 274 |
+
text-overflow: ellipsis;
|
| 275 |
+
white-space: nowrap;
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
.room-id {
|
| 279 |
+
font-family: monospace;
|
| 280 |
+
font-size: 0.7rem;
|
| 281 |
+
color: rgba(255, 255, 255, 0.5);
|
| 282 |
}
|
| 283 |
|
| 284 |
.player-count {
|
trigo-web/app/src/composables/useSocket.ts
CHANGED
|
@@ -62,11 +62,24 @@ export function useSocket() {
|
|
| 62 |
return;
|
| 63 |
}
|
| 64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
// Send echo request and wait for response
|
| 66 |
socket.emit(
|
| 67 |
"echo",
|
| 68 |
{ message, timestamp: new Date().toISOString() },
|
| 69 |
(response: any) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
if (response.error) {
|
| 71 |
reject(new Error(response.error));
|
| 72 |
} else {
|
|
@@ -74,11 +87,6 @@ export function useSocket() {
|
|
| 74 |
}
|
| 75 |
}
|
| 76 |
);
|
| 77 |
-
|
| 78 |
-
// Timeout after 5 seconds
|
| 79 |
-
setTimeout(() => {
|
| 80 |
-
reject(new Error("Echo request timeout"));
|
| 81 |
-
}, 5000);
|
| 82 |
});
|
| 83 |
};
|
| 84 |
|
|
@@ -152,6 +160,12 @@ export function useSocket() {
|
|
| 152 |
socket.emit("resetGame", options, callback);
|
| 153 |
};
|
| 154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
|
| 156 |
// Room list management
|
| 157 |
|
|
@@ -177,20 +191,48 @@ export function useSocket() {
|
|
| 177 |
socket.on("roomDeleted", handler);
|
| 178 |
};
|
| 179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
// Room list event cleanup
|
|
|
|
|
|
|
| 181 |
const offRoomCreated = (handler?: any): void => {
|
| 182 |
const socket = getSocket();
|
| 183 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
};
|
| 185 |
|
| 186 |
const offRoomUpdated = (handler?: any): void => {
|
| 187 |
const socket = getSocket();
|
| 188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 189 |
};
|
| 190 |
|
| 191 |
const offRoomDeleted = (handler?: any): void => {
|
| 192 |
const socket = getSocket();
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
};
|
| 195 |
|
| 196 |
|
|
@@ -243,49 +285,87 @@ export function useSocket() {
|
|
| 243 |
};
|
| 244 |
|
| 245 |
// Remove event listeners
|
|
|
|
|
|
|
| 246 |
const offPlayerJoined = (handler?: any): void => {
|
| 247 |
const socket = getSocket();
|
| 248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 249 |
};
|
| 250 |
|
| 251 |
const offPlayerLeft = (handler?: any): void => {
|
| 252 |
const socket = getSocket();
|
| 253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
};
|
| 255 |
|
| 256 |
const offNicknameChanged = (handler?: any): void => {
|
| 257 |
const socket = getSocket();
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
};
|
| 260 |
|
| 261 |
const offRoomJoined = (handler?: any): void => {
|
| 262 |
const socket = getSocket();
|
| 263 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 264 |
};
|
| 265 |
|
| 266 |
const offGameUpdate = (handler?: any): void => {
|
| 267 |
const socket = getSocket();
|
| 268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 269 |
};
|
| 270 |
|
| 271 |
const offGameEnded = (handler?: any): void => {
|
| 272 |
const socket = getSocket();
|
| 273 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
};
|
| 275 |
|
| 276 |
const offGameReset = (handler?: any): void => {
|
| 277 |
const socket = getSocket();
|
| 278 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 279 |
};
|
| 280 |
|
| 281 |
const offPlayerDisconnected = (handler?: any): void => {
|
| 282 |
const socket = getSocket();
|
| 283 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 284 |
};
|
| 285 |
|
| 286 |
const offError = (handler?: any): void => {
|
| 287 |
const socket = getSocket();
|
| 288 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 289 |
};
|
| 290 |
|
| 291 |
// Clean up on unmount
|
|
@@ -311,6 +391,7 @@ export function useSocket() {
|
|
| 311 |
undoMove,
|
| 312 |
redoMove,
|
| 313 |
resetGame,
|
|
|
|
| 314 |
// Event listeners
|
| 315 |
onPlayerJoined,
|
| 316 |
onPlayerLeft,
|
|
@@ -324,6 +405,7 @@ export function useSocket() {
|
|
| 324 |
onRoomCreated,
|
| 325 |
onRoomUpdated,
|
| 326 |
onRoomDeleted,
|
|
|
|
| 327 |
// Event cleanup
|
| 328 |
offPlayerJoined,
|
| 329 |
offPlayerLeft,
|
|
@@ -336,14 +418,20 @@ export function useSocket() {
|
|
| 336 |
offError,
|
| 337 |
offRoomCreated,
|
| 338 |
offRoomUpdated,
|
| 339 |
-
offRoomDeleted
|
|
|
|
| 340 |
};
|
| 341 |
}
|
| 342 |
|
| 343 |
// Export function to manually disconnect (for cleanup)
|
| 344 |
export function disconnectSocket() {
|
| 345 |
if (socketInstance) {
|
|
|
|
|
|
|
| 346 |
socketInstance.disconnect();
|
| 347 |
socketInstance = null;
|
|
|
|
|
|
|
|
|
|
| 348 |
}
|
| 349 |
}
|
|
|
|
| 62 |
return;
|
| 63 |
}
|
| 64 |
|
| 65 |
+
let settled = false;
|
| 66 |
+
|
| 67 |
+
// Timeout after 5 seconds
|
| 68 |
+
const timeoutId = window.setTimeout(() => {
|
| 69 |
+
if (settled) return;
|
| 70 |
+
settled = true;
|
| 71 |
+
reject(new Error("Echo request timeout"));
|
| 72 |
+
}, 5000);
|
| 73 |
+
|
| 74 |
// Send echo request and wait for response
|
| 75 |
socket.emit(
|
| 76 |
"echo",
|
| 77 |
{ message, timestamp: new Date().toISOString() },
|
| 78 |
(response: any) => {
|
| 79 |
+
if (settled) return;
|
| 80 |
+
settled = true;
|
| 81 |
+
clearTimeout(timeoutId);
|
| 82 |
+
|
| 83 |
if (response.error) {
|
| 84 |
reject(new Error(response.error));
|
| 85 |
} else {
|
|
|
|
| 87 |
}
|
| 88 |
}
|
| 89 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
});
|
| 91 |
};
|
| 92 |
|
|
|
|
| 160 |
socket.emit("resetGame", options, callback);
|
| 161 |
};
|
| 162 |
|
| 163 |
+
// Rename room
|
| 164 |
+
const renameRoom = (name: string, callback?: (response: any) => void): void => {
|
| 165 |
+
const socket = getSocket();
|
| 166 |
+
socket.emit("renameRoom", { name }, callback);
|
| 167 |
+
};
|
| 168 |
+
|
| 169 |
|
| 170 |
// Room list management
|
| 171 |
|
|
|
|
| 191 |
socket.on("roomDeleted", handler);
|
| 192 |
};
|
| 193 |
|
| 194 |
+
const onRoomRenamed = (handler: (data: { roomId: string; name: string }) => void): void => {
|
| 195 |
+
const socket = getSocket();
|
| 196 |
+
socket.on("roomRenamed", handler);
|
| 197 |
+
};
|
| 198 |
+
|
| 199 |
// Room list event cleanup
|
| 200 |
+
// Note: If handler is provided, only that specific handler is removed.
|
| 201 |
+
// If handler is undefined, all handlers for that event are removed.
|
| 202 |
const offRoomCreated = (handler?: any): void => {
|
| 203 |
const socket = getSocket();
|
| 204 |
+
if (handler) {
|
| 205 |
+
socket.off("roomCreated", handler);
|
| 206 |
+
} else {
|
| 207 |
+
socket.off("roomCreated");
|
| 208 |
+
}
|
| 209 |
};
|
| 210 |
|
| 211 |
const offRoomUpdated = (handler?: any): void => {
|
| 212 |
const socket = getSocket();
|
| 213 |
+
if (handler) {
|
| 214 |
+
socket.off("roomUpdated", handler);
|
| 215 |
+
} else {
|
| 216 |
+
socket.off("roomUpdated");
|
| 217 |
+
}
|
| 218 |
};
|
| 219 |
|
| 220 |
const offRoomDeleted = (handler?: any): void => {
|
| 221 |
const socket = getSocket();
|
| 222 |
+
if (handler) {
|
| 223 |
+
socket.off("roomDeleted", handler);
|
| 224 |
+
} else {
|
| 225 |
+
socket.off("roomDeleted");
|
| 226 |
+
}
|
| 227 |
+
};
|
| 228 |
+
|
| 229 |
+
const offRoomRenamed = (handler?: any): void => {
|
| 230 |
+
const socket = getSocket();
|
| 231 |
+
if (handler) {
|
| 232 |
+
socket.off("roomRenamed", handler);
|
| 233 |
+
} else {
|
| 234 |
+
socket.off("roomRenamed");
|
| 235 |
+
}
|
| 236 |
};
|
| 237 |
|
| 238 |
|
|
|
|
| 285 |
};
|
| 286 |
|
| 287 |
// Remove event listeners
|
| 288 |
+
// Note: If handler is provided, only that specific handler is removed.
|
| 289 |
+
// If handler is undefined, all handlers for that event are removed.
|
| 290 |
const offPlayerJoined = (handler?: any): void => {
|
| 291 |
const socket = getSocket();
|
| 292 |
+
if (handler) {
|
| 293 |
+
socket.off("playerJoined", handler);
|
| 294 |
+
} else {
|
| 295 |
+
socket.off("playerJoined");
|
| 296 |
+
}
|
| 297 |
};
|
| 298 |
|
| 299 |
const offPlayerLeft = (handler?: any): void => {
|
| 300 |
const socket = getSocket();
|
| 301 |
+
if (handler) {
|
| 302 |
+
socket.off("playerLeft", handler);
|
| 303 |
+
} else {
|
| 304 |
+
socket.off("playerLeft");
|
| 305 |
+
}
|
| 306 |
};
|
| 307 |
|
| 308 |
const offNicknameChanged = (handler?: any): void => {
|
| 309 |
const socket = getSocket();
|
| 310 |
+
if (handler) {
|
| 311 |
+
socket.off("nicknameChanged", handler);
|
| 312 |
+
} else {
|
| 313 |
+
socket.off("nicknameChanged");
|
| 314 |
+
}
|
| 315 |
};
|
| 316 |
|
| 317 |
const offRoomJoined = (handler?: any): void => {
|
| 318 |
const socket = getSocket();
|
| 319 |
+
if (handler) {
|
| 320 |
+
socket.off("roomJoined", handler);
|
| 321 |
+
} else {
|
| 322 |
+
socket.off("roomJoined");
|
| 323 |
+
}
|
| 324 |
};
|
| 325 |
|
| 326 |
const offGameUpdate = (handler?: any): void => {
|
| 327 |
const socket = getSocket();
|
| 328 |
+
if (handler) {
|
| 329 |
+
socket.off("gameUpdate", handler);
|
| 330 |
+
} else {
|
| 331 |
+
socket.off("gameUpdate");
|
| 332 |
+
}
|
| 333 |
};
|
| 334 |
|
| 335 |
const offGameEnded = (handler?: any): void => {
|
| 336 |
const socket = getSocket();
|
| 337 |
+
if (handler) {
|
| 338 |
+
socket.off("gameEnded", handler);
|
| 339 |
+
} else {
|
| 340 |
+
socket.off("gameEnded");
|
| 341 |
+
}
|
| 342 |
};
|
| 343 |
|
| 344 |
const offGameReset = (handler?: any): void => {
|
| 345 |
const socket = getSocket();
|
| 346 |
+
if (handler) {
|
| 347 |
+
socket.off("gameReset", handler);
|
| 348 |
+
} else {
|
| 349 |
+
socket.off("gameReset");
|
| 350 |
+
}
|
| 351 |
};
|
| 352 |
|
| 353 |
const offPlayerDisconnected = (handler?: any): void => {
|
| 354 |
const socket = getSocket();
|
| 355 |
+
if (handler) {
|
| 356 |
+
socket.off("playerDisconnected", handler);
|
| 357 |
+
} else {
|
| 358 |
+
socket.off("playerDisconnected");
|
| 359 |
+
}
|
| 360 |
};
|
| 361 |
|
| 362 |
const offError = (handler?: any): void => {
|
| 363 |
const socket = getSocket();
|
| 364 |
+
if (handler) {
|
| 365 |
+
socket.off("error", handler);
|
| 366 |
+
} else {
|
| 367 |
+
socket.off("error");
|
| 368 |
+
}
|
| 369 |
};
|
| 370 |
|
| 371 |
// Clean up on unmount
|
|
|
|
| 391 |
undoMove,
|
| 392 |
redoMove,
|
| 393 |
resetGame,
|
| 394 |
+
renameRoom,
|
| 395 |
// Event listeners
|
| 396 |
onPlayerJoined,
|
| 397 |
onPlayerLeft,
|
|
|
|
| 405 |
onRoomCreated,
|
| 406 |
onRoomUpdated,
|
| 407 |
onRoomDeleted,
|
| 408 |
+
onRoomRenamed,
|
| 409 |
// Event cleanup
|
| 410 |
offPlayerJoined,
|
| 411 |
offPlayerLeft,
|
|
|
|
| 418 |
offError,
|
| 419 |
offRoomCreated,
|
| 420 |
offRoomUpdated,
|
| 421 |
+
offRoomDeleted,
|
| 422 |
+
offRoomRenamed
|
| 423 |
};
|
| 424 |
}
|
| 425 |
|
| 426 |
// Export function to manually disconnect (for cleanup)
|
| 427 |
export function disconnectSocket() {
|
| 428 |
if (socketInstance) {
|
| 429 |
+
// Remove all listeners before disconnecting to prevent memory leaks
|
| 430 |
+
socketInstance.removeAllListeners();
|
| 431 |
socketInstance.disconnect();
|
| 432 |
socketInstance = null;
|
| 433 |
+
// Reset reactive state
|
| 434 |
+
connected.value = false;
|
| 435 |
+
error.value = null;
|
| 436 |
}
|
| 437 |
}
|
trigo-web/app/src/stores/playerStore.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface PlayerState {
|
|
| 18 |
playerId: string | null; // Socket ID
|
| 19 |
playerColor: "black" | "white" | null; // Player's stone color in current game
|
| 20 |
roomId: string | null; // Current room ID
|
|
|
|
|
|
|
| 21 |
opponentNickname: string | null; // Opponent's nickname
|
| 22 |
connectionStatus: "disconnected" | "connected" | "in-room"; // Connection state
|
| 23 |
}
|
|
@@ -97,6 +99,8 @@ export const usePlayerStore = defineStore("player", {
|
|
| 97 |
playerId: null,
|
| 98 |
playerColor: null,
|
| 99 |
roomId: null,
|
|
|
|
|
|
|
| 100 |
opponentNickname: null,
|
| 101 |
connectionStatus: "disconnected"
|
| 102 |
}),
|
|
@@ -154,13 +158,25 @@ export const usePlayerStore = defineStore("player", {
|
|
| 154 |
* Join a room with the given ID and assigned color
|
| 155 |
* @param roomId - Room ID
|
| 156 |
* @param color - Assigned player color
|
|
|
|
|
|
|
| 157 |
*/
|
| 158 |
-
joinRoom(roomId: string, color: "black" | "white"): void {
|
| 159 |
this.roomId = roomId;
|
|
|
|
|
|
|
| 160 |
this.playerColor = color;
|
| 161 |
this.connectionStatus = "in-room";
|
| 162 |
},
|
| 163 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
/**
|
| 165 |
* Set the opponent's nickname
|
| 166 |
* @param nickname - Opponent's nickname
|
|
@@ -174,6 +190,8 @@ export const usePlayerStore = defineStore("player", {
|
|
| 174 |
*/
|
| 175 |
leaveRoom(): void {
|
| 176 |
this.roomId = null;
|
|
|
|
|
|
|
| 177 |
this.playerColor = null;
|
| 178 |
this.opponentNickname = null;
|
| 179 |
this.connectionStatus = "connected";
|
|
@@ -185,6 +203,8 @@ export const usePlayerStore = defineStore("player", {
|
|
| 185 |
disconnect(): void {
|
| 186 |
this.playerId = null;
|
| 187 |
this.roomId = null;
|
|
|
|
|
|
|
| 188 |
this.playerColor = null;
|
| 189 |
this.opponentNickname = null;
|
| 190 |
this.connectionStatus = "disconnected";
|
|
@@ -198,6 +218,8 @@ export const usePlayerStore = defineStore("player", {
|
|
| 198 |
this.playerId = null;
|
| 199 |
this.playerColor = null;
|
| 200 |
this.roomId = null;
|
|
|
|
|
|
|
| 201 |
this.opponentNickname = null;
|
| 202 |
this.connectionStatus = "disconnected";
|
| 203 |
}
|
|
|
|
| 18 |
playerId: string | null; // Socket ID
|
| 19 |
playerColor: "black" | "white" | null; // Player's stone color in current game
|
| 20 |
roomId: string | null; // Current room ID
|
| 21 |
+
roomName: string | null; // Human-readable room name
|
| 22 |
+
isAdmin: boolean; // Whether player is room admin
|
| 23 |
opponentNickname: string | null; // Opponent's nickname
|
| 24 |
connectionStatus: "disconnected" | "connected" | "in-room"; // Connection state
|
| 25 |
}
|
|
|
|
| 99 |
playerId: null,
|
| 100 |
playerColor: null,
|
| 101 |
roomId: null,
|
| 102 |
+
roomName: null,
|
| 103 |
+
isAdmin: false,
|
| 104 |
opponentNickname: null,
|
| 105 |
connectionStatus: "disconnected"
|
| 106 |
}),
|
|
|
|
| 158 |
* Join a room with the given ID and assigned color
|
| 159 |
* @param roomId - Room ID
|
| 160 |
* @param color - Assigned player color
|
| 161 |
+
* @param roomName - Human-readable room name
|
| 162 |
+
* @param isAdmin - Whether player is room admin
|
| 163 |
*/
|
| 164 |
+
joinRoom(roomId: string, color: "black" | "white", roomName?: string, isAdmin?: boolean): void {
|
| 165 |
this.roomId = roomId;
|
| 166 |
+
this.roomName = roomName || null;
|
| 167 |
+
this.isAdmin = isAdmin || false;
|
| 168 |
this.playerColor = color;
|
| 169 |
this.connectionStatus = "in-room";
|
| 170 |
},
|
| 171 |
|
| 172 |
+
/**
|
| 173 |
+
* Set the room name
|
| 174 |
+
* @param name - New room name
|
| 175 |
+
*/
|
| 176 |
+
setRoomName(name: string): void {
|
| 177 |
+
this.roomName = name;
|
| 178 |
+
},
|
| 179 |
+
|
| 180 |
/**
|
| 181 |
* Set the opponent's nickname
|
| 182 |
* @param nickname - Opponent's nickname
|
|
|
|
| 190 |
*/
|
| 191 |
leaveRoom(): void {
|
| 192 |
this.roomId = null;
|
| 193 |
+
this.roomName = null;
|
| 194 |
+
this.isAdmin = false;
|
| 195 |
this.playerColor = null;
|
| 196 |
this.opponentNickname = null;
|
| 197 |
this.connectionStatus = "connected";
|
|
|
|
| 203 |
disconnect(): void {
|
| 204 |
this.playerId = null;
|
| 205 |
this.roomId = null;
|
| 206 |
+
this.roomName = null;
|
| 207 |
+
this.isAdmin = false;
|
| 208 |
this.playerColor = null;
|
| 209 |
this.opponentNickname = null;
|
| 210 |
this.connectionStatus = "disconnected";
|
|
|
|
| 218 |
this.playerId = null;
|
| 219 |
this.playerColor = null;
|
| 220 |
this.roomId = null;
|
| 221 |
+
this.roomName = null;
|
| 222 |
+
this.isAdmin = false;
|
| 223 |
this.opponentNickname = null;
|
| 224 |
this.connectionStatus = "disconnected";
|
| 225 |
}
|
trigo-web/app/src/views/TrigoView.vue
CHANGED
|
@@ -41,7 +41,23 @@
|
|
| 41 |
<div v-else-if="gameMode === 'vs-people'" class="view-status people-mode">
|
| 42 |
<div class="room-info">
|
| 43 |
<span class="room-label">Room:</span>
|
| 44 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
<button
|
| 46 |
v-if="playerStore.roomId"
|
| 47 |
class="btn-copy-room"
|
|
@@ -128,7 +144,6 @@
|
|
| 128 |
:current-room="playerStore.roomId"
|
| 129 |
:rooms="roomList"
|
| 130 |
:loading="isLoadingRooms"
|
| 131 |
-
:disabled="gameStarted && playerStore.hasOpponent"
|
| 132 |
@create="handleCreateRoom"
|
| 133 |
@select="handleRoomSelect"
|
| 134 |
/>
|
|
@@ -385,6 +400,12 @@
|
|
| 385 |
const { getRoomIdFromHash, updateHash, clearHash, isValidRoomId } = useRoomHash();
|
| 386 |
const isJoiningRoom = ref(false);
|
| 387 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
// Room list state (for VS People mode room selector)
|
| 389 |
const roomList = ref<RoomSummary[]>([]);
|
| 390 |
const isLoadingRooms = ref(false);
|
|
@@ -1069,6 +1090,29 @@
|
|
| 1069 |
};
|
| 1070 |
|
| 1071 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1072 |
// ===== Room Management Functions (VS People Mode) =====
|
| 1073 |
|
| 1074 |
/**
|
|
@@ -1119,7 +1163,7 @@
|
|
| 1119 |
function setupRoomListeners() {
|
| 1120 |
console.log("[TrigoView] Setting up room listeners, socket connected:", socketApi.socket.connected, "socket id:", socketApi.socket.id);
|
| 1121 |
|
| 1122 |
-
|
| 1123 |
console.log("[TrigoView] >>> Received roomCreated event:", data);
|
| 1124 |
console.log("[TrigoView] Current roomList before add:", JSON.stringify(roomList.value));
|
| 1125 |
// Add new room to list if not already present
|
|
@@ -1127,9 +1171,10 @@
|
|
| 1127 |
roomList.value = [...roomList.value, data]; // Use spread to ensure reactivity
|
| 1128 |
console.log("[TrigoView] Added room to list, new count:", roomList.value.length, "rooms:", roomList.value.map(r => r.id));
|
| 1129 |
}
|
| 1130 |
-
}
|
|
|
|
| 1131 |
|
| 1132 |
-
|
| 1133 |
console.log("[TrigoView] >>> Received roomUpdated event:", data);
|
| 1134 |
const index = roomList.value.findIndex(r => r.id === data.id);
|
| 1135 |
if (index >= 0) {
|
|
@@ -1138,25 +1183,60 @@
|
|
| 1138 |
roomList.value = [...roomList.value, data];
|
| 1139 |
}
|
| 1140 |
console.log("[TrigoView] roomList after update:", roomList.value.map(r => r.id));
|
| 1141 |
-
}
|
|
|
|
| 1142 |
|
| 1143 |
-
|
| 1144 |
console.log("[TrigoView] >>> Received roomDeleted event:", data);
|
| 1145 |
roomList.value = roomList.value.filter(r => r.id !== data.roomId);
|
| 1146 |
console.log("[TrigoView] roomList after delete:", roomList.value.map(r => r.id));
|
| 1147 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1148 |
}
|
| 1149 |
|
| 1150 |
function cleanupRoomListeners() {
|
| 1151 |
-
|
| 1152 |
-
|
| 1153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1154 |
}
|
| 1155 |
|
| 1156 |
// Room selector event handlers
|
| 1157 |
async function handleRoomSelect(roomId: string) {
|
| 1158 |
if (playerStore.roomId === roomId) return; // Already in this room
|
| 1159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1160 |
// Leave current room if any
|
| 1161 |
if (playerStore.roomId) {
|
| 1162 |
socketApi.leaveRoom();
|
|
@@ -1168,6 +1248,17 @@
|
|
| 1168 |
}
|
| 1169 |
|
| 1170 |
async function handleCreateRoom() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1171 |
// Leave current room if any
|
| 1172 |
if (playerStore.roomId) {
|
| 1173 |
socketApi.leaveRoom();
|
|
@@ -1226,7 +1317,8 @@
|
|
| 1226 |
return;
|
| 1227 |
}
|
| 1228 |
isJoiningRoom.value = true;
|
| 1229 |
-
|
|
|
|
| 1230 |
|
| 1231 |
try {
|
| 1232 |
console.log("[TrigoView] Waiting for socket connection...");
|
|
@@ -1234,11 +1326,17 @@
|
|
| 1234 |
console.log("[TrigoView] Socket connection ready, calling joinRoom");
|
| 1235 |
|
| 1236 |
socketApi.joinRoom({ nickname: playerStore.nickname }, (response: any) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1237 |
console.log("[TrigoView] joinRoom callback received:", response);
|
| 1238 |
isJoiningRoom.value = false;
|
| 1239 |
|
| 1240 |
if (response.success !== false && response.roomId) {
|
| 1241 |
-
playerStore.joinRoom(response.roomId, response.playerColor);
|
| 1242 |
updateHash(response.roomId);
|
| 1243 |
console.log(`[TrigoView] Room created: ${response.roomId}`);
|
| 1244 |
} else {
|
|
@@ -1247,7 +1345,9 @@
|
|
| 1247 |
}
|
| 1248 |
});
|
| 1249 |
} catch (err) {
|
| 1250 |
-
|
|
|
|
|
|
|
| 1251 |
console.error("[TrigoView] Socket connection failed:", err);
|
| 1252 |
alert("Connection failed. Please check your internet and try again.");
|
| 1253 |
}
|
|
@@ -1260,15 +1360,22 @@
|
|
| 1260 |
async function joinRoomByHash(roomId: string) {
|
| 1261 |
if (isJoiningRoom.value) return;
|
| 1262 |
isJoiningRoom.value = true;
|
|
|
|
| 1263 |
|
| 1264 |
try {
|
| 1265 |
await waitForSocketConnection();
|
| 1266 |
|
| 1267 |
socketApi.joinRoom({ roomId, nickname: playerStore.nickname }, (response: any) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1268 |
isJoiningRoom.value = false;
|
| 1269 |
|
| 1270 |
if (response.success !== false && response.roomId) {
|
| 1271 |
-
playerStore.joinRoom(response.roomId, response.playerColor);
|
| 1272 |
console.log(`[TrigoView] Room joined: ${response.roomId}`);
|
| 1273 |
|
| 1274 |
// Sync game state from server (board shape, moves, etc.)
|
|
@@ -1338,7 +1445,9 @@
|
|
| 1338 |
}
|
| 1339 |
});
|
| 1340 |
} catch (err) {
|
| 1341 |
-
|
|
|
|
|
|
|
| 1342 |
console.error("[TrigoView] Socket connection failed:", err);
|
| 1343 |
alert("Connection failed. Please check your internet and try again.");
|
| 1344 |
}
|
|
@@ -1442,6 +1551,24 @@
|
|
| 1442 |
// Flag to track if VS People mode has been initialized
|
| 1443 |
let vsPeopleModeInitialized = false;
|
| 1444 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1445 |
// Initialize VS People mode - sets up all socket event listeners
|
| 1446 |
const initializeVsPeopleMode = () => {
|
| 1447 |
if (vsPeopleModeInitialized) {
|
|
@@ -1451,9 +1578,10 @@
|
|
| 1451 |
|
| 1452 |
console.log("[TrigoView] Initializing VS People mode...");
|
| 1453 |
vsPeopleModeInitialized = true;
|
|
|
|
| 1454 |
|
| 1455 |
// Listen for nickname changes
|
| 1456 |
-
|
| 1457 |
console.log(
|
| 1458 |
`[TrigoView] Player ${data.playerId} changed nickname: ${data.oldNickname} -> ${data.nickname}`
|
| 1459 |
);
|
|
@@ -1462,10 +1590,11 @@
|
|
| 1462 |
if (data.playerId !== socketApi.socket.id) {
|
| 1463 |
playerStore.setOpponentNickname(data.nickname);
|
| 1464 |
}
|
| 1465 |
-
}
|
|
|
|
| 1466 |
|
| 1467 |
// Listen for game updates (moves, passes, undo, redo)
|
| 1468 |
-
|
| 1469 |
console.log("[TrigoView] Game update received:", data);
|
| 1470 |
|
| 1471 |
// Update current player from server
|
|
@@ -1508,10 +1637,11 @@
|
|
| 1508 |
syncViewportWithGame();
|
| 1509 |
}
|
| 1510 |
}
|
| 1511 |
-
}
|
|
|
|
| 1512 |
|
| 1513 |
// Listen for player joined
|
| 1514 |
-
|
| 1515 |
console.log("[TrigoView] Player joined:", data);
|
| 1516 |
playerStore.setOpponentNickname(data.nickname);
|
| 1517 |
|
|
@@ -1523,30 +1653,34 @@
|
|
| 1523 |
}
|
| 1524 |
console.log("[TrigoView] Game started - opponent joined");
|
| 1525 |
}
|
| 1526 |
-
}
|
|
|
|
| 1527 |
|
| 1528 |
// Listen for player left
|
| 1529 |
-
|
| 1530 |
console.log("[TrigoView] Player left:", data);
|
| 1531 |
playerStore.setOpponentNickname(null);
|
| 1532 |
-
}
|
|
|
|
| 1533 |
|
| 1534 |
// Listen for player disconnected
|
| 1535 |
-
|
| 1536 |
console.log("[TrigoView] Player disconnected:", data);
|
| 1537 |
if (data.playerId !== socketApi.socket.id) {
|
| 1538 |
playerStore.setOpponentNickname(null);
|
| 1539 |
}
|
| 1540 |
-
}
|
|
|
|
| 1541 |
|
| 1542 |
// Listen for game ended
|
| 1543 |
-
|
| 1544 |
console.log("[TrigoView] Game ended:", data);
|
| 1545 |
alert(`Game ended! Winner: ${data.winner || "None"}\nReason: ${data.reason}`);
|
| 1546 |
-
}
|
|
|
|
| 1547 |
|
| 1548 |
// Listen for game reset
|
| 1549 |
-
|
| 1550 |
console.log("[TrigoView] Game reset:", data);
|
| 1551 |
|
| 1552 |
// Get the new board shape from server, or use current
|
|
@@ -1581,12 +1715,14 @@
|
|
| 1581 |
playerStore.playerColor = myPlayer.color;
|
| 1582 |
}
|
| 1583 |
}
|
| 1584 |
-
}
|
|
|
|
| 1585 |
|
| 1586 |
// Listen for errors
|
| 1587 |
-
|
| 1588 |
console.error("[TrigoView] Socket error:", data.message);
|
| 1589 |
-
}
|
|
|
|
| 1590 |
|
| 1591 |
// Setup room list listeners for room selector
|
| 1592 |
setupRoomListeners();
|
|
@@ -1599,8 +1735,11 @@
|
|
| 1599 |
// Listen for browser navigation (back/forward) and URL changes
|
| 1600 |
window.addEventListener("popstate", handleUrlChange);
|
| 1601 |
|
|
|
|
|
|
|
|
|
|
| 1602 |
// Handle socket connection and reconnection
|
| 1603 |
-
|
| 1604 |
console.log("[TrigoView] Socket connected in VS People mode");
|
| 1605 |
|
| 1606 |
// Update player ID and connection status
|
|
@@ -1608,30 +1747,41 @@
|
|
| 1608 |
playerStore.setPlayerId(socketApi.socket.id);
|
| 1609 |
}
|
| 1610 |
|
| 1611 |
-
// Fetch room list for room selector
|
| 1612 |
-
|
|
|
|
|
|
|
|
|
|
| 1613 |
|
| 1614 |
-
//
|
| 1615 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1616 |
console.log("[TrigoView] Initializing room after socket connection");
|
| 1617 |
initializeMultiplayerRoom();
|
| 1618 |
}
|
| 1619 |
-
}
|
|
|
|
| 1620 |
|
| 1621 |
// Handle socket disconnection
|
| 1622 |
-
|
| 1623 |
console.log("[TrigoView] Socket disconnected in VS People mode");
|
|
|
|
| 1624 |
// Don't reset roomId - we want to rejoin on reconnect
|
| 1625 |
if (playerStore.roomId) {
|
| 1626 |
-
playerStore.connectionStatus = "
|
| 1627 |
} else {
|
| 1628 |
playerStore.disconnect();
|
| 1629 |
}
|
| 1630 |
-
}
|
|
|
|
| 1631 |
|
| 1632 |
// If socket is already connected, initialize room immediately
|
| 1633 |
if (socketApi.socket.connected) {
|
| 1634 |
console.log("[TrigoView] Socket already connected, initializing room");
|
|
|
|
| 1635 |
fetchRoomList();
|
| 1636 |
initializeMultiplayerRoom();
|
| 1637 |
}
|
|
@@ -1646,23 +1796,58 @@
|
|
| 1646 |
|
| 1647 |
console.log("[TrigoView] Cleaning up VS People mode...");
|
| 1648 |
vsPeopleModeInitialized = false;
|
|
|
|
| 1649 |
|
| 1650 |
-
|
| 1651 |
-
|
| 1652 |
-
|
| 1653 |
-
|
| 1654 |
-
|
| 1655 |
-
|
| 1656 |
-
|
| 1657 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1658 |
cleanupRoomListeners();
|
| 1659 |
|
| 1660 |
// Remove URL change listener
|
| 1661 |
window.removeEventListener("popstate", handleUrlChange);
|
| 1662 |
|
| 1663 |
-
// Remove socket event listeners
|
| 1664 |
-
|
| 1665 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1666 |
|
| 1667 |
// Reset player store state
|
| 1668 |
playerStore.disconnect();
|
|
@@ -2163,6 +2348,42 @@
|
|
| 2163 |
font-size: 1.1rem;
|
| 2164 |
}
|
| 2165 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2166 |
.btn-copy-room {
|
| 2167 |
padding: 0.25rem 0.5rem;
|
| 2168 |
background-color: transparent;
|
|
|
|
| 41 |
<div v-else-if="gameMode === 'vs-people'" class="view-status people-mode">
|
| 42 |
<div class="room-info">
|
| 43 |
<span class="room-label">Room:</span>
|
| 44 |
+
<input
|
| 45 |
+
v-if="playerStore.isAdmin && playerStore.roomId"
|
| 46 |
+
type="text"
|
| 47 |
+
class="room-name-input"
|
| 48 |
+
:value="playerStore.roomName || ''"
|
| 49 |
+
@blur="handleRoomNameBlur"
|
| 50 |
+
@keyup.enter="($event.target as HTMLInputElement).blur()"
|
| 51 |
+
maxlength="50"
|
| 52 |
+
placeholder="Room name..."
|
| 53 |
+
/>
|
| 54 |
+
<span v-else-if="playerStore.roomId" class="room-name">
|
| 55 |
+
{{ playerStore.roomName || playerStore.roomId }}
|
| 56 |
+
</span>
|
| 57 |
+
<span v-else class="room-code">---</span>
|
| 58 |
+
<span v-if="playerStore.roomId" class="room-id-badge" title="Room ID">
|
| 59 |
+
{{ playerStore.roomId }}
|
| 60 |
+
</span>
|
| 61 |
<button
|
| 62 |
v-if="playerStore.roomId"
|
| 63 |
class="btn-copy-room"
|
|
|
|
| 144 |
:current-room="playerStore.roomId"
|
| 145 |
:rooms="roomList"
|
| 146 |
:loading="isLoadingRooms"
|
|
|
|
| 147 |
@create="handleCreateRoom"
|
| 148 |
@select="handleRoomSelect"
|
| 149 |
/>
|
|
|
|
| 400 |
const { getRoomIdFromHash, updateHash, clearHash, isValidRoomId } = useRoomHash();
|
| 401 |
const isJoiningRoom = ref(false);
|
| 402 |
|
| 403 |
+
// Join attempt counter to ignore stale callbacks (race condition prevention)
|
| 404 |
+
let joinAttemptCounter = 0;
|
| 405 |
+
|
| 406 |
+
// Flag to track if VS People mode is active (guards callbacks after cleanup)
|
| 407 |
+
let vsPeopleModeActive = false;
|
| 408 |
+
|
| 409 |
// Room list state (for VS People mode room selector)
|
| 410 |
const roomList = ref<RoomSummary[]>([]);
|
| 411 |
const isLoadingRooms = ref(false);
|
|
|
|
| 1090 |
};
|
| 1091 |
|
| 1092 |
|
| 1093 |
+
const handleRoomNameBlur = (event: Event) => {
|
| 1094 |
+
const input = event.target as HTMLInputElement;
|
| 1095 |
+
const newName = input.value.trim();
|
| 1096 |
+
|
| 1097 |
+
if (!newName || newName === playerStore.roomName) {
|
| 1098 |
+
// Reset to original value if empty or unchanged
|
| 1099 |
+
input.value = playerStore.roomName || "";
|
| 1100 |
+
return;
|
| 1101 |
+
}
|
| 1102 |
+
|
| 1103 |
+
socketApi.renameRoom(newName, (response: any) => {
|
| 1104 |
+
if (response.success) {
|
| 1105 |
+
console.log(`[TrigoView] Room renamed to: ${response.name}`);
|
| 1106 |
+
} else {
|
| 1107 |
+
console.error("[TrigoView] Failed to rename room:", response.error);
|
| 1108 |
+
// Reset input to original value on failure
|
| 1109 |
+
input.value = playerStore.roomName || "";
|
| 1110 |
+
alert(`Failed to rename room: ${response.error}`);
|
| 1111 |
+
}
|
| 1112 |
+
});
|
| 1113 |
+
};
|
| 1114 |
+
|
| 1115 |
+
|
| 1116 |
// ===== Room Management Functions (VS People Mode) =====
|
| 1117 |
|
| 1118 |
/**
|
|
|
|
| 1163 |
function setupRoomListeners() {
|
| 1164 |
console.log("[TrigoView] Setting up room listeners, socket connected:", socketApi.socket.connected, "socket id:", socketApi.socket.id);
|
| 1165 |
|
| 1166 |
+
socketHandlers.roomCreated = (data: RoomSummary) => {
|
| 1167 |
console.log("[TrigoView] >>> Received roomCreated event:", data);
|
| 1168 |
console.log("[TrigoView] Current roomList before add:", JSON.stringify(roomList.value));
|
| 1169 |
// Add new room to list if not already present
|
|
|
|
| 1171 |
roomList.value = [...roomList.value, data]; // Use spread to ensure reactivity
|
| 1172 |
console.log("[TrigoView] Added room to list, new count:", roomList.value.length, "rooms:", roomList.value.map(r => r.id));
|
| 1173 |
}
|
| 1174 |
+
};
|
| 1175 |
+
socketApi.onRoomCreated(socketHandlers.roomCreated);
|
| 1176 |
|
| 1177 |
+
socketHandlers.roomUpdated = (data: RoomSummary) => {
|
| 1178 |
console.log("[TrigoView] >>> Received roomUpdated event:", data);
|
| 1179 |
const index = roomList.value.findIndex(r => r.id === data.id);
|
| 1180 |
if (index >= 0) {
|
|
|
|
| 1183 |
roomList.value = [...roomList.value, data];
|
| 1184 |
}
|
| 1185 |
console.log("[TrigoView] roomList after update:", roomList.value.map(r => r.id));
|
| 1186 |
+
};
|
| 1187 |
+
socketApi.onRoomUpdated(socketHandlers.roomUpdated);
|
| 1188 |
|
| 1189 |
+
socketHandlers.roomDeleted = (data: { roomId: string }) => {
|
| 1190 |
console.log("[TrigoView] >>> Received roomDeleted event:", data);
|
| 1191 |
roomList.value = roomList.value.filter(r => r.id !== data.roomId);
|
| 1192 |
console.log("[TrigoView] roomList after delete:", roomList.value.map(r => r.id));
|
| 1193 |
+
};
|
| 1194 |
+
socketApi.onRoomDeleted(socketHandlers.roomDeleted);
|
| 1195 |
+
|
| 1196 |
+
socketHandlers.roomRenamed = (data: { roomId: string; name: string }) => {
|
| 1197 |
+
console.log("[TrigoView] >>> Received roomRenamed event:", data);
|
| 1198 |
+
// Update local room name if it's our room
|
| 1199 |
+
if (data.roomId === playerStore.roomId) {
|
| 1200 |
+
playerStore.setRoomName(data.name);
|
| 1201 |
+
}
|
| 1202 |
+
};
|
| 1203 |
+
socketApi.onRoomRenamed(socketHandlers.roomRenamed);
|
| 1204 |
}
|
| 1205 |
|
| 1206 |
function cleanupRoomListeners() {
|
| 1207 |
+
if (socketHandlers.roomCreated) {
|
| 1208 |
+
socketApi.offRoomCreated(socketHandlers.roomCreated);
|
| 1209 |
+
socketHandlers.roomCreated = null;
|
| 1210 |
+
}
|
| 1211 |
+
if (socketHandlers.roomUpdated) {
|
| 1212 |
+
socketApi.offRoomUpdated(socketHandlers.roomUpdated);
|
| 1213 |
+
socketHandlers.roomUpdated = null;
|
| 1214 |
+
}
|
| 1215 |
+
if (socketHandlers.roomDeleted) {
|
| 1216 |
+
socketApi.offRoomDeleted(socketHandlers.roomDeleted);
|
| 1217 |
+
socketHandlers.roomDeleted = null;
|
| 1218 |
+
}
|
| 1219 |
+
if (socketHandlers.roomRenamed) {
|
| 1220 |
+
socketApi.offRoomRenamed(socketHandlers.roomRenamed);
|
| 1221 |
+
socketHandlers.roomRenamed = null;
|
| 1222 |
+
}
|
| 1223 |
}
|
| 1224 |
|
| 1225 |
// Room selector event handlers
|
| 1226 |
async function handleRoomSelect(roomId: string) {
|
| 1227 |
if (playerStore.roomId === roomId) return; // Already in this room
|
| 1228 |
|
| 1229 |
+
// Confirm if currently in a game with opponent
|
| 1230 |
+
if (gameStarted.value && playerStore.hasOpponent) {
|
| 1231 |
+
const confirmed = window.confirm(
|
| 1232 |
+
"You are currently in a game. Leaving will forfeit the game. Continue?"
|
| 1233 |
+
);
|
| 1234 |
+
if (!confirmed) return;
|
| 1235 |
+
|
| 1236 |
+
// Resign the current game before leaving
|
| 1237 |
+
socketApi.resign();
|
| 1238 |
+
}
|
| 1239 |
+
|
| 1240 |
// Leave current room if any
|
| 1241 |
if (playerStore.roomId) {
|
| 1242 |
socketApi.leaveRoom();
|
|
|
|
| 1248 |
}
|
| 1249 |
|
| 1250 |
async function handleCreateRoom() {
|
| 1251 |
+
// Confirm if currently in a game with opponent
|
| 1252 |
+
if (gameStarted.value && playerStore.hasOpponent) {
|
| 1253 |
+
const confirmed = window.confirm(
|
| 1254 |
+
"You are currently in a game. Leaving will forfeit the game. Continue?"
|
| 1255 |
+
);
|
| 1256 |
+
if (!confirmed) return;
|
| 1257 |
+
|
| 1258 |
+
// Resign the current game before leaving
|
| 1259 |
+
socketApi.resign();
|
| 1260 |
+
}
|
| 1261 |
+
|
| 1262 |
// Leave current room if any
|
| 1263 |
if (playerStore.roomId) {
|
| 1264 |
socketApi.leaveRoom();
|
|
|
|
| 1317 |
return;
|
| 1318 |
}
|
| 1319 |
isJoiningRoom.value = true;
|
| 1320 |
+
const currentAttempt = ++joinAttemptCounter;
|
| 1321 |
+
console.log("[TrigoView] Set isJoiningRoom to true, attempt:", currentAttempt);
|
| 1322 |
|
| 1323 |
try {
|
| 1324 |
console.log("[TrigoView] Waiting for socket connection...");
|
|
|
|
| 1326 |
console.log("[TrigoView] Socket connection ready, calling joinRoom");
|
| 1327 |
|
| 1328 |
socketApi.joinRoom({ nickname: playerStore.nickname }, (response: any) => {
|
| 1329 |
+
// Ignore stale callback if mode was cleaned up or new attempt started
|
| 1330 |
+
if (!vsPeopleModeActive || currentAttempt !== joinAttemptCounter) {
|
| 1331 |
+
console.log("[TrigoView] Ignoring stale joinRoom callback, attempt:", currentAttempt, "current:", joinAttemptCounter);
|
| 1332 |
+
return;
|
| 1333 |
+
}
|
| 1334 |
+
|
| 1335 |
console.log("[TrigoView] joinRoom callback received:", response);
|
| 1336 |
isJoiningRoom.value = false;
|
| 1337 |
|
| 1338 |
if (response.success !== false && response.roomId) {
|
| 1339 |
+
playerStore.joinRoom(response.roomId, response.playerColor, response.roomName, response.isAdmin);
|
| 1340 |
updateHash(response.roomId);
|
| 1341 |
console.log(`[TrigoView] Room created: ${response.roomId}`);
|
| 1342 |
} else {
|
|
|
|
| 1345 |
}
|
| 1346 |
});
|
| 1347 |
} catch (err) {
|
| 1348 |
+
if (currentAttempt === joinAttemptCounter) {
|
| 1349 |
+
isJoiningRoom.value = false;
|
| 1350 |
+
}
|
| 1351 |
console.error("[TrigoView] Socket connection failed:", err);
|
| 1352 |
alert("Connection failed. Please check your internet and try again.");
|
| 1353 |
}
|
|
|
|
| 1360 |
async function joinRoomByHash(roomId: string) {
|
| 1361 |
if (isJoiningRoom.value) return;
|
| 1362 |
isJoiningRoom.value = true;
|
| 1363 |
+
const currentAttempt = ++joinAttemptCounter;
|
| 1364 |
|
| 1365 |
try {
|
| 1366 |
await waitForSocketConnection();
|
| 1367 |
|
| 1368 |
socketApi.joinRoom({ roomId, nickname: playerStore.nickname }, (response: any) => {
|
| 1369 |
+
// Ignore stale callback if mode was cleaned up or new attempt started
|
| 1370 |
+
if (!vsPeopleModeActive || currentAttempt !== joinAttemptCounter) {
|
| 1371 |
+
console.log("[TrigoView] Ignoring stale joinRoomByHash callback, attempt:", currentAttempt, "current:", joinAttemptCounter);
|
| 1372 |
+
return;
|
| 1373 |
+
}
|
| 1374 |
+
|
| 1375 |
isJoiningRoom.value = false;
|
| 1376 |
|
| 1377 |
if (response.success !== false && response.roomId) {
|
| 1378 |
+
playerStore.joinRoom(response.roomId, response.playerColor, response.roomName, response.isAdmin);
|
| 1379 |
console.log(`[TrigoView] Room joined: ${response.roomId}`);
|
| 1380 |
|
| 1381 |
// Sync game state from server (board shape, moves, etc.)
|
|
|
|
| 1445 |
}
|
| 1446 |
});
|
| 1447 |
} catch (err) {
|
| 1448 |
+
if (currentAttempt === joinAttemptCounter) {
|
| 1449 |
+
isJoiningRoom.value = false;
|
| 1450 |
+
}
|
| 1451 |
console.error("[TrigoView] Socket connection failed:", err);
|
| 1452 |
alert("Connection failed. Please check your internet and try again.");
|
| 1453 |
}
|
|
|
|
| 1551 |
// Flag to track if VS People mode has been initialized
|
| 1552 |
let vsPeopleModeInitialized = false;
|
| 1553 |
|
| 1554 |
+
// Store handler references for proper cleanup (avoid removing all listeners on singleton socket)
|
| 1555 |
+
const socketHandlers = {
|
| 1556 |
+
nicknameChanged: null as ((data: any) => void) | null,
|
| 1557 |
+
gameUpdate: null as ((data: any) => void) | null,
|
| 1558 |
+
playerJoined: null as ((data: any) => void) | null,
|
| 1559 |
+
playerLeft: null as ((data: any) => void) | null,
|
| 1560 |
+
playerDisconnected: null as ((data: any) => void) | null,
|
| 1561 |
+
gameEnded: null as ((data: any) => void) | null,
|
| 1562 |
+
gameReset: null as ((data: any) => void) | null,
|
| 1563 |
+
error: null as ((data: any) => void) | null,
|
| 1564 |
+
connect: null as (() => void) | null,
|
| 1565 |
+
disconnect: null as (() => void) | null,
|
| 1566 |
+
roomCreated: null as ((data: any) => void) | null,
|
| 1567 |
+
roomUpdated: null as ((data: any) => void) | null,
|
| 1568 |
+
roomDeleted: null as ((data: any) => void) | null,
|
| 1569 |
+
roomRenamed: null as ((data: any) => void) | null
|
| 1570 |
+
};
|
| 1571 |
+
|
| 1572 |
// Initialize VS People mode - sets up all socket event listeners
|
| 1573 |
const initializeVsPeopleMode = () => {
|
| 1574 |
if (vsPeopleModeInitialized) {
|
|
|
|
| 1578 |
|
| 1579 |
console.log("[TrigoView] Initializing VS People mode...");
|
| 1580 |
vsPeopleModeInitialized = true;
|
| 1581 |
+
vsPeopleModeActive = true;
|
| 1582 |
|
| 1583 |
// Listen for nickname changes
|
| 1584 |
+
socketHandlers.nicknameChanged = (data) => {
|
| 1585 |
console.log(
|
| 1586 |
`[TrigoView] Player ${data.playerId} changed nickname: ${data.oldNickname} -> ${data.nickname}`
|
| 1587 |
);
|
|
|
|
| 1590 |
if (data.playerId !== socketApi.socket.id) {
|
| 1591 |
playerStore.setOpponentNickname(data.nickname);
|
| 1592 |
}
|
| 1593 |
+
};
|
| 1594 |
+
socketApi.onNicknameChanged(socketHandlers.nicknameChanged);
|
| 1595 |
|
| 1596 |
// Listen for game updates (moves, passes, undo, redo)
|
| 1597 |
+
socketHandlers.gameUpdate = (data) => {
|
| 1598 |
console.log("[TrigoView] Game update received:", data);
|
| 1599 |
|
| 1600 |
// Update current player from server
|
|
|
|
| 1637 |
syncViewportWithGame();
|
| 1638 |
}
|
| 1639 |
}
|
| 1640 |
+
};
|
| 1641 |
+
socketApi.onGameUpdate(socketHandlers.gameUpdate);
|
| 1642 |
|
| 1643 |
// Listen for player joined
|
| 1644 |
+
socketHandlers.playerJoined = (data) => {
|
| 1645 |
console.log("[TrigoView] Player joined:", data);
|
| 1646 |
playerStore.setOpponentNickname(data.nickname);
|
| 1647 |
|
|
|
|
| 1653 |
}
|
| 1654 |
console.log("[TrigoView] Game started - opponent joined");
|
| 1655 |
}
|
| 1656 |
+
};
|
| 1657 |
+
socketApi.onPlayerJoined(socketHandlers.playerJoined);
|
| 1658 |
|
| 1659 |
// Listen for player left
|
| 1660 |
+
socketHandlers.playerLeft = (data) => {
|
| 1661 |
console.log("[TrigoView] Player left:", data);
|
| 1662 |
playerStore.setOpponentNickname(null);
|
| 1663 |
+
};
|
| 1664 |
+
socketApi.onPlayerLeft(socketHandlers.playerLeft);
|
| 1665 |
|
| 1666 |
// Listen for player disconnected
|
| 1667 |
+
socketHandlers.playerDisconnected = (data) => {
|
| 1668 |
console.log("[TrigoView] Player disconnected:", data);
|
| 1669 |
if (data.playerId !== socketApi.socket.id) {
|
| 1670 |
playerStore.setOpponentNickname(null);
|
| 1671 |
}
|
| 1672 |
+
};
|
| 1673 |
+
socketApi.onPlayerDisconnected(socketHandlers.playerDisconnected);
|
| 1674 |
|
| 1675 |
// Listen for game ended
|
| 1676 |
+
socketHandlers.gameEnded = (data) => {
|
| 1677 |
console.log("[TrigoView] Game ended:", data);
|
| 1678 |
alert(`Game ended! Winner: ${data.winner || "None"}\nReason: ${data.reason}`);
|
| 1679 |
+
};
|
| 1680 |
+
socketApi.onGameEnded(socketHandlers.gameEnded);
|
| 1681 |
|
| 1682 |
// Listen for game reset
|
| 1683 |
+
socketHandlers.gameReset = (data) => {
|
| 1684 |
console.log("[TrigoView] Game reset:", data);
|
| 1685 |
|
| 1686 |
// Get the new board shape from server, or use current
|
|
|
|
| 1715 |
playerStore.playerColor = myPlayer.color;
|
| 1716 |
}
|
| 1717 |
}
|
| 1718 |
+
};
|
| 1719 |
+
socketApi.onGameReset(socketHandlers.gameReset);
|
| 1720 |
|
| 1721 |
// Listen for errors
|
| 1722 |
+
socketHandlers.error = (data) => {
|
| 1723 |
console.error("[TrigoView] Socket error:", data.message);
|
| 1724 |
+
};
|
| 1725 |
+
socketApi.onError(socketHandlers.error);
|
| 1726 |
|
| 1727 |
// Setup room list listeners for room selector
|
| 1728 |
setupRoomListeners();
|
|
|
|
| 1735 |
// Listen for browser navigation (back/forward) and URL changes
|
| 1736 |
window.addEventListener("popstate", handleUrlChange);
|
| 1737 |
|
| 1738 |
+
// Track if we've already initialized on this connection to prevent duplicate calls
|
| 1739 |
+
let hasInitializedOnConnect = false;
|
| 1740 |
+
|
| 1741 |
// Handle socket connection and reconnection
|
| 1742 |
+
socketHandlers.connect = () => {
|
| 1743 |
console.log("[TrigoView] Socket connected in VS People mode");
|
| 1744 |
|
| 1745 |
// Update player ID and connection status
|
|
|
|
| 1747 |
playerStore.setPlayerId(socketApi.socket.id);
|
| 1748 |
}
|
| 1749 |
|
| 1750 |
+
// Fetch room list for room selector (only once per connection)
|
| 1751 |
+
if (!hasInitializedOnConnect) {
|
| 1752 |
+
hasInitializedOnConnect = true;
|
| 1753 |
+
fetchRoomList();
|
| 1754 |
+
}
|
| 1755 |
|
| 1756 |
+
// Handle reconnect: rejoin previous room if we had one
|
| 1757 |
+
if (playerStore.roomId && !isJoiningRoom.value) {
|
| 1758 |
+
console.log("[TrigoView] Reconnecting - attempting to rejoin room:", playerStore.roomId);
|
| 1759 |
+
joinRoomByHash(playerStore.roomId);
|
| 1760 |
+
} else if (!playerStore.roomId && !isJoiningRoom.value) {
|
| 1761 |
+
// Initialize room based on URL hash (only if not already in a room)
|
| 1762 |
console.log("[TrigoView] Initializing room after socket connection");
|
| 1763 |
initializeMultiplayerRoom();
|
| 1764 |
}
|
| 1765 |
+
};
|
| 1766 |
+
socketApi.socket.on("connect", socketHandlers.connect);
|
| 1767 |
|
| 1768 |
// Handle socket disconnection
|
| 1769 |
+
socketHandlers.disconnect = () => {
|
| 1770 |
console.log("[TrigoView] Socket disconnected in VS People mode");
|
| 1771 |
+
hasInitializedOnConnect = false; // Reset for next connection
|
| 1772 |
// Don't reset roomId - we want to rejoin on reconnect
|
| 1773 |
if (playerStore.roomId) {
|
| 1774 |
+
playerStore.connectionStatus = "disconnected"; // Disconnected but retain room info for reconnect
|
| 1775 |
} else {
|
| 1776 |
playerStore.disconnect();
|
| 1777 |
}
|
| 1778 |
+
};
|
| 1779 |
+
socketApi.socket.on("disconnect", socketHandlers.disconnect);
|
| 1780 |
|
| 1781 |
// If socket is already connected, initialize room immediately
|
| 1782 |
if (socketApi.socket.connected) {
|
| 1783 |
console.log("[TrigoView] Socket already connected, initializing room");
|
| 1784 |
+
hasInitializedOnConnect = true;
|
| 1785 |
fetchRoomList();
|
| 1786 |
initializeMultiplayerRoom();
|
| 1787 |
}
|
|
|
|
| 1796 |
|
| 1797 |
console.log("[TrigoView] Cleaning up VS People mode...");
|
| 1798 |
vsPeopleModeInitialized = false;
|
| 1799 |
+
vsPeopleModeActive = false;
|
| 1800 |
|
| 1801 |
+
// Increment join attempt counter to invalidate any in-flight callbacks
|
| 1802 |
+
joinAttemptCounter++;
|
| 1803 |
+
|
| 1804 |
+
// Remove event listeners with stored handler references
|
| 1805 |
+
if (socketHandlers.nicknameChanged) {
|
| 1806 |
+
socketApi.offNicknameChanged(socketHandlers.nicknameChanged);
|
| 1807 |
+
socketHandlers.nicknameChanged = null;
|
| 1808 |
+
}
|
| 1809 |
+
if (socketHandlers.gameUpdate) {
|
| 1810 |
+
socketApi.offGameUpdate(socketHandlers.gameUpdate);
|
| 1811 |
+
socketHandlers.gameUpdate = null;
|
| 1812 |
+
}
|
| 1813 |
+
if (socketHandlers.playerJoined) {
|
| 1814 |
+
socketApi.offPlayerJoined(socketHandlers.playerJoined);
|
| 1815 |
+
socketHandlers.playerJoined = null;
|
| 1816 |
+
}
|
| 1817 |
+
if (socketHandlers.playerLeft) {
|
| 1818 |
+
socketApi.offPlayerLeft(socketHandlers.playerLeft);
|
| 1819 |
+
socketHandlers.playerLeft = null;
|
| 1820 |
+
}
|
| 1821 |
+
if (socketHandlers.playerDisconnected) {
|
| 1822 |
+
socketApi.offPlayerDisconnected(socketHandlers.playerDisconnected);
|
| 1823 |
+
socketHandlers.playerDisconnected = null;
|
| 1824 |
+
}
|
| 1825 |
+
if (socketHandlers.gameEnded) {
|
| 1826 |
+
socketApi.offGameEnded(socketHandlers.gameEnded);
|
| 1827 |
+
socketHandlers.gameEnded = null;
|
| 1828 |
+
}
|
| 1829 |
+
if (socketHandlers.gameReset) {
|
| 1830 |
+
socketApi.offGameReset(socketHandlers.gameReset);
|
| 1831 |
+
socketHandlers.gameReset = null;
|
| 1832 |
+
}
|
| 1833 |
+
if (socketHandlers.error) {
|
| 1834 |
+
socketApi.offError(socketHandlers.error);
|
| 1835 |
+
socketHandlers.error = null;
|
| 1836 |
+
}
|
| 1837 |
cleanupRoomListeners();
|
| 1838 |
|
| 1839 |
// Remove URL change listener
|
| 1840 |
window.removeEventListener("popstate", handleUrlChange);
|
| 1841 |
|
| 1842 |
+
// Remove socket event listeners with stored handler references
|
| 1843 |
+
if (socketHandlers.connect) {
|
| 1844 |
+
socketApi.socket.off("connect", socketHandlers.connect);
|
| 1845 |
+
socketHandlers.connect = null;
|
| 1846 |
+
}
|
| 1847 |
+
if (socketHandlers.disconnect) {
|
| 1848 |
+
socketApi.socket.off("disconnect", socketHandlers.disconnect);
|
| 1849 |
+
socketHandlers.disconnect = null;
|
| 1850 |
+
}
|
| 1851 |
|
| 1852 |
// Reset player store state
|
| 1853 |
playerStore.disconnect();
|
|
|
|
| 2348 |
font-size: 1.1rem;
|
| 2349 |
}
|
| 2350 |
|
| 2351 |
+
.room-name {
|
| 2352 |
+
color: #e0e0e0;
|
| 2353 |
+
font-weight: 600;
|
| 2354 |
+
font-size: 1rem;
|
| 2355 |
+
max-width: 150px;
|
| 2356 |
+
overflow: hidden;
|
| 2357 |
+
text-overflow: ellipsis;
|
| 2358 |
+
white-space: nowrap;
|
| 2359 |
+
}
|
| 2360 |
+
|
| 2361 |
+
.room-name-input {
|
| 2362 |
+
background: rgba(0, 0, 0, 0.3);
|
| 2363 |
+
border: 1px solid rgba(255, 255, 255, 0.3);
|
| 2364 |
+
border-radius: 4px;
|
| 2365 |
+
color: #e0e0e0;
|
| 2366 |
+
font-weight: 600;
|
| 2367 |
+
font-size: 1rem;
|
| 2368 |
+
padding: 0.2rem 0.5rem;
|
| 2369 |
+
max-width: 150px;
|
| 2370 |
+
outline: none;
|
| 2371 |
+
|
| 2372 |
+
&:focus {
|
| 2373 |
+
border-color: #e94560;
|
| 2374 |
+
background: rgba(0, 0, 0, 0.5);
|
| 2375 |
+
}
|
| 2376 |
+
}
|
| 2377 |
+
|
| 2378 |
+
.room-id-badge {
|
| 2379 |
+
font-family: monospace;
|
| 2380 |
+
font-size: 0.75rem;
|
| 2381 |
+
color: rgba(255, 255, 255, 0.5);
|
| 2382 |
+
padding: 0.15rem 0.4rem;
|
| 2383 |
+
background: rgba(0, 0, 0, 0.2);
|
| 2384 |
+
border-radius: 3px;
|
| 2385 |
+
}
|
| 2386 |
+
|
| 2387 |
.btn-copy-room {
|
| 2388 |
padding: 0.25rem 0.5rem;
|
| 2389 |
background-color: transparent;
|
trigo-web/backend/dist/backend/src/services/gameManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"gameManager.d.ts","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAuB,MAAM,yBAAyB,CAAC;AAEzE,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,qBAAa,WAAW;IACvB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,iBAAiB,CAAoC;;IAM7D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;IA4C5H,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;
|
|
|
|
| 1 |
+
{"version":3,"file":"gameManager.d.ts","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/backend/src/services/gameManager.js
CHANGED
|
@@ -54,14 +54,19 @@ class GameManager {
|
|
| 54 |
if (!room) {
|
| 55 |
return null;
|
| 56 |
}
|
| 57 |
-
|
| 58 |
-
|
|
|
|
| 59 |
return null; // Room is full
|
| 60 |
}
|
| 61 |
// Try to assign preferred color if specified
|
| 62 |
-
const firstPlayer =
|
| 63 |
let assignedColor;
|
| 64 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
// Preferred color is available
|
| 66 |
assignedColor = preferredColor;
|
| 67 |
}
|
|
@@ -69,6 +74,12 @@ class GameManager {
|
|
| 69 |
// Assign opposite of first player's color
|
| 70 |
assignedColor = firstPlayer.color === "black" ? "white" : "black";
|
| 71 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
room.players[playerId] = {
|
| 73 |
id: playerId,
|
| 74 |
nickname,
|
|
@@ -77,7 +88,7 @@ class GameManager {
|
|
| 77 |
};
|
| 78 |
this.playerRoomMap.set(playerId, roomId);
|
| 79 |
// Start the game when second player joins
|
| 80 |
-
if (
|
| 81 |
room.gameState.gameStatus = "playing";
|
| 82 |
room.startedAt = new Date();
|
| 83 |
}
|
|
|
|
| 54 |
if (!room) {
|
| 55 |
return null;
|
| 56 |
}
|
| 57 |
+
// Count only connected players
|
| 58 |
+
const connectedPlayers = Object.values(room.players).filter(p => p.connected);
|
| 59 |
+
if (connectedPlayers.length >= 2) {
|
| 60 |
return null; // Room is full
|
| 61 |
}
|
| 62 |
// Try to assign preferred color if specified
|
| 63 |
+
const firstPlayer = connectedPlayers[0];
|
| 64 |
let assignedColor;
|
| 65 |
+
if (!firstPlayer) {
|
| 66 |
+
// No connected players, assign preferred or default to black
|
| 67 |
+
assignedColor = preferredColor || "black";
|
| 68 |
+
}
|
| 69 |
+
else if (preferredColor && preferredColor !== firstPlayer.color) {
|
| 70 |
// Preferred color is available
|
| 71 |
assignedColor = preferredColor;
|
| 72 |
}
|
|
|
|
| 74 |
// Assign opposite of first player's color
|
| 75 |
assignedColor = firstPlayer.color === "black" ? "white" : "black";
|
| 76 |
}
|
| 77 |
+
// Clean up old disconnected player entries with the same color
|
| 78 |
+
for (const [pid, player] of Object.entries(room.players)) {
|
| 79 |
+
if (!player.connected && player.color === assignedColor) {
|
| 80 |
+
delete room.players[pid];
|
| 81 |
+
}
|
| 82 |
+
}
|
| 83 |
room.players[playerId] = {
|
| 84 |
id: playerId,
|
| 85 |
nickname,
|
|
|
|
| 88 |
};
|
| 89 |
this.playerRoomMap.set(playerId, roomId);
|
| 90 |
// Start the game when second player joins
|
| 91 |
+
if (connectedPlayers.length === 1) {
|
| 92 |
room.gameState.gameStatus = "playing";
|
| 93 |
room.startedAt = new Date();
|
| 94 |
}
|
trigo-web/backend/dist/backend/src/services/gameManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"gameManager.js","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAEpC,kDAAyE;AAwBzE,MAAa,WAAW;IAKvB;QAJQ,UAAK,GAA0B,IAAI,GAAG,EAAE,CAAC;QACzC,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC/C,sBAAiB,GAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sBAAsB;QAGnF,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAuB,EAAE,cAAkC;QACzG,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAEnD,qDAAqD;QACrD,MAAM,WAAW,GAAG,cAAc,IAAI,OAAO,CAAC;QAE9C,MAAM,IAAI,GAAa;YACtB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,QAAQ,EAAE,wBAAwB;YAC3C,OAAO,EAAE;gBACR,CAAC,QAAQ,CAAC,EAAE;oBACX,EAAE,EAAE,QAAQ;oBACZ,QAAQ;oBACR,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,IAAI;iBACf;aACD;YACD,IAAI,EAAE,IAAI,gBAAS,CAAC,KAAK,EAAE;gBAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;gBACzD,CAAC;gBACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACvB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;oBACjB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;gBACtC,CAAC;aACD,CAAC;YACF,SAAS,EAAE;gBACV,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,IAAI;aACZ;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,eAAe,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,cAAkC;QAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,CAAC,eAAe;QAC7B,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,aAAgC,CAAC;QAErC,IAAI,cAAc,IAAI,cAAc,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YAC5D,+BAA+B;YAC/B,aAAa,GAAG,cAAc,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,0CAA0C;YAC1C,aAAa,GAAG,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;YACxB,EAAE,EAAE,QAAQ;YACZ,QAAQ;YACR,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,0CAA0C;QAC1C,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,QAAgB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpC,kCAAkC;QAClC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,iCAAiC,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAyC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEnD,kCAAkC;QAClC,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAS,CAAC,KAAK,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEnD,kCAAkC;QAClC,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,QAAgB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEtB,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAErE,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAGD;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAGD;;;OAGG;IACH,SAAS,CACR,MAAc,EACd,OAAe,EACf,OAGC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAE9D,yBAAyB;QACzB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;QACxE,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACvC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;QAE3C,6CAA6C;QAC7C,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvD,CAAC;YACF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QAED,2EAA2E;QAC3E,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IACC,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAC9B,CAAC;gBACF,uCAAuC;gBACvC,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAS,CAAC,UAAU,EAAE;oBACrC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBACzD,CAAC;oBACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;wBACvB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;oBACnD,CAAC;oBACD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;wBACjB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;oBACtC,CAAC;iBACD,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,gCAAgC,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3G,CAAC;iBAAM,CAAC;gBACP,yBAAyB;gBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,yBAAyB,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;aAAM,CAAC;YACP,gCAAgC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,yBAAyB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClD,OAAO,YAAY,KAAK,gBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAc;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACd,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAE3C,mBAAmB;QACnB,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;QACjC,CAAC;aAAM,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,wDAAwD;YACxD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;QACvC,OAAO,CAAC,GAAG,CACV,QAAQ,MAAM,kBAAkB,SAAS,CAAC,KAAK,YAAY,SAAS,CAAC,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAC9G,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAAC,MAAc;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAErC,qBAAqB;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEnD,4BAA4B;QAC5B,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,eAAQ,CAAC,IAAI,EAAE,CAAC;YAC9E,wCAAwC;YACxC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,CAClD,CAAC;IACH,CAAC;IAEO,cAAc;QACrB,OAAO,IAAA,SAAM,GAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,CAAC;CACD;AAxZD,kCAwZC"}
|
|
|
|
| 1 |
+
{"version":3,"file":"gameManager.js","sourceRoot":"","sources":["../../../../src/services/gameManager.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/backend/src/sockets/gameSocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"gameSocket.d.ts","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
|
|
| 1 |
+
{"version":3,"file":"gameSocket.d.ts","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAetD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,QAsfvF"}
|
trigo-web/backend/dist/backend/src/sockets/gameSocket.js
CHANGED
|
@@ -1,8 +1,34 @@
|
|
| 1 |
"use strict";
|
| 2 |
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
exports.setupSocketHandlers = setupSocketHandlers;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
function setupSocketHandlers(io, socket, gameManager) {
|
| 5 |
console.log(`Setting up socket handlers for ${socket.id}`);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
// Join room
|
| 7 |
socket.on("joinRoom", (data, callback) => {
|
| 8 |
console.log("[gameSocket] joinRoom event received:", {
|
|
@@ -30,8 +56,8 @@ function setupSocketHandlers(io, socket, gameManager) {
|
|
| 30 |
}
|
| 31 |
return;
|
| 32 |
}
|
| 33 |
-
const
|
| 34 |
-
if (
|
| 35 |
// Room is full
|
| 36 |
if (callback) {
|
| 37 |
callback({
|
|
@@ -50,6 +76,11 @@ function setupSocketHandlers(io, socket, gameManager) {
|
|
| 50 |
}
|
| 51 |
if (room) {
|
| 52 |
socket.join(room.id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
// Get complete game data for frontend
|
| 54 |
const currentPlayer = gameManager.getCurrentPlayer(room.id);
|
| 55 |
const stats = gameManager.getGameStats(room.id);
|
|
@@ -97,10 +128,22 @@ function setupSocketHandlers(io, socket, gameManager) {
|
|
| 97 |
socket.emit("roomJoined", response);
|
| 98 |
}
|
| 99 |
// Notify other players
|
|
|
|
| 100 |
socket.to(room.id).emit("playerJoined", {
|
| 101 |
playerId: socket.id,
|
| 102 |
nickname: nickname
|
| 103 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
console.log(`Player ${socket.id} ${roomId ? "joined" : "created"} room ${room.id}`);
|
| 105 |
}
|
| 106 |
else {
|
|
@@ -129,12 +172,21 @@ function setupSocketHandlers(io, socket, gameManager) {
|
|
| 129 |
socket.on("leaveRoom", () => {
|
| 130 |
const room = gameManager.getPlayerRoom(socket.id);
|
| 131 |
if (room) {
|
|
|
|
| 132 |
socket.leave(room.id);
|
| 133 |
gameManager.leaveRoom(room.id, socket.id);
|
| 134 |
-
// Notify others
|
| 135 |
-
socket.to(
|
| 136 |
playerId: socket.id
|
| 137 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
}
|
| 139 |
});
|
| 140 |
// Game moves
|
|
@@ -374,8 +426,20 @@ function setupSocketHandlers(io, socket, gameManager) {
|
|
| 374 |
socket.on("disconnect", () => {
|
| 375 |
console.log(`Client disconnected: ${socket.id}`);
|
| 376 |
const room = gameManager.getPlayerRoom(socket.id);
|
|
|
|
| 377 |
if (room) {
|
|
|
|
|
|
|
| 378 |
gameManager.leaveRoom(room.id, socket.id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 379 |
socket.to(room.id).emit("playerDisconnected", {
|
| 380 |
playerId: socket.id
|
| 381 |
});
|
|
|
|
| 1 |
"use strict";
|
| 2 |
Object.defineProperty(exports, "__esModule", { value: true });
|
| 3 |
exports.setupSocketHandlers = setupSocketHandlers;
|
| 4 |
+
// Helper to get room summary for room list
|
| 5 |
+
function getRoomSummary(room) {
|
| 6 |
+
const connectedPlayers = Object.values(room.players).filter((p) => p.connected);
|
| 7 |
+
return {
|
| 8 |
+
id: room.id,
|
| 9 |
+
playerCount: connectedPlayers.length,
|
| 10 |
+
maxPlayers: 2,
|
| 11 |
+
status: room.gameState.gameStatus,
|
| 12 |
+
isFull: connectedPlayers.length >= 2,
|
| 13 |
+
createdAt: room.createdAt.toISOString()
|
| 14 |
+
};
|
| 15 |
+
}
|
| 16 |
function setupSocketHandlers(io, socket, gameManager) {
|
| 17 |
console.log(`Setting up socket handlers for ${socket.id}`);
|
| 18 |
+
// List available rooms
|
| 19 |
+
socket.on("listRooms", (callback) => {
|
| 20 |
+
console.log("[gameSocket] listRooms request from:", socket.id);
|
| 21 |
+
const rooms = gameManager.getActiveRooms();
|
| 22 |
+
const roomList = rooms.map(room => getRoomSummary(room));
|
| 23 |
+
console.log("[gameSocket] Returning", roomList.length, "rooms:", roomList.map(r => `${r.id}(${r.playerCount}p)`));
|
| 24 |
+
// Debug: show detailed player state for each room
|
| 25 |
+
rooms.forEach(room => {
|
| 26 |
+
console.log(`[gameSocket] Room ${room.id} detailed state:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
|
| 27 |
+
});
|
| 28 |
+
if (callback) {
|
| 29 |
+
callback({ success: true, rooms: roomList });
|
| 30 |
+
}
|
| 31 |
+
});
|
| 32 |
// Join room
|
| 33 |
socket.on("joinRoom", (data, callback) => {
|
| 34 |
console.log("[gameSocket] joinRoom event received:", {
|
|
|
|
| 56 |
}
|
| 57 |
return;
|
| 58 |
}
|
| 59 |
+
const connectedPlayers = Object.values(existingRoom.players).filter((p) => p.connected);
|
| 60 |
+
if (connectedPlayers.length >= 2) {
|
| 61 |
// Room is full
|
| 62 |
if (callback) {
|
| 63 |
callback({
|
|
|
|
| 76 |
}
|
| 77 |
if (room) {
|
| 78 |
socket.join(room.id);
|
| 79 |
+
// Debug: Log socket.io room membership and player state
|
| 80 |
+
const roomSockets = io.sockets.adapter.rooms.get(room.id);
|
| 81 |
+
console.log(`[gameSocket] Socket ${socket.id} joined room ${room.id}`);
|
| 82 |
+
console.log(`[gameSocket] Room ${room.id} now has sockets:`, roomSockets ? Array.from(roomSockets) : []);
|
| 83 |
+
console.log(`[gameSocket] Room ${room.id} players:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
|
| 84 |
// Get complete game data for frontend
|
| 85 |
const currentPlayer = gameManager.getCurrentPlayer(room.id);
|
| 86 |
const stats = gameManager.getGameStats(room.id);
|
|
|
|
| 128 |
socket.emit("roomJoined", response);
|
| 129 |
}
|
| 130 |
// Notify other players
|
| 131 |
+
console.log(`[gameSocket] Broadcasting playerJoined to room ${room.id} (excluding ${socket.id})`);
|
| 132 |
socket.to(room.id).emit("playerJoined", {
|
| 133 |
playerId: socket.id,
|
| 134 |
nickname: nickname
|
| 135 |
});
|
| 136 |
+
console.log(`[gameSocket] playerJoined broadcast sent`);
|
| 137 |
+
// Broadcast room update to all sockets (for room list)
|
| 138 |
+
const roomSummary = getRoomSummary(room);
|
| 139 |
+
if (roomId) {
|
| 140 |
+
// Joined existing room
|
| 141 |
+
io.emit("roomUpdated", roomSummary);
|
| 142 |
+
}
|
| 143 |
+
else {
|
| 144 |
+
// Created new room
|
| 145 |
+
io.emit("roomCreated", roomSummary);
|
| 146 |
+
}
|
| 147 |
console.log(`Player ${socket.id} ${roomId ? "joined" : "created"} room ${room.id}`);
|
| 148 |
}
|
| 149 |
else {
|
|
|
|
| 172 |
socket.on("leaveRoom", () => {
|
| 173 |
const room = gameManager.getPlayerRoom(socket.id);
|
| 174 |
if (room) {
|
| 175 |
+
const roomId = room.id;
|
| 176 |
socket.leave(room.id);
|
| 177 |
gameManager.leaveRoom(room.id, socket.id);
|
| 178 |
+
// Notify others in room
|
| 179 |
+
socket.to(roomId).emit("playerLeft", {
|
| 180 |
playerId: socket.id
|
| 181 |
});
|
| 182 |
+
// Broadcast room update or deletion to all sockets
|
| 183 |
+
const updatedRoom = gameManager.getRoom(roomId);
|
| 184 |
+
if (updatedRoom) {
|
| 185 |
+
io.emit("roomUpdated", getRoomSummary(updatedRoom));
|
| 186 |
+
}
|
| 187 |
+
else {
|
| 188 |
+
io.emit("roomDeleted", { roomId });
|
| 189 |
+
}
|
| 190 |
}
|
| 191 |
});
|
| 192 |
// Game moves
|
|
|
|
| 426 |
socket.on("disconnect", () => {
|
| 427 |
console.log(`Client disconnected: ${socket.id}`);
|
| 428 |
const room = gameManager.getPlayerRoom(socket.id);
|
| 429 |
+
console.log(`[disconnect] Player ${socket.id} room:`, room ? room.id : 'none');
|
| 430 |
if (room) {
|
| 431 |
+
console.log(`[disconnect] Room ${room.id} players BEFORE leave:`, Object.entries(room.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
|
| 432 |
+
const roomId = room.id;
|
| 433 |
gameManager.leaveRoom(room.id, socket.id);
|
| 434 |
+
const updatedRoom = gameManager.getRoom(roomId);
|
| 435 |
+
if (updatedRoom) {
|
| 436 |
+
console.log(`[disconnect] Room ${roomId} players AFTER leave:`, Object.entries(updatedRoom.players).map(([id, p]) => `${id.slice(-6)}:${p.color}:${p.connected}`));
|
| 437 |
+
io.emit("roomUpdated", getRoomSummary(updatedRoom));
|
| 438 |
+
}
|
| 439 |
+
else {
|
| 440 |
+
console.log(`[disconnect] Room ${roomId} deleted`);
|
| 441 |
+
io.emit("roomDeleted", { roomId });
|
| 442 |
+
}
|
| 443 |
socket.to(room.id).emit("playerDisconnected", {
|
| 444 |
playerId: socket.id
|
| 445 |
});
|
trigo-web/backend/dist/backend/src/sockets/gameSocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"gameSocket.js","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"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"}
|
|
|
|
| 1 |
+
{"version":3,"file":"gameSocket.js","sourceRoot":"","sources":["../../../../src/sockets/gameSocket.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/inc/mctsAgent.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export declare class MCTSAgent {
|
|
| 30 |
private treeAgent;
|
| 31 |
private evaluationAgent;
|
| 32 |
private config;
|
|
|
|
| 33 |
constructor(treeAgent: TrigoTreeAgent, evaluationAgent: TrigoEvaluationAgent, config?: Partial<MCTSConfig>);
|
| 34 |
/**
|
| 35 |
* Select best move using MCTS
|
|
@@ -47,12 +48,16 @@ export declare class MCTSAgent {
|
|
| 47 |
/**
|
| 48 |
* Run a single MCTS simulation
|
| 49 |
* Select -> Expand & Evaluate -> Backup
|
|
|
|
|
|
|
|
|
|
| 50 |
*/
|
| 51 |
private runSimulation;
|
| 52 |
/**
|
| 53 |
* Selection phase: Traverse tree using PUCT
|
| 54 |
*
|
| 55 |
* @param root Root node to start selection from
|
|
|
|
| 56 |
* @returns Leaf node and path taken
|
| 57 |
*/
|
| 58 |
private select;
|
|
@@ -60,12 +65,23 @@ export declare class MCTSAgent {
|
|
| 60 |
* Expand and evaluate leaf node using neural networks
|
| 61 |
*
|
| 62 |
* @param node Leaf node to expand
|
|
|
|
| 63 |
* @returns Value estimate from evaluation network
|
| 64 |
*/
|
| 65 |
private expandAndEvaluate;
|
| 66 |
/**
|
| 67 |
* Backup phase: Propagate value up the tree
|
| 68 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
* @param path Path from root to leaf
|
| 70 |
* @param value Value to propagate (white-positive: positive = white winning)
|
| 71 |
*/
|
|
@@ -109,6 +125,9 @@ export declare class MCTSAgent {
|
|
| 109 |
* Add Dirichlet noise to prior probabilities at root
|
| 110 |
* P(s,a) = (1 - ε) * p_a + ε * η_a
|
| 111 |
* where η ~ Dir(α)
|
|
|
|
|
|
|
|
|
|
| 112 |
*/
|
| 113 |
private addDirichletNoise;
|
| 114 |
/**
|
|
@@ -120,16 +139,46 @@ export declare class MCTSAgent {
|
|
| 120 |
* Sample from standard normal distribution (Box-Muller transform)
|
| 121 |
*/
|
| 122 |
private randomNormal;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
/**
|
| 124 |
* Create a new MCTS node
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
*/
|
| 126 |
private createNode;
|
| 127 |
/**
|
| 128 |
* Encode move to string key for storage in maps
|
|
|
|
| 129 |
*/
|
| 130 |
private encodeAction;
|
| 131 |
/**
|
| 132 |
* Decode string key back to move
|
|
|
|
|
|
|
| 133 |
*/
|
| 134 |
private decodeAction;
|
| 135 |
}
|
|
|
|
| 30 |
private treeAgent;
|
| 31 |
private evaluationAgent;
|
| 32 |
private config;
|
| 33 |
+
debugMode: boolean;
|
| 34 |
constructor(treeAgent: TrigoTreeAgent, evaluationAgent: TrigoEvaluationAgent, config?: Partial<MCTSConfig>);
|
| 35 |
/**
|
| 36 |
* Select best move using MCTS
|
|
|
|
| 48 |
/**
|
| 49 |
* Run a single MCTS simulation
|
| 50 |
* Select -> Expand & Evaluate -> Backup
|
| 51 |
+
*
|
| 52 |
+
* Memory optimization: Clone state once at start, mutate along path.
|
| 53 |
+
* This reduces memory from O(nodes) to O(simulations).
|
| 54 |
*/
|
| 55 |
private runSimulation;
|
| 56 |
/**
|
| 57 |
* Selection phase: Traverse tree using PUCT
|
| 58 |
*
|
| 59 |
* @param root Root node to start selection from
|
| 60 |
+
* @param workingState Mutable game state that gets updated along the path
|
| 61 |
* @returns Leaf node and path taken
|
| 62 |
*/
|
| 63 |
private select;
|
|
|
|
| 65 |
* Expand and evaluate leaf node using neural networks
|
| 66 |
*
|
| 67 |
* @param node Leaf node to expand
|
| 68 |
+
* @param workingState Current game state at this node (passed from simulation)
|
| 69 |
* @returns Value estimate from evaluation network
|
| 70 |
*/
|
| 71 |
private expandAndEvaluate;
|
| 72 |
/**
|
| 73 |
* Backup phase: Propagate value up the tree
|
| 74 |
*
|
| 75 |
+
* White-positive minimax propagation:
|
| 76 |
+
* - All Q-values represent White's advantage (positive = White winning)
|
| 77 |
+
* - When all children are terminal, mark parent as terminal with minimax value:
|
| 78 |
+
* * White's turn: terminal_value = max(children terminal values)
|
| 79 |
+
* * Black's turn: terminal_value = min(children terminal values)
|
| 80 |
+
*
|
| 81 |
+
* Improvements (based on GPT-5.1 review):
|
| 82 |
+
* - Uses stored playerToMove instead of computing from depth
|
| 83 |
+
* - Uses stored depth instead of recomputing via parent walk
|
| 84 |
+
*
|
| 85 |
* @param path Path from root to leaf
|
| 86 |
* @param value Value to propagate (white-positive: positive = white winning)
|
| 87 |
*/
|
|
|
|
| 125 |
* Add Dirichlet noise to prior probabilities at root
|
| 126 |
* P(s,a) = (1 - ε) * p_a + ε * η_a
|
| 127 |
* where η ~ Dir(α)
|
| 128 |
+
*
|
| 129 |
+
* Note: Pass move is excluded from noise to prevent exploration of
|
| 130 |
+
* clearly suboptimal opening passes.
|
| 131 |
*/
|
| 132 |
private addDirichletNoise;
|
| 133 |
/**
|
|
|
|
| 139 |
* Sample from standard normal distribution (Box-Muller transform)
|
| 140 |
*/
|
| 141 |
private randomNormal;
|
| 142 |
+
/**
|
| 143 |
+
* Check if game state is terminal and return value if so
|
| 144 |
+
*
|
| 145 |
+
* Terminal conditions (checked in order of cost):
|
| 146 |
+
* 1. Game already finished (double-pass or resignation) - CHEAPEST
|
| 147 |
+
* 2. Board coverage > 50% AND naturally terminal (calls isNaturallyTerminal) - EXPENSIVE
|
| 148 |
+
*
|
| 149 |
+
* NOTE: The coverage check (> 50%) is an optimization to avoid expensive
|
| 150 |
+
* territory calculations on sparse boards where natural termination is unlikely.
|
| 151 |
+
*
|
| 152 |
+
* @param state Game state to check
|
| 153 |
+
* @returns Terminal value (white-positive) if terminal, null otherwise
|
| 154 |
+
*/
|
| 155 |
+
private checkTerminal;
|
| 156 |
+
/**
|
| 157 |
+
* Calculate terminal value from territory scores
|
| 158 |
+
* Uses logarithmic scaling matching the training code
|
| 159 |
+
*
|
| 160 |
+
* @param territory Territory counts from game
|
| 161 |
+
* @returns Value (white-positive: positive = white winning)
|
| 162 |
+
*/
|
| 163 |
+
private calculateTerminalValue;
|
| 164 |
/**
|
| 165 |
* Create a new MCTS node
|
| 166 |
+
*
|
| 167 |
+
* @param state Game state (only provided for root node, null for others to save memory)
|
| 168 |
+
* @param parent Parent node
|
| 169 |
+
* @param action Action that led to this node
|
| 170 |
+
* @param playerToMove Player to move at this node (derived from state if available)
|
| 171 |
*/
|
| 172 |
private createNode;
|
| 173 |
/**
|
| 174 |
* Encode move to string key for storage in maps
|
| 175 |
+
* Note: Only encodes position, player info is handled separately
|
| 176 |
*/
|
| 177 |
private encodeAction;
|
| 178 |
/**
|
| 179 |
* Decode string key back to move
|
| 180 |
+
* Note: Returns move with placeholder player - caller must set correct player
|
| 181 |
+
* based on game state before using the move externally
|
| 182 |
*/
|
| 183 |
private decodeAction;
|
| 184 |
}
|
trigo-web/backend/dist/inc/mctsAgent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"mctsAgent.d.ts","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CACzB;
|
|
|
|
| 1 |
+
{"version":3,"file":"mctsAgent.d.ts","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAgCD;;;GAGG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAa;IACpB,SAAS,EAAE,OAAO,CAAS;gBAIjC,SAAS,EAAE,cAAc,EACzB,eAAe,EAAE,oBAAoB,EACrC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM;IAgBjC;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IA8CF;;;;;;OAMG;YACW,aAAa;IA2B3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAoEd;;;;;;OAMG;YACW,iBAAiB;IA+E/B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM;IAkFd;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAwExB;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuCnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IA4CrB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IAkClB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAUpB"}
|
trigo-web/backend/dist/inc/mctsAgent.js
CHANGED
|
@@ -17,6 +17,7 @@ exports.MCTSAgent = void 0;
|
|
| 17 |
*/
|
| 18 |
class MCTSAgent {
|
| 19 |
constructor(treeAgent, evaluationAgent, config = {}) {
|
|
|
|
| 20 |
this.treeAgent = treeAgent;
|
| 21 |
this.evaluationAgent = evaluationAgent;
|
| 22 |
// Default configuration (AlphaGo Zero-inspired)
|
|
@@ -39,69 +40,19 @@ class MCTSAgent {
|
|
| 39 |
// Create root node
|
| 40 |
const root = this.createNode(game, null, null);
|
| 41 |
// Check if root is already terminal (game over)
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
// 2. Board coverage > 50% (cheap)
|
| 45 |
-
// 3. No neutral territory (EXPENSIVE - only check if above pass)
|
| 46 |
-
// Get board state (cheap)
|
| 47 |
-
const board = game.getBoard();
|
| 48 |
-
const shape = game.getShape();
|
| 49 |
-
const totalPositions = shape.x * shape.y * shape.z;
|
| 50 |
-
// Count stones (cheap)
|
| 51 |
-
let stoneCount = 0;
|
| 52 |
-
let hasBlack = false;
|
| 53 |
-
let hasWhite = false;
|
| 54 |
-
for (let x = 0; x < shape.x; x++) {
|
| 55 |
-
for (let y = 0; y < shape.y; y++) {
|
| 56 |
-
for (let z = 0; z < shape.z; z++) {
|
| 57 |
-
const stone = board[x][y][z];
|
| 58 |
-
if (stone === 1) { // Black
|
| 59 |
-
hasBlack = true;
|
| 60 |
-
stoneCount++;
|
| 61 |
-
}
|
| 62 |
-
else if (stone === 2) { // White
|
| 63 |
-
hasWhite = true;
|
| 64 |
-
stoneCount++;
|
| 65 |
-
}
|
| 66 |
-
}
|
| 67 |
-
}
|
| 68 |
-
}
|
| 69 |
-
const coverageRatio = stoneCount / totalPositions;
|
| 70 |
-
// Early exit: Check cheap conditions first
|
| 71 |
-
let isRootTerminal = false;
|
| 72 |
-
let territory = null;
|
| 73 |
-
if (hasBlack && hasWhite && coverageRatio > 0.5) {
|
| 74 |
-
// Only calculate territory if cheap conditions pass (EXPENSIVE)
|
| 75 |
-
territory = game.getTerritory();
|
| 76 |
-
isRootTerminal = territory.neutral === 0;
|
| 77 |
-
}
|
| 78 |
-
if (isRootTerminal) {
|
| 79 |
-
// Game is over - return Pass move with exact value from territory
|
| 80 |
-
// Using same formula as training code
|
| 81 |
-
const scoreDiff = territory.white - territory.black;
|
| 82 |
-
let rootValue;
|
| 83 |
-
if (Math.abs(scoreDiff) < 1e-6) {
|
| 84 |
-
// Draw/tie case
|
| 85 |
-
rootValue = 0.0;
|
| 86 |
-
}
|
| 87 |
-
else {
|
| 88 |
-
// Match training formula from valueCausalLoss.py:_expand_value_targets
|
| 89 |
-
// The log term incentivizes winning by larger margins (logarithmically)
|
| 90 |
-
const territory_value_factor = 1.0; // Default from training config
|
| 91 |
-
const signScore = Math.sign(scoreDiff);
|
| 92 |
-
rootValue = signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
|
| 93 |
-
}
|
| 94 |
const currentPlayer = game.getCurrentPlayer();
|
| 95 |
return {
|
| 96 |
move: { player: currentPlayer === 1 ? "black" : "white", isPass: true },
|
| 97 |
visitCounts: new Map(),
|
| 98 |
searchPolicy: new Map(),
|
| 99 |
-
rootValue
|
| 100 |
};
|
| 101 |
}
|
| 102 |
// Run MCTS simulations
|
| 103 |
for (let i = 0; i < this.config.numSimulations; i++) {
|
| 104 |
-
await this.runSimulation(root);
|
| 105 |
}
|
| 106 |
// Temperature schedule: τ=1 for first 30 moves, τ→0 afterward
|
| 107 |
const temperature = moveNumber < 30 ? this.config.temperature : 0.01;
|
|
@@ -124,12 +75,27 @@ class MCTSAgent {
|
|
| 124 |
/**
|
| 125 |
* Run a single MCTS simulation
|
| 126 |
* Select -> Expand & Evaluate -> Backup
|
|
|
|
|
|
|
|
|
|
| 127 |
*/
|
| 128 |
-
async runSimulation(root) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
// 1. Selection: Traverse tree using PUCT until reaching unexpanded node
|
| 130 |
-
const { node, path } = this.select(root);
|
| 131 |
// 2. Expand and Evaluate: Get value from neural network
|
| 132 |
-
const value = await this.expandAndEvaluate(node);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
// 3. Backup: Propagate value up the tree
|
| 134 |
this.backup(path, value);
|
| 135 |
}
|
|
@@ -137,13 +103,19 @@ class MCTSAgent {
|
|
| 137 |
* Selection phase: Traverse tree using PUCT
|
| 138 |
*
|
| 139 |
* @param root Root node to start selection from
|
|
|
|
| 140 |
* @returns Leaf node and path taken
|
| 141 |
*/
|
| 142 |
-
select(root) {
|
| 143 |
const path = [];
|
| 144 |
let node = root;
|
| 145 |
// Traverse until we reach an unexpanded node
|
| 146 |
while (node.expanded) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
// Get all legal actions
|
| 148 |
const actionKeys = Array.from(node.P.keys());
|
| 149 |
// Terminal node check: if expanded but no actions, this is a terminal node
|
|
@@ -154,7 +126,7 @@ class MCTSAgent {
|
|
| 154 |
// Both players select HIGHEST PUCT value:
|
| 155 |
// - Black: PUCT = -Q + U, max PUCT = max(-Q) = min(Q) ✓
|
| 156 |
// - White: PUCT = Q + U, max PUCT = max(Q) ✓
|
| 157 |
-
const currentPlayer =
|
| 158 |
const isWhite = currentPlayer === 2;
|
| 159 |
let bestActionKey = actionKeys[0];
|
| 160 |
let bestPuct = this.calculatePUCT(node, bestActionKey, isWhite);
|
|
@@ -168,19 +140,18 @@ class MCTSAgent {
|
|
| 168 |
}
|
| 169 |
// Record path
|
| 170 |
path.push({ node, actionKey: bestActionKey });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 171 |
// Move to child (create if doesn't exist)
|
| 172 |
if (!node.children.has(bestActionKey)) {
|
| 173 |
-
//
|
| 174 |
-
const
|
| 175 |
-
const childState = node.state.clone();
|
| 176 |
-
if (action.isPass) {
|
| 177 |
-
childState.pass();
|
| 178 |
-
}
|
| 179 |
-
else if (action.x !== undefined && action.y !== undefined && action.z !== undefined) {
|
| 180 |
-
childState.drop({ x: action.x, y: action.y, z: action.z });
|
| 181 |
-
}
|
| 182 |
-
// Create child node (unexpanded)
|
| 183 |
-
const childNode = this.createNode(childState, node, action);
|
| 184 |
node.children.set(bestActionKey, childNode);
|
| 185 |
}
|
| 186 |
node = node.children.get(bestActionKey);
|
|
@@ -191,78 +162,32 @@ class MCTSAgent {
|
|
| 191 |
* Expand and evaluate leaf node using neural networks
|
| 192 |
*
|
| 193 |
* @param node Leaf node to expand
|
|
|
|
| 194 |
* @returns Value estimate from evaluation network
|
| 195 |
*/
|
| 196 |
-
async expandAndEvaluate(node) {
|
| 197 |
-
// Check if
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
// 2. Board coverage > 50% (cheap)
|
| 201 |
-
// 3. No neutral territory (EXPENSIVE - only check if above pass)
|
| 202 |
-
// Get board state (cheap)
|
| 203 |
-
const board = node.state.getBoard();
|
| 204 |
-
const shape = node.state.getShape();
|
| 205 |
-
const totalPositions = shape.x * shape.y * shape.z;
|
| 206 |
-
// Count stones on board (cheap)
|
| 207 |
-
let stoneCount = 0;
|
| 208 |
-
let hasBlack = false;
|
| 209 |
-
let hasWhite = false;
|
| 210 |
-
for (let x = 0; x < shape.x; x++) {
|
| 211 |
-
for (let y = 0; y < shape.y; y++) {
|
| 212 |
-
for (let z = 0; z < shape.z; z++) {
|
| 213 |
-
const stone = board[x][y][z];
|
| 214 |
-
if (stone === 1) { // Black
|
| 215 |
-
hasBlack = true;
|
| 216 |
-
stoneCount++;
|
| 217 |
-
}
|
| 218 |
-
else if (stone === 2) { // White
|
| 219 |
-
hasWhite = true;
|
| 220 |
-
stoneCount++;
|
| 221 |
-
}
|
| 222 |
-
}
|
| 223 |
-
}
|
| 224 |
}
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
let territory = null;
|
| 229 |
-
if (hasBlack && hasWhite && coverageRatio > 0.5) {
|
| 230 |
-
// Only calculate territory if cheap conditions pass (EXPENSIVE)
|
| 231 |
-
territory = node.state.getTerritory();
|
| 232 |
-
isTerminal = territory.neutral === 0;
|
| 233 |
-
}
|
| 234 |
-
if (isTerminal) {
|
| 235 |
-
// Game is over - return exact result from territory
|
| 236 |
-
// Using same formula as training code: target = sign(score) * (1 + log(|score|)) * factor
|
| 237 |
-
const scoreDiff = territory.white - territory.black;
|
| 238 |
-
let value;
|
| 239 |
-
if (Math.abs(scoreDiff) < 1e-6) {
|
| 240 |
-
// Draw/tie case
|
| 241 |
-
value = 0.0;
|
| 242 |
-
}
|
| 243 |
-
else {
|
| 244 |
-
// Match training formula from valueCausalLoss.py:_expand_value_targets
|
| 245 |
-
// target = sign(score) * (1 + log(|score|)) * territory_value_factor
|
| 246 |
-
// The log term incentivizes winning by larger margins (logarithmically)
|
| 247 |
-
// This balances winning incentive without overwhelming win/loss direction
|
| 248 |
-
const territory_value_factor = 1.0; // Default from training config
|
| 249 |
-
const signScore = Math.sign(scoreDiff);
|
| 250 |
-
value = signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
|
| 251 |
-
}
|
| 252 |
// Mark terminal node as expanded with empty action set to prevent revisits
|
| 253 |
-
//
|
| 254 |
node.expanded = true;
|
|
|
|
| 255 |
node.P = new Map(); // No actions available (terminal)
|
| 256 |
node.N = new Map();
|
| 257 |
node.W = new Map();
|
| 258 |
node.Q = new Map();
|
| 259 |
node.children = new Map();
|
| 260 |
-
return
|
| 261 |
}
|
| 262 |
// Non-terminal state: expand with policy network and evaluate
|
| 263 |
// Get all valid moves
|
| 264 |
-
const currentPlayer =
|
| 265 |
-
const validPositions =
|
| 266 |
const moves = validPositions.map(pos => ({
|
| 267 |
x: pos.x,
|
| 268 |
y: pos.y,
|
|
@@ -271,7 +196,7 @@ class MCTSAgent {
|
|
| 271 |
}));
|
| 272 |
moves.push({ player: currentPlayer, isPass: true });
|
| 273 |
// Get policy priors from tree agent
|
| 274 |
-
const scoredMoves = await this.treeAgent.scoreMoves(
|
| 275 |
// Convert log probabilities to probabilities and normalize (stable softmax)
|
| 276 |
const maxScore = Math.max(...scoredMoves.map(m => m.score));
|
| 277 |
const expScores = scoredMoves.map(m => Math.exp(m.score - maxScore));
|
|
@@ -299,13 +224,23 @@ class MCTSAgent {
|
|
| 299 |
// Mark as expanded
|
| 300 |
node.expanded = true;
|
| 301 |
// Get value estimate from evaluation agent
|
| 302 |
-
const evaluation = await this.evaluationAgent.evaluatePosition(
|
| 303 |
// Return value directly (value model returns white-positive by design)
|
| 304 |
return evaluation.value;
|
| 305 |
}
|
| 306 |
/**
|
| 307 |
* Backup phase: Propagate value up the tree
|
| 308 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 309 |
* @param path Path from root to leaf
|
| 310 |
* @param value Value to propagate (white-positive: positive = white winning)
|
| 311 |
*/
|
|
@@ -320,6 +255,58 @@ class MCTSAgent {
|
|
| 320 |
node.N.set(actionKey, n + 1);
|
| 321 |
node.W.set(actionKey, w + value);
|
| 322 |
node.Q.set(actionKey, (w + value) / (n + 1));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 323 |
}
|
| 324 |
}
|
| 325 |
/**
|
|
@@ -356,6 +343,31 @@ class MCTSAgent {
|
|
| 356 |
*/
|
| 357 |
selectPlayAction(node, temperature) {
|
| 358 |
const actionKeys = Array.from(node.N.keys());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 359 |
if (temperature < 0.01) {
|
| 360 |
// Greedy: Select action with highest visit count
|
| 361 |
let bestActionKey = actionKeys[0];
|
|
@@ -443,11 +455,19 @@ class MCTSAgent {
|
|
| 443 |
* Add Dirichlet noise to prior probabilities at root
|
| 444 |
* P(s,a) = (1 - ε) * p_a + ε * η_a
|
| 445 |
* where η ~ Dir(α)
|
|
|
|
|
|
|
|
|
|
| 446 |
*/
|
| 447 |
addDirichletNoise(priors) {
|
| 448 |
-
|
|
|
|
| 449 |
const alpha = this.config.dirichletAlpha;
|
| 450 |
const epsilon = this.config.dirichletEpsilon;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 451 |
// Generate Dirichlet noise (simplified using Gamma distribution)
|
| 452 |
const noise = [];
|
| 453 |
let noiseSum = 0;
|
|
@@ -462,7 +482,7 @@ class MCTSAgent {
|
|
| 462 |
// Fallback: use uniform noise (no mixing, keep original priors)
|
| 463 |
return;
|
| 464 |
}
|
| 465 |
-
// Normalize and mix with priors
|
| 466 |
for (let i = 0; i < actionKeys.length; i++) {
|
| 467 |
const actionKey = actionKeys[i];
|
| 468 |
const prior = priors.get(actionKey) ?? 0;
|
|
@@ -513,10 +533,101 @@ class MCTSAgent {
|
|
| 513 |
const u2 = Math.random();
|
| 514 |
return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
|
| 515 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 516 |
/**
|
| 517 |
* Create a new MCTS node
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 518 |
*/
|
| 519 |
-
createNode(state, parent, action) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
return {
|
| 521 |
state,
|
| 522 |
parent,
|
|
@@ -526,11 +637,15 @@ class MCTSAgent {
|
|
| 526 |
Q: new Map(),
|
| 527 |
P: new Map(),
|
| 528 |
children: new Map(),
|
| 529 |
-
expanded: false
|
|
|
|
|
|
|
|
|
|
| 530 |
};
|
| 531 |
}
|
| 532 |
/**
|
| 533 |
* Encode move to string key for storage in maps
|
|
|
|
| 534 |
*/
|
| 535 |
encodeAction(move) {
|
| 536 |
if (move.isPass) {
|
|
@@ -540,13 +655,17 @@ class MCTSAgent {
|
|
| 540 |
}
|
| 541 |
/**
|
| 542 |
* Decode string key back to move
|
|
|
|
|
|
|
| 543 |
*/
|
| 544 |
decodeAction(key) {
|
| 545 |
if (key === "pass") {
|
| 546 |
-
|
|
|
|
| 547 |
}
|
| 548 |
const [x, y, z] = key.split(",").map(Number);
|
| 549 |
-
|
|
|
|
| 550 |
}
|
| 551 |
}
|
| 552 |
exports.MCTSAgent = MCTSAgent;
|
|
|
|
| 17 |
*/
|
| 18 |
class MCTSAgent {
|
| 19 |
constructor(treeAgent, evaluationAgent, config = {}) {
|
| 20 |
+
this.debugMode = false; // Enable debug logging
|
| 21 |
this.treeAgent = treeAgent;
|
| 22 |
this.evaluationAgent = evaluationAgent;
|
| 23 |
// Default configuration (AlphaGo Zero-inspired)
|
|
|
|
| 40 |
// Create root node
|
| 41 |
const root = this.createNode(game, null, null);
|
| 42 |
// Check if root is already terminal (game over)
|
| 43 |
+
const terminalResult = this.checkTerminal(game);
|
| 44 |
+
if (terminalResult !== null) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
const currentPlayer = game.getCurrentPlayer();
|
| 46 |
return {
|
| 47 |
move: { player: currentPlayer === 1 ? "black" : "white", isPass: true },
|
| 48 |
visitCounts: new Map(),
|
| 49 |
searchPolicy: new Map(),
|
| 50 |
+
rootValue: terminalResult
|
| 51 |
};
|
| 52 |
}
|
| 53 |
// Run MCTS simulations
|
| 54 |
for (let i = 0; i < this.config.numSimulations; i++) {
|
| 55 |
+
await this.runSimulation(root, i);
|
| 56 |
}
|
| 57 |
// Temperature schedule: τ=1 for first 30 moves, τ→0 afterward
|
| 58 |
const temperature = moveNumber < 30 ? this.config.temperature : 0.01;
|
|
|
|
| 75 |
/**
|
| 76 |
* Run a single MCTS simulation
|
| 77 |
* Select -> Expand & Evaluate -> Backup
|
| 78 |
+
*
|
| 79 |
+
* Memory optimization: Clone state once at start, mutate along path.
|
| 80 |
+
* This reduces memory from O(nodes) to O(simulations).
|
| 81 |
*/
|
| 82 |
+
async runSimulation(root, simIndex) {
|
| 83 |
+
// Invariant: root node must always have a non-null state
|
| 84 |
+
if (!root.state) {
|
| 85 |
+
throw new Error("runSimulation: root node must have a non-null state");
|
| 86 |
+
}
|
| 87 |
+
// Clone root state once for this simulation
|
| 88 |
+
const workingState = root.state.clone();
|
| 89 |
// 1. Selection: Traverse tree using PUCT until reaching unexpanded node
|
| 90 |
+
const { node, path } = this.select(root, workingState);
|
| 91 |
// 2. Expand and Evaluate: Get value from neural network
|
| 92 |
+
const value = await this.expandAndEvaluate(node, workingState);
|
| 93 |
+
// Debug logging
|
| 94 |
+
if (this.debugMode && simIndex !== undefined && simIndex < 10) {
|
| 95 |
+
const pathStr = path.map(p => p.actionKey).join(" → ");
|
| 96 |
+
const terminalStr = node.terminalValue !== null ? " [TERMINAL]" : "";
|
| 97 |
+
console.log(`Sim ${simIndex + 1}: ${pathStr || "(root)"} → value=${value.toFixed(4)}${terminalStr}`);
|
| 98 |
+
}
|
| 99 |
// 3. Backup: Propagate value up the tree
|
| 100 |
this.backup(path, value);
|
| 101 |
}
|
|
|
|
| 103 |
* Selection phase: Traverse tree using PUCT
|
| 104 |
*
|
| 105 |
* @param root Root node to start selection from
|
| 106 |
+
* @param workingState Mutable game state that gets updated along the path
|
| 107 |
* @returns Leaf node and path taken
|
| 108 |
*/
|
| 109 |
+
select(root, workingState) {
|
| 110 |
const path = [];
|
| 111 |
let node = root;
|
| 112 |
// Traverse until we reach an unexpanded node
|
| 113 |
while (node.expanded) {
|
| 114 |
+
// GPT-5.1 recommendation: Stop at terminal nodes immediately
|
| 115 |
+
// Terminal nodes should not be expanded or evaluated further
|
| 116 |
+
if (node.terminalValue !== null) {
|
| 117 |
+
break; // Return terminal node, use its cached value
|
| 118 |
+
}
|
| 119 |
// Get all legal actions
|
| 120 |
const actionKeys = Array.from(node.P.keys());
|
| 121 |
// Terminal node check: if expanded but no actions, this is a terminal node
|
|
|
|
| 126 |
// Both players select HIGHEST PUCT value:
|
| 127 |
// - Black: PUCT = -Q + U, max PUCT = max(-Q) = min(Q) ✓
|
| 128 |
// - White: PUCT = Q + U, max PUCT = max(Q) ✓
|
| 129 |
+
const currentPlayer = workingState.getCurrentPlayer();
|
| 130 |
const isWhite = currentPlayer === 2;
|
| 131 |
let bestActionKey = actionKeys[0];
|
| 132 |
let bestPuct = this.calculatePUCT(node, bestActionKey, isWhite);
|
|
|
|
| 140 |
}
|
| 141 |
// Record path
|
| 142 |
path.push({ node, actionKey: bestActionKey });
|
| 143 |
+
// Apply action to working state (instead of cloning)
|
| 144 |
+
const action = this.decodeAction(bestActionKey);
|
| 145 |
+
if (action.isPass) {
|
| 146 |
+
workingState.pass();
|
| 147 |
+
}
|
| 148 |
+
else if (action.x !== undefined && action.y !== undefined && action.z !== undefined) {
|
| 149 |
+
workingState.drop({ x: action.x, y: action.y, z: action.z });
|
| 150 |
+
}
|
| 151 |
// Move to child (create if doesn't exist)
|
| 152 |
if (!node.children.has(bestActionKey)) {
|
| 153 |
+
// Create child node WITHOUT storing state (memory optimization)
|
| 154 |
+
const childNode = this.createNode(null, node, action);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
node.children.set(bestActionKey, childNode);
|
| 156 |
}
|
| 157 |
node = node.children.get(bestActionKey);
|
|
|
|
| 162 |
* Expand and evaluate leaf node using neural networks
|
| 163 |
*
|
| 164 |
* @param node Leaf node to expand
|
| 165 |
+
* @param workingState Current game state at this node (passed from simulation)
|
| 166 |
* @returns Value estimate from evaluation network
|
| 167 |
*/
|
| 168 |
+
async expandAndEvaluate(node, workingState) {
|
| 169 |
+
// Check if terminal value is already cached
|
| 170 |
+
if (node.terminalValue !== null) {
|
| 171 |
+
return node.terminalValue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
}
|
| 173 |
+
// Check if game is over (terminal state)
|
| 174 |
+
const terminalValue = this.checkTerminal(workingState);
|
| 175 |
+
if (terminalValue !== null) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
// Mark terminal node as expanded with empty action set to prevent revisits
|
| 177 |
+
// Cache the terminal value to avoid repeated checks
|
| 178 |
node.expanded = true;
|
| 179 |
+
node.terminalValue = terminalValue;
|
| 180 |
node.P = new Map(); // No actions available (terminal)
|
| 181 |
node.N = new Map();
|
| 182 |
node.W = new Map();
|
| 183 |
node.Q = new Map();
|
| 184 |
node.children = new Map();
|
| 185 |
+
return terminalValue;
|
| 186 |
}
|
| 187 |
// Non-terminal state: expand with policy network and evaluate
|
| 188 |
// Get all valid moves
|
| 189 |
+
const currentPlayer = workingState.getCurrentPlayer() === 1 ? "black" : "white";
|
| 190 |
+
const validPositions = workingState.validMovePositions();
|
| 191 |
const moves = validPositions.map(pos => ({
|
| 192 |
x: pos.x,
|
| 193 |
y: pos.y,
|
|
|
|
| 196 |
}));
|
| 197 |
moves.push({ player: currentPlayer, isPass: true });
|
| 198 |
// Get policy priors from tree agent
|
| 199 |
+
const scoredMoves = await this.treeAgent.scoreMoves(workingState, moves);
|
| 200 |
// Convert log probabilities to probabilities and normalize (stable softmax)
|
| 201 |
const maxScore = Math.max(...scoredMoves.map(m => m.score));
|
| 202 |
const expScores = scoredMoves.map(m => Math.exp(m.score - maxScore));
|
|
|
|
| 224 |
// Mark as expanded
|
| 225 |
node.expanded = true;
|
| 226 |
// Get value estimate from evaluation agent
|
| 227 |
+
const evaluation = await this.evaluationAgent.evaluatePosition(workingState);
|
| 228 |
// Return value directly (value model returns white-positive by design)
|
| 229 |
return evaluation.value;
|
| 230 |
}
|
| 231 |
/**
|
| 232 |
* Backup phase: Propagate value up the tree
|
| 233 |
*
|
| 234 |
+
* White-positive minimax propagation:
|
| 235 |
+
* - All Q-values represent White's advantage (positive = White winning)
|
| 236 |
+
* - When all children are terminal, mark parent as terminal with minimax value:
|
| 237 |
+
* * White's turn: terminal_value = max(children terminal values)
|
| 238 |
+
* * Black's turn: terminal_value = min(children terminal values)
|
| 239 |
+
*
|
| 240 |
+
* Improvements (based on GPT-5.1 review):
|
| 241 |
+
* - Uses stored playerToMove instead of computing from depth
|
| 242 |
+
* - Uses stored depth instead of recomputing via parent walk
|
| 243 |
+
*
|
| 244 |
* @param path Path from root to leaf
|
| 245 |
* @param value Value to propagate (white-positive: positive = white winning)
|
| 246 |
*/
|
|
|
|
| 255 |
node.N.set(actionKey, n + 1);
|
| 256 |
node.W.set(actionKey, w + value);
|
| 257 |
node.Q.set(actionKey, (w + value) / (n + 1));
|
| 258 |
+
// ========== Terminal State Propagation ==========
|
| 259 |
+
// Check if this node should be marked as terminal
|
| 260 |
+
// Condition: node is fully expanded AND all children are terminal AND node itself not yet marked
|
| 261 |
+
if (node.expanded && node.terminalValue === null) {
|
| 262 |
+
const actionKeys = Array.from(node.P.keys());
|
| 263 |
+
// Skip propagation if no actions (already a terminal leaf, or error state)
|
| 264 |
+
if (actionKeys.length === 0) {
|
| 265 |
+
continue;
|
| 266 |
+
}
|
| 267 |
+
// Check if ALL children are terminal
|
| 268 |
+
let allChildrenTerminal = true;
|
| 269 |
+
const childTerminalValues = [];
|
| 270 |
+
for (const key of actionKeys) {
|
| 271 |
+
const child = node.children.get(key);
|
| 272 |
+
// If child doesn't exist yet, not all children explored
|
| 273 |
+
if (!child) {
|
| 274 |
+
allChildrenTerminal = false;
|
| 275 |
+
break;
|
| 276 |
+
}
|
| 277 |
+
// If child is not terminal, not all children terminal
|
| 278 |
+
if (child.terminalValue === null) {
|
| 279 |
+
allChildrenTerminal = false;
|
| 280 |
+
break;
|
| 281 |
+
}
|
| 282 |
+
// Child is terminal, collect its value
|
| 283 |
+
childTerminalValues.push(child.terminalValue);
|
| 284 |
+
}
|
| 285 |
+
// If all children are terminal, mark current node as terminal with minimax value
|
| 286 |
+
if (allChildrenTerminal && childTerminalValues.length > 0) {
|
| 287 |
+
// Use stored playerToMove instead of computing from depth (GPT-5.1 suggestion)
|
| 288 |
+
const isWhiteTurn = node.playerToMove === 2; // 2 = White, 1 = Black
|
| 289 |
+
// Apply minimax: choose best child value from current player's perspective
|
| 290 |
+
let terminalValue;
|
| 291 |
+
if (isWhiteTurn) {
|
| 292 |
+
// White maximizes Q-value (white-positive)
|
| 293 |
+
terminalValue = Math.max(...childTerminalValues);
|
| 294 |
+
}
|
| 295 |
+
else {
|
| 296 |
+
// Black minimizes Q-value (white-positive)
|
| 297 |
+
terminalValue = Math.min(...childTerminalValues);
|
| 298 |
+
}
|
| 299 |
+
// Mark this node as terminal with the minimax value
|
| 300 |
+
node.terminalValue = terminalValue;
|
| 301 |
+
// Debug logging for terminal propagation
|
| 302 |
+
if (this.debugMode) {
|
| 303 |
+
const playerName = isWhiteTurn ? 'White' : 'Black';
|
| 304 |
+
console.log(`[Terminal Propagation] Node at depth ${node.depth} (${playerName}) marked terminal: ` +
|
| 305 |
+
`value=${terminalValue.toFixed(4)}, children=[${childTerminalValues.map(v => v.toFixed(2)).join(', ')}]`);
|
| 306 |
+
}
|
| 307 |
+
}
|
| 308 |
+
}
|
| 309 |
+
// ================================================
|
| 310 |
}
|
| 311 |
}
|
| 312 |
/**
|
|
|
|
| 343 |
*/
|
| 344 |
selectPlayAction(node, temperature) {
|
| 345 |
const actionKeys = Array.from(node.N.keys());
|
| 346 |
+
// Edge case: no actions available (unexpanded root or terminal state)
|
| 347 |
+
if (actionKeys.length === 0) {
|
| 348 |
+
// Fallback to priors if available
|
| 349 |
+
const priorKeys = Array.from(node.P.keys());
|
| 350 |
+
if (priorKeys.length > 0) {
|
| 351 |
+
// Sample from prior distribution
|
| 352 |
+
const priors = priorKeys.map(key => node.P.get(key) ?? 0);
|
| 353 |
+
const sumP = priors.reduce((sum, p) => sum + p, 0);
|
| 354 |
+
if (sumP > 0) {
|
| 355 |
+
let rand = Math.random() * sumP;
|
| 356 |
+
for (let i = 0; i < priorKeys.length; i++) {
|
| 357 |
+
rand -= priors[i];
|
| 358 |
+
if (rand <= 0) {
|
| 359 |
+
return this.decodeAction(priorKeys[i]);
|
| 360 |
+
}
|
| 361 |
+
}
|
| 362 |
+
return this.decodeAction(priorKeys[priorKeys.length - 1]);
|
| 363 |
+
}
|
| 364 |
+
// Uniform fallback
|
| 365 |
+
const randomIndex = Math.floor(Math.random() * priorKeys.length);
|
| 366 |
+
return this.decodeAction(priorKeys[randomIndex]);
|
| 367 |
+
}
|
| 368 |
+
// No actions at all - return Pass as last resort
|
| 369 |
+
return { player: "black", isPass: true };
|
| 370 |
+
}
|
| 371 |
if (temperature < 0.01) {
|
| 372 |
// Greedy: Select action with highest visit count
|
| 373 |
let bestActionKey = actionKeys[0];
|
|
|
|
| 455 |
* Add Dirichlet noise to prior probabilities at root
|
| 456 |
* P(s,a) = (1 - ε) * p_a + ε * η_a
|
| 457 |
* where η ~ Dir(α)
|
| 458 |
+
*
|
| 459 |
+
* Note: Pass move is excluded from noise to prevent exploration of
|
| 460 |
+
* clearly suboptimal opening passes.
|
| 461 |
*/
|
| 462 |
addDirichletNoise(priors) {
|
| 463 |
+
// Exclude Pass from Dirichlet noise - it should not be explored at root
|
| 464 |
+
const actionKeys = Array.from(priors.keys()).filter(key => key !== "pass");
|
| 465 |
const alpha = this.config.dirichletAlpha;
|
| 466 |
const epsilon = this.config.dirichletEpsilon;
|
| 467 |
+
// If only Pass is available, no noise to add
|
| 468 |
+
if (actionKeys.length === 0) {
|
| 469 |
+
return;
|
| 470 |
+
}
|
| 471 |
// Generate Dirichlet noise (simplified using Gamma distribution)
|
| 472 |
const noise = [];
|
| 473 |
let noiseSum = 0;
|
|
|
|
| 482 |
// Fallback: use uniform noise (no mixing, keep original priors)
|
| 483 |
return;
|
| 484 |
}
|
| 485 |
+
// Normalize and mix with priors (only for non-Pass actions)
|
| 486 |
for (let i = 0; i < actionKeys.length; i++) {
|
| 487 |
const actionKey = actionKeys[i];
|
| 488 |
const prior = priors.get(actionKey) ?? 0;
|
|
|
|
| 533 |
const u2 = Math.random();
|
| 534 |
return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
|
| 535 |
}
|
| 536 |
+
/**
|
| 537 |
+
* Check if game state is terminal and return value if so
|
| 538 |
+
*
|
| 539 |
+
* Terminal conditions (checked in order of cost):
|
| 540 |
+
* 1. Game already finished (double-pass or resignation) - CHEAPEST
|
| 541 |
+
* 2. Board coverage > 50% AND naturally terminal (calls isNaturallyTerminal) - EXPENSIVE
|
| 542 |
+
*
|
| 543 |
+
* NOTE: The coverage check (> 50%) is an optimization to avoid expensive
|
| 544 |
+
* territory calculations on sparse boards where natural termination is unlikely.
|
| 545 |
+
*
|
| 546 |
+
* @param state Game state to check
|
| 547 |
+
* @returns Terminal value (white-positive) if terminal, null otherwise
|
| 548 |
+
*/
|
| 549 |
+
checkTerminal(state) {
|
| 550 |
+
// 1. Check if game is already finished (double-pass, resignation, etc.)
|
| 551 |
+
// This is the cheapest check - just reading a status flag
|
| 552 |
+
if (state.getGameStatus() === "finished") {
|
| 553 |
+
const territory = state.getTerritory();
|
| 554 |
+
return this.calculateTerminalValue(territory);
|
| 555 |
+
}
|
| 556 |
+
// 2. Check for "natural" game end (all territory claimed, no capturing moves)
|
| 557 |
+
// Optimization: Only check if board is reasonably full (> 50% coverage)
|
| 558 |
+
// because natural termination is unlikely on sparse boards
|
| 559 |
+
const board = state.getBoard();
|
| 560 |
+
const shape = state.getShape();
|
| 561 |
+
const totalPositions = shape.x * shape.y * shape.z;
|
| 562 |
+
// Count stones (cheap)
|
| 563 |
+
let stoneCount = 0;
|
| 564 |
+
for (let x = 0; x < shape.x; x++) {
|
| 565 |
+
for (let y = 0; y < shape.y; y++) {
|
| 566 |
+
for (let z = 0; z < shape.z; z++) {
|
| 567 |
+
const stone = board[x][y][z];
|
| 568 |
+
if (stone === 1 || stone === 2) { // StoneType.BLACK or WHITE
|
| 569 |
+
stoneCount++;
|
| 570 |
+
}
|
| 571 |
+
}
|
| 572 |
+
}
|
| 573 |
+
}
|
| 574 |
+
const coverageRatio = stoneCount / totalPositions;
|
| 575 |
+
// Only check for natural termination if board is reasonably full
|
| 576 |
+
if (coverageRatio > 0.5) {
|
| 577 |
+
if (state.isNaturallyTerminal()) {
|
| 578 |
+
const territory = state.getTerritory();
|
| 579 |
+
return this.calculateTerminalValue(territory);
|
| 580 |
+
}
|
| 581 |
+
}
|
| 582 |
+
return null; // Not terminal
|
| 583 |
+
}
|
| 584 |
+
/**
|
| 585 |
+
* Calculate terminal value from territory scores
|
| 586 |
+
* Uses logarithmic scaling matching the training code
|
| 587 |
+
*
|
| 588 |
+
* @param territory Territory counts from game
|
| 589 |
+
* @returns Value (white-positive: positive = white winning)
|
| 590 |
+
*/
|
| 591 |
+
calculateTerminalValue(territory) {
|
| 592 |
+
const scoreDiff = territory.white - territory.black;
|
| 593 |
+
if (Math.abs(scoreDiff) < 1e-6) {
|
| 594 |
+
// Draw/tie case
|
| 595 |
+
return 0.0;
|
| 596 |
+
}
|
| 597 |
+
// Match training formula from valueCausalLoss.py:_expand_value_targets
|
| 598 |
+
// target = sign(score) * (1 + log(|score|)) * territory_value_factor
|
| 599 |
+
// The log term incentivizes winning by larger margins (logarithmically)
|
| 600 |
+
const territory_value_factor = 1.0; // Default from training config
|
| 601 |
+
const signScore = Math.sign(scoreDiff);
|
| 602 |
+
return signScore * (1 + Math.log(Math.abs(scoreDiff))) * territory_value_factor;
|
| 603 |
+
}
|
| 604 |
/**
|
| 605 |
* Create a new MCTS node
|
| 606 |
+
*
|
| 607 |
+
* @param state Game state (only provided for root node, null for others to save memory)
|
| 608 |
+
* @param parent Parent node
|
| 609 |
+
* @param action Action that led to this node
|
| 610 |
+
* @param playerToMove Player to move at this node (derived from state if available)
|
| 611 |
*/
|
| 612 |
+
createNode(state, parent, action, playerToMove) {
|
| 613 |
+
// Determine player to move
|
| 614 |
+
let player;
|
| 615 |
+
if (playerToMove !== undefined) {
|
| 616 |
+
player = playerToMove;
|
| 617 |
+
}
|
| 618 |
+
else if (state) {
|
| 619 |
+
// Most reliable: derive from actual game state
|
| 620 |
+
player = state.getCurrentPlayer();
|
| 621 |
+
}
|
| 622 |
+
else if (parent) {
|
| 623 |
+
// NOTE: Fallback assumes strictly alternating turns (no passes keeping same player)
|
| 624 |
+
// For standard Go-like games with strict alternation, this is safe.
|
| 625 |
+
player = parent.playerToMove === 1 ? 2 : 1;
|
| 626 |
+
}
|
| 627 |
+
else {
|
| 628 |
+
// Default to Black for root if no info
|
| 629 |
+
player = 1;
|
| 630 |
+
}
|
| 631 |
return {
|
| 632 |
state,
|
| 633 |
parent,
|
|
|
|
| 637 |
Q: new Map(),
|
| 638 |
P: new Map(),
|
| 639 |
children: new Map(),
|
| 640 |
+
expanded: false,
|
| 641 |
+
terminalValue: null,
|
| 642 |
+
depth: parent ? parent.depth + 1 : 0,
|
| 643 |
+
playerToMove: player
|
| 644 |
};
|
| 645 |
}
|
| 646 |
/**
|
| 647 |
* Encode move to string key for storage in maps
|
| 648 |
+
* Note: Only encodes position, player info is handled separately
|
| 649 |
*/
|
| 650 |
encodeAction(move) {
|
| 651 |
if (move.isPass) {
|
|
|
|
| 655 |
}
|
| 656 |
/**
|
| 657 |
* Decode string key back to move
|
| 658 |
+
* Note: Returns move with placeholder player - caller must set correct player
|
| 659 |
+
* based on game state before using the move externally
|
| 660 |
*/
|
| 661 |
decodeAction(key) {
|
| 662 |
if (key === "pass") {
|
| 663 |
+
// Player is placeholder - will be set by caller (selectMove sets it from game state)
|
| 664 |
+
return { player: "black", isPass: true };
|
| 665 |
}
|
| 666 |
const [x, y, z] = key.split(",").map(Number);
|
| 667 |
+
// Player is placeholder - will be set by caller (selectMove sets it from game state)
|
| 668 |
+
return { player: "black", x, y, z };
|
| 669 |
}
|
| 670 |
}
|
| 671 |
exports.MCTSAgent = MCTSAgent;
|
trigo-web/backend/dist/inc/mctsAgent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"mctsAgent.js","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"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"}
|
|
|
|
| 1 |
+
{"version":3,"file":"mctsAgent.js","sourceRoot":"","sources":["../../../inc/mctsAgent.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/inc/trigo/game.d.ts
CHANGED
|
@@ -76,8 +76,8 @@ export declare class TrigoGame {
|
|
| 76 |
private gameResult?;
|
| 77 |
private passCount;
|
| 78 |
private lastCapturedPositions;
|
| 79 |
-
private territoryDirty;
|
| 80 |
private cachedTerritory;
|
|
|
|
| 81 |
/**
|
| 82 |
* Constructor
|
| 83 |
* Equivalent to trigo.Game constructor (lines 75-85)
|
|
@@ -92,6 +92,11 @@ export declare class TrigoGame {
|
|
| 92 |
* Equivalent to Game.reset() (lines 153-163)
|
| 93 |
*/
|
| 94 |
reset(): void;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
/**
|
| 96 |
* Clone the game state (deep copy)
|
| 97 |
* Creates an independent copy with all state preserved
|
|
@@ -180,6 +185,42 @@ export declare class TrigoGame {
|
|
| 180 |
* @returns Array of all valid move positions
|
| 181 |
*/
|
| 182 |
validMovePositions(player?: Stone): Position[];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 183 |
/**
|
| 184 |
* Reset pass count (called when a stone is placed)
|
| 185 |
*/
|
|
|
|
| 76 |
private gameResult?;
|
| 77 |
private passCount;
|
| 78 |
private lastCapturedPositions;
|
|
|
|
| 79 |
private cachedTerritory;
|
| 80 |
+
private cachedCapturingMove;
|
| 81 |
/**
|
| 82 |
* Constructor
|
| 83 |
* Equivalent to trigo.Game constructor (lines 75-85)
|
|
|
|
| 92 |
* Equivalent to Game.reset() (lines 153-163)
|
| 93 |
*/
|
| 94 |
reset(): void;
|
| 95 |
+
/**
|
| 96 |
+
* Invalidate all static analysis caches
|
| 97 |
+
* Called when board state changes
|
| 98 |
+
*/
|
| 99 |
+
private invalidateAnalysisCache;
|
| 100 |
/**
|
| 101 |
* Clone the game state (deep copy)
|
| 102 |
* Creates an independent copy with all state preserved
|
|
|
|
| 185 |
* @returns Array of all valid move positions
|
| 186 |
*/
|
| 187 |
validMovePositions(player?: Stone): Position[];
|
| 188 |
+
/**
|
| 189 |
+
* Check if any valid move can capture enemy stones
|
| 190 |
+
* Used by MCTS to determine if a position is truly terminal
|
| 191 |
+
*
|
| 192 |
+
* Results are cached and invalidated when board state changes.
|
| 193 |
+
*
|
| 194 |
+
* @param player - Optional player color (defaults to current player)
|
| 195 |
+
* @returns true if at least one valid move would capture stones
|
| 196 |
+
*/
|
| 197 |
+
hasCapturingMove(player?: Stone): boolean;
|
| 198 |
+
/**
|
| 199 |
+
* Internal: Compute whether a player has any capturing move
|
| 200 |
+
*/
|
| 201 |
+
private computeHasCapturingMove;
|
| 202 |
+
/**
|
| 203 |
+
* Check if the game has reached a natural terminal state
|
| 204 |
+
*
|
| 205 |
+
* A game is naturally terminal when:
|
| 206 |
+
* - All territory is claimed (neutral === 0)
|
| 207 |
+
* - AND neither player has any capturing moves available
|
| 208 |
+
*
|
| 209 |
+
* This is different from the "finished" status which requires double pass.
|
| 210 |
+
* Natural termination means the game state is completely settled and
|
| 211 |
+
* no further moves can meaningfully change the outcome.
|
| 212 |
+
*
|
| 213 |
+
* NOTE: This method is expensive due to territory calculation and capture move checking.
|
| 214 |
+
* Use coverage ratio check as a pre-filter when calling frequently.
|
| 215 |
+
*
|
| 216 |
+
* Used by:
|
| 217 |
+
* - MCTS agent (terminal detection for tree search)
|
| 218 |
+
* - Model battle (early stopping when settled)
|
| 219 |
+
* - Self-play games (early stopping when settled)
|
| 220 |
+
*
|
| 221 |
+
* @returns true if the game is naturally terminal, false otherwise
|
| 222 |
+
*/
|
| 223 |
+
isNaturallyTerminal(): boolean;
|
| 224 |
/**
|
| 225 |
* Reset pass count (called when a stone is placed)
|
| 226 |
*/
|
trigo-web/backend/dist/inc/trigo/game.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EASN,KAAK,eAAe,EACpB,MAAM,aAAa,CAAC;AAKrB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,oBAAY,QAAQ;IACnB,IAAI,IAAI,CAAE,gBAAgB;IAC1B,IAAI,IAAI,CAAE,YAAY;IACtB,SAAS,IAAI,CAAE,mBAAmB;IAClC,IAAI,IAAI;CACR;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;IACjE,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;IACd,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACtD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IACpD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;CACzD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,SAAS;IAErB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAgB;IAGjC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,qBAAqB,CAA2B;
|
|
|
|
| 1 |
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/inc/trigo/game.js
CHANGED
|
@@ -46,9 +46,10 @@ class TrigoGame {
|
|
| 46 |
constructor(shape = { x: 5, y: 5, z: 5 }, callbacks = {}) {
|
| 47 |
// Last captured stones for Ko rule detection
|
| 48 |
this.lastCapturedPositions = null;
|
| 49 |
-
//
|
| 50 |
-
|
| 51 |
this.cachedTerritory = null;
|
|
|
|
| 52 |
this.shape = shape;
|
| 53 |
this.callbacks = callbacks;
|
| 54 |
this.board = this.createEmptyBoard();
|
|
@@ -85,12 +86,19 @@ class TrigoGame {
|
|
| 85 |
this.stepHistory = [];
|
| 86 |
this.currentStepIndex = 0;
|
| 87 |
this.lastCapturedPositions = null;
|
| 88 |
-
this.
|
| 89 |
-
this.cachedTerritory = null;
|
| 90 |
this.gameStatus = "idle";
|
| 91 |
this.gameResult = undefined;
|
| 92 |
this.passCount = 0;
|
| 93 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
/**
|
| 95 |
* Clone the game state (deep copy)
|
| 96 |
* Creates an independent copy with all state preserved
|
|
@@ -123,9 +131,8 @@ class TrigoGame {
|
|
| 123 |
score: this.gameResult.score ? { ...this.gameResult.score } : undefined
|
| 124 |
};
|
| 125 |
}
|
| 126 |
-
//
|
| 127 |
-
cloned.
|
| 128 |
-
cloned.cachedTerritory = null;
|
| 129 |
return cloned;
|
| 130 |
}
|
| 131 |
/**
|
|
@@ -280,6 +287,90 @@ class TrigoGame {
|
|
| 280 |
}
|
| 281 |
return validPositions;
|
| 282 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 283 |
/**
|
| 284 |
* Reset pass count (called when a stone is placed)
|
| 285 |
*/
|
|
@@ -307,8 +398,8 @@ class TrigoGame {
|
|
| 307 |
const capturedPositions = (0, gameUtils_1.executeCaptures)(capturedGroups, this.board);
|
| 308 |
// Store captured positions for Ko rule
|
| 309 |
this.lastCapturedPositions = capturedPositions.length > 0 ? capturedPositions : null;
|
| 310 |
-
//
|
| 311 |
-
this.
|
| 312 |
// Reset pass count when a stone is placed
|
| 313 |
this.resetPassCount();
|
| 314 |
// Create step record
|
|
@@ -325,7 +416,7 @@ class TrigoGame {
|
|
| 325 |
if (capturedPositions.length > 0 && this.callbacks.onCapture) {
|
| 326 |
this.callbacks.onCapture(capturedPositions);
|
| 327 |
}
|
| 328 |
-
if (this.
|
| 329 |
this.callbacks.onTerritoryChange(this.getTerritory());
|
| 330 |
}
|
| 331 |
return true;
|
|
@@ -444,8 +535,8 @@ class TrigoGame {
|
|
| 444 |
else {
|
| 445 |
this.lastCapturedPositions = null;
|
| 446 |
}
|
| 447 |
-
//
|
| 448 |
-
this.
|
| 449 |
// Trigger callback
|
| 450 |
if (this.callbacks.onStepBack) {
|
| 451 |
this.callbacks.onStepBack(lastStep, this.stepHistory.slice(0, this.currentStepIndex));
|
|
@@ -483,8 +574,8 @@ class TrigoGame {
|
|
| 483 |
// Move forward in history
|
| 484 |
this.currentStepIndex++;
|
| 485 |
this.currentPlayer = (0, gameUtils_1.getEnemyColor)(nextStep.player); // Switch to next player
|
| 486 |
-
//
|
| 487 |
-
this.
|
| 488 |
// Trigger callback
|
| 489 |
if (this.callbacks.onStepAdvance) {
|
| 490 |
this.callbacks.onStepAdvance(nextStep, this.stepHistory.slice(0, this.currentStepIndex));
|
|
@@ -554,8 +645,8 @@ class TrigoGame {
|
|
| 554 |
this.currentPlayer = movesPlayed % 2 === 0 ? gameUtils_1.StoneType.BLACK : gameUtils_1.StoneType.WHITE;
|
| 555 |
// Recalculate pass count based on new history position
|
| 556 |
this.recalculatePassCount();
|
| 557 |
-
//
|
| 558 |
-
this.
|
| 559 |
// Trigger callback based on direction
|
| 560 |
if (index < oldStepIndex && this.callbacks.onStepBack) {
|
| 561 |
const currentStep = this.stepHistory[index];
|
|
@@ -593,10 +684,8 @@ class TrigoGame {
|
|
| 593 |
* Returns cached result if territory hasn't changed
|
| 594 |
*/
|
| 595 |
getTerritory() {
|
| 596 |
-
if (
|
| 597 |
this.cachedTerritory = (0, gameUtils_1.calculateTerritory)(this.board, this.shape);
|
| 598 |
-
this.territoryDirty = false;
|
| 599 |
-
}
|
| 600 |
return this.cachedTerritory;
|
| 601 |
}
|
| 602 |
/**
|
|
@@ -665,8 +754,7 @@ class TrigoGame {
|
|
| 665 |
else {
|
| 666 |
this.lastCapturedPositions = null;
|
| 667 |
}
|
| 668 |
-
this.
|
| 669 |
-
this.cachedTerritory = null;
|
| 670 |
return true;
|
| 671 |
}
|
| 672 |
catch (error) {
|
|
|
|
| 46 |
constructor(shape = { x: 5, y: 5, z: 5 }, callbacks = {}) {
|
| 47 |
// Last captured stones for Ko rule detection
|
| 48 |
this.lastCapturedPositions = null;
|
| 49 |
+
// Static analysis cache (territory, capturing moves)
|
| 50 |
+
// Invalidated on any board state change
|
| 51 |
this.cachedTerritory = null;
|
| 52 |
+
this.cachedCapturingMove = new Map();
|
| 53 |
this.shape = shape;
|
| 54 |
this.callbacks = callbacks;
|
| 55 |
this.board = this.createEmptyBoard();
|
|
|
|
| 86 |
this.stepHistory = [];
|
| 87 |
this.currentStepIndex = 0;
|
| 88 |
this.lastCapturedPositions = null;
|
| 89 |
+
this.invalidateAnalysisCache();
|
|
|
|
| 90 |
this.gameStatus = "idle";
|
| 91 |
this.gameResult = undefined;
|
| 92 |
this.passCount = 0;
|
| 93 |
}
|
| 94 |
+
/**
|
| 95 |
+
* Invalidate all static analysis caches
|
| 96 |
+
* Called when board state changes
|
| 97 |
+
*/
|
| 98 |
+
invalidateAnalysisCache() {
|
| 99 |
+
this.cachedTerritory = null;
|
| 100 |
+
this.cachedCapturingMove.clear();
|
| 101 |
+
}
|
| 102 |
/**
|
| 103 |
* Clone the game state (deep copy)
|
| 104 |
* Creates an independent copy with all state preserved
|
|
|
|
| 131 |
score: this.gameResult.score ? { ...this.gameResult.score } : undefined
|
| 132 |
};
|
| 133 |
}
|
| 134 |
+
// Analysis cache will be recalculated on demand
|
| 135 |
+
cloned.invalidateAnalysisCache();
|
|
|
|
| 136 |
return cloned;
|
| 137 |
}
|
| 138 |
/**
|
|
|
|
| 287 |
}
|
| 288 |
return validPositions;
|
| 289 |
}
|
| 290 |
+
/**
|
| 291 |
+
* Check if any valid move can capture enemy stones
|
| 292 |
+
* Used by MCTS to determine if a position is truly terminal
|
| 293 |
+
*
|
| 294 |
+
* Results are cached and invalidated when board state changes.
|
| 295 |
+
*
|
| 296 |
+
* @param player - Optional player color (defaults to current player)
|
| 297 |
+
* @returns true if at least one valid move would capture stones
|
| 298 |
+
*/
|
| 299 |
+
hasCapturingMove(player) {
|
| 300 |
+
const playerColor = player ?? this.currentPlayer;
|
| 301 |
+
// Check cache first
|
| 302 |
+
if (this.cachedCapturingMove.has(playerColor)) {
|
| 303 |
+
return this.cachedCapturingMove.get(playerColor);
|
| 304 |
+
}
|
| 305 |
+
// Compute and cache the result
|
| 306 |
+
const result = this.computeHasCapturingMove(playerColor);
|
| 307 |
+
this.cachedCapturingMove.set(playerColor, result);
|
| 308 |
+
return result;
|
| 309 |
+
}
|
| 310 |
+
/**
|
| 311 |
+
* Internal: Compute whether a player has any capturing move
|
| 312 |
+
*/
|
| 313 |
+
computeHasCapturingMove(playerColor) {
|
| 314 |
+
// Iterate through all board positions
|
| 315 |
+
for (let x = 0; x < this.shape.x; x++) {
|
| 316 |
+
for (let y = 0; y < this.shape.y; y++) {
|
| 317 |
+
for (let z = 0; z < this.shape.z; z++) {
|
| 318 |
+
// Skip occupied positions
|
| 319 |
+
if (this.board[x][y][z] !== gameUtils_1.StoneType.EMPTY) {
|
| 320 |
+
continue;
|
| 321 |
+
}
|
| 322 |
+
const pos = { x, y, z };
|
| 323 |
+
// Skip invalid moves (Ko, suicide)
|
| 324 |
+
if ((0, gameUtils_1.isKoViolation)(pos, playerColor, this.board, this.shape, this.lastCapturedPositions)) {
|
| 325 |
+
continue;
|
| 326 |
+
}
|
| 327 |
+
if ((0, gameUtils_1.isSuicideMove)(pos, playerColor, this.board, this.shape)) {
|
| 328 |
+
continue;
|
| 329 |
+
}
|
| 330 |
+
// Check if this move would capture any stones
|
| 331 |
+
const capturedGroups = (0, gameUtils_1.findCapturedGroups)(pos, playerColor, this.board, this.shape);
|
| 332 |
+
if (capturedGroups.length > 0) {
|
| 333 |
+
return true; // Found a capturing move
|
| 334 |
+
}
|
| 335 |
+
}
|
| 336 |
+
}
|
| 337 |
+
}
|
| 338 |
+
return false; // No capturing moves available
|
| 339 |
+
}
|
| 340 |
+
/**
|
| 341 |
+
* Check if the game has reached a natural terminal state
|
| 342 |
+
*
|
| 343 |
+
* A game is naturally terminal when:
|
| 344 |
+
* - All territory is claimed (neutral === 0)
|
| 345 |
+
* - AND neither player has any capturing moves available
|
| 346 |
+
*
|
| 347 |
+
* This is different from the "finished" status which requires double pass.
|
| 348 |
+
* Natural termination means the game state is completely settled and
|
| 349 |
+
* no further moves can meaningfully change the outcome.
|
| 350 |
+
*
|
| 351 |
+
* NOTE: This method is expensive due to territory calculation and capture move checking.
|
| 352 |
+
* Use coverage ratio check as a pre-filter when calling frequently.
|
| 353 |
+
*
|
| 354 |
+
* Used by:
|
| 355 |
+
* - MCTS agent (terminal detection for tree search)
|
| 356 |
+
* - Model battle (early stopping when settled)
|
| 357 |
+
* - Self-play games (early stopping when settled)
|
| 358 |
+
*
|
| 359 |
+
* @returns true if the game is naturally terminal, false otherwise
|
| 360 |
+
*/
|
| 361 |
+
isNaturallyTerminal() {
|
| 362 |
+
// Check if all territory is claimed (uses cached territory)
|
| 363 |
+
const territory = this.getTerritory();
|
| 364 |
+
if (territory.neutral !== 0) {
|
| 365 |
+
return false; // Still has neutral territory - not terminal
|
| 366 |
+
}
|
| 367 |
+
// All territory claimed - check if capturing moves are possible
|
| 368 |
+
// IMPORTANT: Check even if one player has no stones - they might still capture!
|
| 369 |
+
const blackCanCapture = this.hasCapturingMove(gameUtils_1.StoneType.BLACK);
|
| 370 |
+
const whiteCanCapture = this.hasCapturingMove(gameUtils_1.StoneType.WHITE);
|
| 371 |
+
// Terminal only if neither player can capture
|
| 372 |
+
return !blackCanCapture && !whiteCanCapture;
|
| 373 |
+
}
|
| 374 |
/**
|
| 375 |
* Reset pass count (called when a stone is placed)
|
| 376 |
*/
|
|
|
|
| 398 |
const capturedPositions = (0, gameUtils_1.executeCaptures)(capturedGroups, this.board);
|
| 399 |
// Store captured positions for Ko rule
|
| 400 |
this.lastCapturedPositions = capturedPositions.length > 0 ? capturedPositions : null;
|
| 401 |
+
// Invalidate analysis cache
|
| 402 |
+
this.invalidateAnalysisCache();
|
| 403 |
// Reset pass count when a stone is placed
|
| 404 |
this.resetPassCount();
|
| 405 |
// Create step record
|
|
|
|
| 416 |
if (capturedPositions.length > 0 && this.callbacks.onCapture) {
|
| 417 |
this.callbacks.onCapture(capturedPositions);
|
| 418 |
}
|
| 419 |
+
if (this.callbacks.onTerritoryChange) {
|
| 420 |
this.callbacks.onTerritoryChange(this.getTerritory());
|
| 421 |
}
|
| 422 |
return true;
|
|
|
|
| 535 |
else {
|
| 536 |
this.lastCapturedPositions = null;
|
| 537 |
}
|
| 538 |
+
// Invalidate analysis cache
|
| 539 |
+
this.invalidateAnalysisCache();
|
| 540 |
// Trigger callback
|
| 541 |
if (this.callbacks.onStepBack) {
|
| 542 |
this.callbacks.onStepBack(lastStep, this.stepHistory.slice(0, this.currentStepIndex));
|
|
|
|
| 574 |
// Move forward in history
|
| 575 |
this.currentStepIndex++;
|
| 576 |
this.currentPlayer = (0, gameUtils_1.getEnemyColor)(nextStep.player); // Switch to next player
|
| 577 |
+
// Invalidate analysis cache
|
| 578 |
+
this.invalidateAnalysisCache();
|
| 579 |
// Trigger callback
|
| 580 |
if (this.callbacks.onStepAdvance) {
|
| 581 |
this.callbacks.onStepAdvance(nextStep, this.stepHistory.slice(0, this.currentStepIndex));
|
|
|
|
| 645 |
this.currentPlayer = movesPlayed % 2 === 0 ? gameUtils_1.StoneType.BLACK : gameUtils_1.StoneType.WHITE;
|
| 646 |
// Recalculate pass count based on new history position
|
| 647 |
this.recalculatePassCount();
|
| 648 |
+
// Invalidate analysis cache
|
| 649 |
+
this.invalidateAnalysisCache();
|
| 650 |
// Trigger callback based on direction
|
| 651 |
if (index < oldStepIndex && this.callbacks.onStepBack) {
|
| 652 |
const currentStep = this.stepHistory[index];
|
|
|
|
| 684 |
* Returns cached result if territory hasn't changed
|
| 685 |
*/
|
| 686 |
getTerritory() {
|
| 687 |
+
if (!this.cachedTerritory)
|
| 688 |
this.cachedTerritory = (0, gameUtils_1.calculateTerritory)(this.board, this.shape);
|
|
|
|
|
|
|
| 689 |
return this.cachedTerritory;
|
| 690 |
}
|
| 691 |
/**
|
|
|
|
| 754 |
else {
|
| 755 |
this.lastCapturedPositions = null;
|
| 756 |
}
|
| 757 |
+
this.invalidateAnalysisCache();
|
|
|
|
| 758 |
return true;
|
| 759 |
}
|
| 760 |
catch (error) {
|
trigo-web/backend/dist/inc/trigo/game.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"game.js","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
|
|
|
|
| 1 |
+
{"version":3,"file":"game.js","sourceRoot":"","sources":["../../../../inc/trigo/game.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/dist/inc/trigoTreeAgent.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface ScoredMove {
|
|
| 14 |
}
|
| 15 |
export declare class TrigoTreeAgent {
|
| 16 |
private inferencer;
|
|
|
|
| 17 |
constructor(inferencer: ModelInferencer);
|
| 18 |
/**
|
| 19 |
* Convert Stone type to player string
|
|
@@ -68,10 +69,22 @@ export declare class TrigoTreeAgent {
|
|
| 68 |
}>;
|
| 69 |
};
|
| 70 |
/**
|
| 71 |
-
* Select
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
* Evaluates all valid moves in a single inference call
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
*/
|
| 74 |
-
|
| 75 |
/**
|
| 76 |
* Score all moves using tree attention (batch evaluation)
|
| 77 |
*/
|
|
|
|
| 14 |
}
|
| 15 |
export declare class TrigoTreeAgent {
|
| 16 |
private inferencer;
|
| 17 |
+
private readonly START_TOKEN;
|
| 18 |
constructor(inferencer: ModelInferencer);
|
| 19 |
/**
|
| 20 |
* Convert Stone type to player string
|
|
|
|
| 69 |
}>;
|
| 70 |
};
|
| 71 |
/**
|
| 72 |
+
* Select move using tree attention with optional temperature sampling
|
| 73 |
+
* @param game Current game state
|
| 74 |
+
* @param temperature Sampling temperature (0 = greedy, higher = more random)
|
| 75 |
+
* @returns Selected move (position or Pass if no valid positions)
|
| 76 |
+
*/
|
| 77 |
+
selectMove(game: TrigoGame, temperature?: number): Promise<Move>;
|
| 78 |
+
/**
|
| 79 |
+
* Select best move using tree attention (greedy, temperature=0)
|
| 80 |
* Evaluates all valid moves in a single inference call
|
| 81 |
+
* Pass is excluded from model prediction - returned directly if no positions available
|
| 82 |
+
*/
|
| 83 |
+
selectBestMove(game: TrigoGame): Promise<Move>;
|
| 84 |
+
/**
|
| 85 |
+
* Sample a move from scored moves using temperature
|
| 86 |
*/
|
| 87 |
+
private sampleMove;
|
| 88 |
/**
|
| 89 |
* Score all moves using tree attention (batch evaluation)
|
| 90 |
*/
|
trigo-web/backend/dist/inc/trigoTreeAgent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"trigoTreeAgent.d.ts","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,UAAU,CAAkB;
|
|
|
|
| 1 |
+
{"version":3,"file":"trigoTreeAgent.d.ts","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,UAAU,CAAkB;IAGpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;gBAErB,UAAU,EAAE,eAAe;IAIvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,eAAe;IAiGvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4ErB;;OAEG;IACH,gBAAgB,CACf,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,IAAI,EAAE,GACX;QACF,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7B,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnE;IAID;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCzE;;;;OAIG;IACG,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA+KvE"}
|
trigo-web/backend/dist/inc/trigoTreeAgent.js
CHANGED
|
@@ -11,6 +11,8 @@ const game_1 = require("./trigo/game");
|
|
| 11 |
const ab0yz_1 = require("./trigo/ab0yz");
|
| 12 |
class TrigoTreeAgent {
|
| 13 |
constructor(inferencer) {
|
|
|
|
|
|
|
| 14 |
this.inferencer = inferencer;
|
| 15 |
}
|
| 16 |
/**
|
|
@@ -122,6 +124,8 @@ class TrigoTreeAgent {
|
|
| 122 |
}
|
| 123 |
for (const r of roots)
|
| 124 |
dfs(r);
|
|
|
|
|
|
|
| 125 |
// --- Build ancestor mask ---
|
| 126 |
const mask = new Array(total * total).fill(0);
|
| 127 |
for (let i = 0; i < total; i++) {
|
|
@@ -164,7 +168,7 @@ class TrigoTreeAgent {
|
|
| 164 |
// Last line has moves, add space
|
| 165 |
prefix = currentTGN + " ";
|
| 166 |
}
|
| 167 |
-
const prefixTokens = this.stringToTokens(prefix);
|
| 168 |
// Encode each move to tokens (only first 2 tokens)
|
| 169 |
const shape = game.getShape();
|
| 170 |
const movesWithTokens = moves.map((move) => {
|
|
@@ -179,6 +183,8 @@ class TrigoTreeAgent {
|
|
| 179 |
throw new Error("Invalid move: missing coordinates");
|
| 180 |
}
|
| 181 |
// Exclude the last token
|
|
|
|
|
|
|
| 182 |
const fullTokens = this.stringToTokens(notation);
|
| 183 |
const tokens = fullTokens.slice(0, fullTokens.length - 1);
|
| 184 |
return { move, notation, tokens };
|
|
@@ -204,34 +210,76 @@ class TrigoTreeAgent {
|
|
| 204 |
return this.buildMoveTree(game, moves);
|
| 205 |
}
|
| 206 |
/**
|
| 207 |
-
* Select
|
| 208 |
-
*
|
|
|
|
|
|
|
| 209 |
*/
|
| 210 |
-
async
|
| 211 |
if (!this.inferencer.isReady()) {
|
| 212 |
throw new Error("Inferencer not initialized");
|
| 213 |
}
|
| 214 |
// Get current player as string
|
| 215 |
const currentPlayer = this.stoneToPlayer(game.getCurrentPlayer());
|
| 216 |
-
// Get all valid moves
|
| 217 |
const validMoves = game.validMovePositions().map((pos) => ({
|
| 218 |
x: pos.x,
|
| 219 |
y: pos.y,
|
| 220 |
z: pos.z,
|
| 221 |
player: currentPlayer
|
| 222 |
}));
|
| 223 |
-
|
| 224 |
if (validMoves.length === 0) {
|
| 225 |
-
return
|
| 226 |
}
|
| 227 |
-
// Score
|
| 228 |
const scoredMoves = await this.scoreMoves(game, validMoves);
|
| 229 |
-
//
|
| 230 |
if (scoredMoves.length === 0) {
|
| 231 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 232 |
}
|
| 233 |
-
|
| 234 |
-
return scoredMoves
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
}
|
| 236 |
/**
|
| 237 |
* Score all moves using tree attention (batch evaluation)
|
|
@@ -242,19 +290,6 @@ class TrigoTreeAgent {
|
|
| 242 |
}
|
| 243 |
// Build tree structure
|
| 244 |
const { prefixTokens, evaluatedIds, mask, parent, moveData } = this.buildMoveTree(game, moves);
|
| 245 |
-
// Validate parent array structure
|
| 246 |
-
for (let i = 0; i < parent.length; i++) {
|
| 247 |
-
const p = parent[i];
|
| 248 |
-
if (p !== null && (p < 0 || p >= parent.length)) {
|
| 249 |
-
throw new Error(`Invalid parent array: parent[${i}] = ${p}, but array length is ${parent.length}`);
|
| 250 |
-
}
|
| 251 |
-
}
|
| 252 |
-
// Validate leafPos in moveData
|
| 253 |
-
for (const data of moveData) {
|
| 254 |
-
if (data.leafPos < 0 || data.leafPos >= parent.length) {
|
| 255 |
-
throw new Error(`Invalid leafPos: ${data.leafPos} for move ${data.notation}, parent array length: ${parent.length}`);
|
| 256 |
-
}
|
| 257 |
-
}
|
| 258 |
//console.debug(`Tree structure: ${evaluatedIds.length} nodes for ${moveData.length} moves`);
|
| 259 |
//console.debug(`Evaluated IDs:`, evaluatedIds.map((id) => String.fromCharCode(id)).join(""));
|
| 260 |
//console.debug(
|
|
@@ -287,6 +322,28 @@ class TrigoTreeAgent {
|
|
| 287 |
};
|
| 288 |
for (const data of moveData) {
|
| 289 |
let logProb = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
// Build path from leaf to root using parent array, then reverse
|
| 291 |
const pathReverse = [];
|
| 292 |
let pos = data.leafPos;
|
|
|
|
| 11 |
const ab0yz_1 = require("./trigo/ab0yz");
|
| 12 |
class TrigoTreeAgent {
|
| 13 |
constructor(inferencer) {
|
| 14 |
+
// Special token constants (must match TGN tokenizer)
|
| 15 |
+
this.START_TOKEN = 1;
|
| 16 |
this.inferencer = inferencer;
|
| 17 |
}
|
| 18 |
/**
|
|
|
|
| 124 |
}
|
| 125 |
for (const r of roots)
|
| 126 |
dfs(r);
|
| 127 |
+
// NOTE: moveToLeafPos[i] = -1 means the move has empty tokens (e.g., single-char notation)
|
| 128 |
+
// In this case, we use prefix logits directly for scoring (valid behavior)
|
| 129 |
// --- Build ancestor mask ---
|
| 130 |
const mask = new Array(total * total).fill(0);
|
| 131 |
for (let i = 0; i < total; i++) {
|
|
|
|
| 168 |
// Last line has moves, add space
|
| 169 |
prefix = currentTGN + " ";
|
| 170 |
}
|
| 171 |
+
const prefixTokens = [this.START_TOKEN, ...this.stringToTokens(prefix)];
|
| 172 |
// Encode each move to tokens (only first 2 tokens)
|
| 173 |
const shape = game.getShape();
|
| 174 |
const movesWithTokens = moves.map((move) => {
|
|
|
|
| 183 |
throw new Error("Invalid move: missing coordinates");
|
| 184 |
}
|
| 185 |
// Exclude the last token
|
| 186 |
+
// For single-char notations, this results in empty tokens array,
|
| 187 |
+
// which means we use prefix logits directly for scoring
|
| 188 |
const fullTokens = this.stringToTokens(notation);
|
| 189 |
const tokens = fullTokens.slice(0, fullTokens.length - 1);
|
| 190 |
return { move, notation, tokens };
|
|
|
|
| 210 |
return this.buildMoveTree(game, moves);
|
| 211 |
}
|
| 212 |
/**
|
| 213 |
+
* Select move using tree attention with optional temperature sampling
|
| 214 |
+
* @param game Current game state
|
| 215 |
+
* @param temperature Sampling temperature (0 = greedy, higher = more random)
|
| 216 |
+
* @returns Selected move (position or Pass if no valid positions)
|
| 217 |
*/
|
| 218 |
+
async selectMove(game, temperature = 0) {
|
| 219 |
if (!this.inferencer.isReady()) {
|
| 220 |
throw new Error("Inferencer not initialized");
|
| 221 |
}
|
| 222 |
// Get current player as string
|
| 223 |
const currentPlayer = this.stoneToPlayer(game.getCurrentPlayer());
|
| 224 |
+
// Get all valid position moves (excluding Pass)
|
| 225 |
const validMoves = game.validMovePositions().map((pos) => ({
|
| 226 |
x: pos.x,
|
| 227 |
y: pos.y,
|
| 228 |
z: pos.z,
|
| 229 |
player: currentPlayer
|
| 230 |
}));
|
| 231 |
+
// If no position moves available, return Pass directly
|
| 232 |
if (validMoves.length === 0) {
|
| 233 |
+
return { player: currentPlayer, isPass: true };
|
| 234 |
}
|
| 235 |
+
// Score only position moves (Pass excluded from inference)
|
| 236 |
const scoredMoves = await this.scoreMoves(game, validMoves);
|
| 237 |
+
// Fallback to Pass if scoring fails
|
| 238 |
if (scoredMoves.length === 0) {
|
| 239 |
+
return { player: currentPlayer, isPass: true };
|
| 240 |
+
}
|
| 241 |
+
// Select move based on temperature
|
| 242 |
+
if (temperature <= 0.01) {
|
| 243 |
+
// Greedy selection (use reduce to avoid mutating scoredMoves)
|
| 244 |
+
const best = scoredMoves.reduce((a, b) => (b.score > a.score ? b : a));
|
| 245 |
+
return best.move;
|
| 246 |
}
|
| 247 |
+
// Temperature sampling
|
| 248 |
+
return this.sampleMove(scoredMoves, temperature);
|
| 249 |
+
}
|
| 250 |
+
/**
|
| 251 |
+
* Select best move using tree attention (greedy, temperature=0)
|
| 252 |
+
* Evaluates all valid moves in a single inference call
|
| 253 |
+
* Pass is excluded from model prediction - returned directly if no positions available
|
| 254 |
+
*/
|
| 255 |
+
async selectBestMove(game) {
|
| 256 |
+
return this.selectMove(game, 0);
|
| 257 |
+
}
|
| 258 |
+
/**
|
| 259 |
+
* Sample a move from scored moves using temperature
|
| 260 |
+
*/
|
| 261 |
+
sampleMove(scoredMoves, temperature) {
|
| 262 |
+
// Apply temperature scaling to log probabilities
|
| 263 |
+
const adjustedScores = scoredMoves.map((m) => m.score / temperature);
|
| 264 |
+
const maxScore = Math.max(...adjustedScores);
|
| 265 |
+
const expScores = adjustedScores.map((score) => Math.exp(score - maxScore));
|
| 266 |
+
const sumExp = expScores.reduce((sum, exp) => sum + exp, 0);
|
| 267 |
+
if (sumExp === 0 || !isFinite(sumExp)) {
|
| 268 |
+
// Fallback to uniform random
|
| 269 |
+
const idx = Math.floor(Math.random() * scoredMoves.length);
|
| 270 |
+
return scoredMoves[idx].move;
|
| 271 |
+
}
|
| 272 |
+
const probabilities = expScores.map((exp) => exp / sumExp);
|
| 273 |
+
// Weighted random sampling
|
| 274 |
+
const random = Math.random();
|
| 275 |
+
let cumulative = 0;
|
| 276 |
+
for (let i = 0; i < scoredMoves.length; i++) {
|
| 277 |
+
cumulative += probabilities[i];
|
| 278 |
+
if (random <= cumulative) {
|
| 279 |
+
return scoredMoves[i].move;
|
| 280 |
+
}
|
| 281 |
+
}
|
| 282 |
+
return scoredMoves[scoredMoves.length - 1].move;
|
| 283 |
}
|
| 284 |
/**
|
| 285 |
* Score all moves using tree attention (batch evaluation)
|
|
|
|
| 290 |
}
|
| 291 |
// Build tree structure
|
| 292 |
const { prefixTokens, evaluatedIds, mask, parent, moveData } = this.buildMoveTree(game, moves);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
//console.debug(`Tree structure: ${evaluatedIds.length} nodes for ${moveData.length} moves`);
|
| 294 |
//console.debug(`Evaluated IDs:`, evaluatedIds.map((id) => String.fromCharCode(id)).join(""));
|
| 295 |
//console.debug(
|
|
|
|
| 322 |
};
|
| 323 |
for (const data of moveData) {
|
| 324 |
let logProb = 0;
|
| 325 |
+
// Special case: leafPos = -1 means empty tokens (single-char notation)
|
| 326 |
+
// Use prefix logits directly to predict the single character
|
| 327 |
+
if (data.leafPos === -1) {
|
| 328 |
+
const notationTokens = this.stringToTokens(data.notation);
|
| 329 |
+
if (notationTokens.length === 1) {
|
| 330 |
+
// Single-char notation: use prefix output (logits[0]) to predict it
|
| 331 |
+
const token = notationTokens[0];
|
| 332 |
+
const probs = getSoftmax(0); // Prefix output
|
| 333 |
+
const prob = Math.max(probs[token], MIN_PROB);
|
| 334 |
+
logProb = Math.log(prob);
|
| 335 |
+
}
|
| 336 |
+
else {
|
| 337 |
+
console.error(`Unexpected: leafPos=-1 but notation length=${notationTokens.length}`);
|
| 338 |
+
logProb = Math.log(MIN_PROB);
|
| 339 |
+
}
|
| 340 |
+
scoredMoves.push({
|
| 341 |
+
move: data.move,
|
| 342 |
+
score: logProb,
|
| 343 |
+
notation: data.notation
|
| 344 |
+
});
|
| 345 |
+
continue; // Skip the normal path processing
|
| 346 |
+
}
|
| 347 |
// Build path from leaf to root using parent array, then reverse
|
| 348 |
const pathReverse = [];
|
| 349 |
let pos = data.leafPos;
|
trigo-web/backend/dist/inc/trigoTreeAgent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"trigoTreeAgent.js","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"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"}
|
|
|
|
| 1 |
+
{"version":3,"file":"trigoTreeAgent.js","sourceRoot":"","sources":["../../../inc/trigoTreeAgent.ts"],"names":[],"mappings":"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"}
|
trigo-web/backend/src/services/gameManager.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface GameState {
|
|
| 16 |
|
| 17 |
export interface GameRoom {
|
| 18 |
id: string;
|
|
|
|
| 19 |
adminId: string; // Room creator who has admin permissions
|
| 20 |
players: { [playerId: string]: Player };
|
| 21 |
game: TrigoGame; // The actual game instance
|
|
@@ -42,6 +43,7 @@ export class GameManager {
|
|
| 42 |
|
| 43 |
const room: GameRoom = {
|
| 44 |
id: roomId,
|
|
|
|
| 45 |
adminId: playerId, // Room creator is admin
|
| 46 |
players: {
|
| 47 |
[playerId]: {
|
|
@@ -326,6 +328,40 @@ export class GameManager {
|
|
| 326 |
return { success: true };
|
| 327 |
}
|
| 328 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
/**
|
| 330 |
* Get game board state for a room
|
| 331 |
*/
|
|
|
|
| 16 |
|
| 17 |
export interface GameRoom {
|
| 18 |
id: string;
|
| 19 |
+
name: string; // Human-readable room name
|
| 20 |
adminId: string; // Room creator who has admin permissions
|
| 21 |
players: { [playerId: string]: Player };
|
| 22 |
game: TrigoGame; // The actual game instance
|
|
|
|
| 43 |
|
| 44 |
const room: GameRoom = {
|
| 45 |
id: roomId,
|
| 46 |
+
name: `${nickname}'s room`, // Initialize room name with creator's nickname
|
| 47 |
adminId: playerId, // Room creator is admin
|
| 48 |
players: {
|
| 49 |
[playerId]: {
|
|
|
|
| 328 |
return { success: true };
|
| 329 |
}
|
| 330 |
|
| 331 |
+
|
| 332 |
+
/**
|
| 333 |
+
* Rename a room
|
| 334 |
+
* Only admin can rename the room
|
| 335 |
+
*/
|
| 336 |
+
renameRoom(
|
| 337 |
+
roomId: string,
|
| 338 |
+
playerId: string,
|
| 339 |
+
newName: string
|
| 340 |
+
): { success: boolean; error?: string } {
|
| 341 |
+
const room = this.rooms.get(roomId);
|
| 342 |
+
if (!room) return { success: false, error: "Room not found" };
|
| 343 |
+
|
| 344 |
+
// Check admin permission
|
| 345 |
+
if (room.adminId !== playerId) {
|
| 346 |
+
return { success: false, error: "Only room admin can rename the room" };
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
// Validate room name
|
| 350 |
+
const trimmedName = newName.trim();
|
| 351 |
+
if (trimmedName.length === 0) {
|
| 352 |
+
return { success: false, error: "Room name cannot be empty" };
|
| 353 |
+
}
|
| 354 |
+
if (trimmedName.length > 50) {
|
| 355 |
+
return { success: false, error: "Room name cannot exceed 50 characters" };
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
room.name = trimmedName;
|
| 359 |
+
console.log(`Room ${roomId} renamed to: ${trimmedName}`);
|
| 360 |
+
|
| 361 |
+
return { success: true };
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
|
| 365 |
/**
|
| 366 |
* Get game board state for a room
|
| 367 |
*/
|
trigo-web/backend/src/sockets/gameSocket.ts
CHANGED
|
@@ -6,6 +6,7 @@ function getRoomSummary(room: any) {
|
|
| 6 |
const connectedPlayers = Object.values(room.players).filter((p: any) => p.connected);
|
| 7 |
return {
|
| 8 |
id: room.id,
|
|
|
|
| 9 |
playerCount: connectedPlayers.length,
|
| 10 |
maxPlayers: 2,
|
| 11 |
status: room.gameState.gameStatus,
|
|
@@ -121,6 +122,7 @@ export function setupSocketHandlers(io: Server, socket: Socket, gameManager: Gam
|
|
| 121 |
const response = {
|
| 122 |
success: true,
|
| 123 |
roomId: room.id,
|
|
|
|
| 124 |
playerId: socket.id,
|
| 125 |
playerColor: room.players[socket.id]?.color,
|
| 126 |
isAdmin: room.adminId === socket.id,
|
|
@@ -484,6 +486,42 @@ export function setupSocketHandlers(io: Server, socket: Socket, gameManager: Gam
|
|
| 484 |
}
|
| 485 |
);
|
| 486 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 487 |
// Handle disconnection
|
| 488 |
socket.on("disconnect", () => {
|
| 489 |
console.log(`Client disconnected: ${socket.id}`);
|
|
|
|
| 6 |
const connectedPlayers = Object.values(room.players).filter((p: any) => p.connected);
|
| 7 |
return {
|
| 8 |
id: room.id,
|
| 9 |
+
name: room.name,
|
| 10 |
playerCount: connectedPlayers.length,
|
| 11 |
maxPlayers: 2,
|
| 12 |
status: room.gameState.gameStatus,
|
|
|
|
| 122 |
const response = {
|
| 123 |
success: true,
|
| 124 |
roomId: room.id,
|
| 125 |
+
roomName: room.name,
|
| 126 |
playerId: socket.id,
|
| 127 |
playerColor: room.players[socket.id]?.color,
|
| 128 |
isAdmin: room.adminId === socket.id,
|
|
|
|
| 486 |
}
|
| 487 |
);
|
| 488 |
|
| 489 |
+
|
| 490 |
+
// Rename room
|
| 491 |
+
socket.on(
|
| 492 |
+
"renameRoom",
|
| 493 |
+
(data: { name: string }, callback?: (response: any) => void) => {
|
| 494 |
+
const room = gameManager.getPlayerRoom(socket.id);
|
| 495 |
+
|
| 496 |
+
if (!room) {
|
| 497 |
+
if (callback) callback({ success: false, error: "Not in a room", errorCode: "NOT_IN_ROOM" });
|
| 498 |
+
return;
|
| 499 |
+
}
|
| 500 |
+
|
| 501 |
+
const result = gameManager.renameRoom(room.id, socket.id, data.name);
|
| 502 |
+
|
| 503 |
+
if (result.success) {
|
| 504 |
+
// Broadcast to all players in room
|
| 505 |
+
io.to(room.id).emit("roomRenamed", {
|
| 506 |
+
roomId: room.id,
|
| 507 |
+
name: room.name
|
| 508 |
+
});
|
| 509 |
+
|
| 510 |
+
// Broadcast room update to all sockets (for room list)
|
| 511 |
+
io.emit("roomUpdated", getRoomSummary(room));
|
| 512 |
+
|
| 513 |
+
if (callback) callback({ success: true, name: room.name });
|
| 514 |
+
} else {
|
| 515 |
+
if (callback) callback({
|
| 516 |
+
success: false,
|
| 517 |
+
error: result.error,
|
| 518 |
+
errorCode: result.error === "Only room admin can rename the room" ? "NOT_ADMIN" : "RENAME_FAILED"
|
| 519 |
+
});
|
| 520 |
+
}
|
| 521 |
+
}
|
| 522 |
+
);
|
| 523 |
+
|
| 524 |
+
|
| 525 |
// Handle disconnection
|
| 526 |
socket.on("disconnect", () => {
|
| 527 |
console.log(`Client disconnected: ${socket.id}`);
|