fix: Hex Wars - Kopf nach Mine korrekt, volles Grid bei Spielende
This commit is contained in:
@@ -175,10 +175,16 @@ function getGameForUser(id, requesterId) {
|
||||
|
||||
if (!terrain.length) return { ...game, myScore:0, oppScore:0 };
|
||||
|
||||
// Fog anwenden
|
||||
const visible = computeFog(grid, requesterId);
|
||||
const maskedGrid = grid.map((row,r) => row.map((cell,c) => visible[r][c] ? cell : (cell===requesterId ? cell : 0)));
|
||||
const maskedTerrain = terrain.map((row,r) => row.map((cell,c) => visible[r][c] ? cell : -1));
|
||||
// Bei beendetem Spiel: vollständiges Grid ohne Fog
|
||||
let maskedGrid, maskedTerrain;
|
||||
if (game.status === 'finished') {
|
||||
maskedGrid = grid;
|
||||
maskedTerrain = terrain;
|
||||
} else {
|
||||
const visible = computeFog(grid, requesterId);
|
||||
maskedGrid = grid.map((row,r) => row.map((cell,c) => visible[r][c] ? cell : (cell===requesterId ? cell : 0)));
|
||||
maskedTerrain = terrain.map((row,r) => row.map((cell,c) => visible[r][c] ? cell : -1));
|
||||
}
|
||||
|
||||
// Kopf des anfragenden Spielers mitliefern (für Frontend-Validierung)
|
||||
const myHead = requesterId === game.owner_id ? game.owner_head : game.opp_head;
|
||||
@@ -356,13 +362,15 @@ router.post('/:id/move', authenticate, (req, res) => {
|
||||
let status = 'active';
|
||||
let winnerId = null;
|
||||
|
||||
// Köpfe nach Zug
|
||||
// Effektiver Kopf nach Zug (bei Mine: zurückgesetzter Kopf, sonst neue Position)
|
||||
const oppHeadStr = game.owner_id === me ? game.opp_head : game.owner_head;
|
||||
const [oppHR, oppHC] = oppHeadStr ? oppHeadStr.split(',').map(Number) : [null, null];
|
||||
const myNewHR = row, myNewHC = col;
|
||||
const effectiveMyHeadStr = game.owner_id === me ? newOwnerHead : newOppHead;
|
||||
const [effectiveMyHR, effectiveMyHC] = effectiveMyHeadStr
|
||||
? effectiveMyHeadStr.split(',').map(Number) : [row, col];
|
||||
|
||||
// Spielende: niemand kann mehr ziehen
|
||||
if (!canMove(grid, terrain, opponent, oppHR, oppHC) && !canMove(grid, terrain, me, myNewHR, myNewHC)) {
|
||||
if (!canMove(grid, terrain, opponent, oppHR, oppHC) && !canMove(grid, terrain, me, effectiveMyHR, effectiveMyHC)) {
|
||||
status = 'finished';
|
||||
} else if (!canMove(grid, terrain, opponent, oppHR, oppHC)) {
|
||||
nextTurn = me;
|
||||
|
||||
Reference in New Issue
Block a user