diff --git a/public/room.html b/public/room.html index 8e48f2b1156d849f36375e0ecb2708d84af27739..da191205c4043cf2ad2d4c2d5f77536d1f23db9e 100644 --- a/public/room.html +++ b/public/room.html @@ -27,11 +27,45 @@ const playerName = params.get('name'); const roomId = window.location.pathname.split('/').pop(); + const COLS = 7; + const ROWS = 6; + const CELL_SIZE = 100; + const RADIUS = CELL_SIZE / 2 - 10; + // Initialize game board function drawBoard(board) { // Draw Connect4 grid based on board state + ctx.clearRect(0, 0, canvas.width, canvas.height); + for (let row = 0; row < ROWS; row++) { + for (let col = 0; col < COLS; col++) { + let x = col * CELL_SIZE + CELL_SIZE / 2; + let y = row * CELL_SIZE + CELL_SIZE / 2; + + // Trou + ctx.beginPath(); + ctx.arc(x, y, RADIUS, 0, Math.PI * 2); + ctx.fillStyle = 'white'; + ctx.fill(); + + // Pion + if (board[row][col] !== null) { + ctx.beginPath(); + ctx.arc(x, y, RADIUS, 0, Math.PI * 2); + ctx.fillStyle = board[row][col] === 0 ? 'red' : 'yellow'; + ctx.fill(); + } + } + } } + canvas.addEventListener('click', (e) => { + if (winner !== null) return; + const rect = canvas.getBoundingClientRect(); + const x = e.clientX - rect.left; + const col = Math.floor(x / CELL_SIZE); + socket.emit('move', col); + }); + socket.on('connect', () => { socket.emit('joinRoom', { name: playerName, @@ -40,8 +74,8 @@ }); socket.on('startGame', ({ board, currentPlayer }) => { - const messages = document.getElementById('messages'); - messages.innerHTML += `<div><strong>Game starting</strong></div>`; + const messages = document.getElementById('messages'); + messages.innerHTML += `<div><strong>Game starting</strong></div>`; drawBoard(board); }); @@ -74,79 +108,7 @@ messages.innerHTML += `<div><strong>${name}:</strong> ${message}</div>`; }); - //canvas game - <script src="/socket.io/socket.io.js"></script> -<script> - const socket = io(); - const urlParams = new URLSearchParams(window.location.search); - const roomId = urlParams.get('room') || 'room0'; // par ex. /room.html?room=room2 - const name = prompt("Ton nom ?") || "Player"; - - const COLS = 7; - const ROWS = 6; - const CELL_SIZE = 100; - const RADIUS = CELL_SIZE / 2 - 10; - - let currentPlayer = 0; - let gameState = Array(ROWS).fill().map(() => Array(COLS).fill(null)); - let winner = null; - - const canvas = document.getElementById('gameCanvas'); - const ctx = canvas.getContext('2d'); - - socket.emit('joinRoom', { name, roomId }); - - socket.on('startGame', (data) => { - gameState = data.board; - currentPlayer = data.currentPlayer; - drawBoard(); - }); - - socket.on('updateGame', (data) => { - gameState = data.board; - currentPlayer = data.currentPlayer; - winner = data.winner; - drawBoard(); - if (winner !== null) { - alert(`Le joueur ${winner} a gagné !`); - } - }); - - canvas.addEventListener('click', (e) => { - if (winner !== null) return; - const rect = canvas.getBoundingClientRect(); - const x = e.clientX - rect.left; - const col = Math.floor(x / CELL_SIZE); - socket.emit('move', col); - }); - - function drawBoard() { - ctx.clearRect(0, 0, canvas.width, canvas.height); - for (let row = 0; row < ROWS; row++) { - for (let col = 0; col < COLS; col++) { - let x = col * CELL_SIZE + CELL_SIZE / 2; - let y = row * CELL_SIZE + CELL_SIZE / 2; - - // Trou - ctx.beginPath(); - ctx.arc(x, y, RADIUS, 0, Math.PI * 2); - ctx.fillStyle = 'white'; - ctx.fill(); - - // Pion - if (gameState[row][col] !== null) { - ctx.beginPath(); - ctx.arc(x, y, RADIUS, 0, Math.PI * 2); - ctx.fillStyle = gameState[row][col] === 0 ? 'red' : 'yellow'; - ctx.fill(); - } - } - } - } - drawBoard(); // initial </script> - - </script> </body> </html> \ No newline at end of file diff --git a/server.js b/server.js index a7eeec61e284aab1ff6422e8f23aa9e90e24b83b..056eb348022f376fb70535aed43a7ceb67584c40 100644 --- a/server.js +++ b/server.js @@ -93,6 +93,7 @@ io.on('connection', (socket) => { id: socket.id, name }); + socket.join(roomId); io.emit('updateRooms', rooms); io.to(roomId).emit('updatePlayers', room.players); @@ -128,6 +129,7 @@ io.on('connection', (socket) => { } currentRoom.currentPlayer = 1 - currentRoom.currentPlayer; + socket.join(currentRoom.id) io.to(currentRoom.id).emit('updateGame', { board: currentRoom.gameState, currentPlayer: currentRoom.currentPlayer,