diff --git a/backend/src/tools/gebietseroberung/routes.js b/backend/src/tools/gebietseroberung/routes.js index c74d3ae..0d975ca 100644 --- a/backend/src/tools/gebietseroberung/routes.js +++ b/backend/src/tools/gebietseroberung/routes.js @@ -45,10 +45,17 @@ const T_MINE = 2; const T_ROCK = 3; // ── Terrain generieren ──────────────────────────────────────────────────────── -function generateTerrain() { +function generateTerrain(ownerHead, oppHead) { const t = Array(GRID).fill(null).map(() => Array(GRID).fill(T_NORMAL)); const safe = new Set(); - for (let r=0;r<3;r++) for (let c=0;c<3;c++) { safe.add(`${r},${c}`); safe.add(`${GRID-1-r},${GRID-1-c}`); } + // 3x3 Sicherheitszone um beide Startecken + for (const headStr of [ownerHead, oppHead]) { + const [hr,hc] = headStr.split(',').map(Number); + for (let dr=-2;dr<=2;dr++) for (let dc=-2;dc<=2;dc++) { + const r=hr+dr, c=hc+dc; + if (r>=0&&r=0&&c0;i--) { + const j=Math.floor(Math.random()*(i+1)); + [corners[i],corners[j]]=[corners[j],corners[i]]; + } + const [or,oc] = corners[0]; + const [pr,pc] = corners[1]; const g = Array(GRID).fill(null).map(() => Array(GRID).fill(0)); - g[0][0] = ownerId; - g[GRID-1][GRID-1] = oppId; - return g; + g[or][oc] = ownerId; + g[pr][pc] = oppId; + return { grid:g, ownerHead:`${or},${oc}`, oppHead:`${pr},${pc}` }; } // Prüft ob [row,col] an den Kopf [hr,hc] angrenzt (8 Richtungen) @@ -294,13 +308,13 @@ router.post('/', authenticate, (req, res) => { const opp = db.prepare('SELECT id, username FROM users WHERE id=?').get(opponent_id); if (!opp) return res.status(404).json({ error: 'Benutzer nicht gefunden' }); - const grid = createGrid(me, Number(opponent_id)); - const terrain = generateTerrain(); + const { grid, ownerHead, oppHead } = createGrid(me, Number(opponent_id)); + const terrain = generateTerrain(ownerHead, oppHead); const result = db.prepare(` INSERT INTO geo_games (owner_id, opponent_id, grid, terrain, current_turn, move_count, owner_head, opp_head) VALUES (?, ?, ?, ?, ?, 0, ?, ?) - `).run(me, Number(opponent_id), JSON.stringify(grid), JSON.stringify(terrain), me, '0,0', `${GRID-1},${GRID-1}`); + `).run(me, Number(opponent_id), JSON.stringify(grid), JSON.stringify(terrain), me, ownerHead, oppHead); const myName = db.prepare('SELECT username FROM users WHERE id=?').get(me)?.username || 'Jemand'; sendPush(Number(opponent_id), '⬡ Hex Wars', `${myName} hat dich zu einem Spiel eingeladen! Du bist zuerst dran.`);