diff --git a/public/game.html b/public/game.html
index 4a3a636..65cbd99 100644
--- a/public/game.html
+++ b/public/game.html
@@ -8,15 +8,16 @@
- From:
To:
Promotion:
-
+
Événements
@@ -31,10 +32,11 @@
document.getElementById('roomId').textContent = roomId || '-';
document.getElementById('playerId').textContent = playerId || '-';
- const logEl = document.getElementById('log');
- const fenEl = document.getElementById('fen');
- const playersEl = document.getElementById('players');
- let socket = null;
+ const logEl = document.getElementById('log');
+ const fenEl = document.getElementById('fen');
+ const playersEl = document.getElementById('players');
+ const boardEl = document.getElementById('board');
+ let socket = null;
function log(...args){ logEl.textContent += '\n' + args.map(a=>typeof a==='object'?JSON.stringify(a):a).join(' '); logEl.scrollTop = logEl.scrollHeight; }
@@ -53,10 +55,12 @@
li.textContent = p.id + ' (' + p.color + ')';
playersEl.appendChild(li);
});
+ if(data.fen) renderFen(data.fen);
});
- socket.on('move:moved', (data)=>{ log('move:moved', data); fenEl.textContent = data.fen; });
- socket.on('game:over', (data)=>{ log('game:over', data); fenEl.textContent = data.fen; });
+ socket.on('move:moved', (data)=>{ log('move:moved', data); fenEl.textContent = data.fen; renderFen(data.fen); });
+ socket.on('game:over', (data)=>{ log('game:over', data); fenEl.textContent = data.fen; renderFen(data.fen); });
+ socket.on('game:started', (data)=>{ log('game:started', data); fenEl.textContent = data.fen || '-'; renderFen(data.fen || ''); });
socket.emit('room:join', { roomId, playerId }, (resp)=>{
if(resp && resp.error){ log('join error', resp); alert(resp.error); return; }
@@ -76,6 +80,53 @@
log('move accepted', resp);
});
});
+
+ // Board rendering using provided SVG assets. Accepts FEN.
+ const pieceSetPath = '/assets/chess-pieces/chess_1Kbyte_gambit';
+ // set board background image (if available)
+ boardEl.style.backgroundImage = "url('/assets/chess-pieces/boards/8x8_wood.svg')";
+ boardEl.style.backgroundSize = 'cover';
+ boardEl.style.position = 'relative';
+
+ function renderFen(fen){
+ if(!fen) return;
+ const parts = fen.split(' ');
+ const rows = parts[0].split('/');
+ boardEl.innerHTML = '';
+ for(let r=0;r<8;r++){
+ const row = rows[r];
+ let file = 0;
+ for(let i=0;i