// ===== BACKEND (Node.js + Socket.io) ===== // ADD ROOMS / LOBBY SUPPORT // Each room has its own players state const rooms = {}; // { roomId: { players: {} } } function getRoom(roomId) { if (!rooms[roomId]) { rooms[roomId] = { players: {} }; } return rooms[roomId]; } const express = require("express"); const http = require("http"); const { Server } = require("socket.io"); const app = express(); const server = http.createServer(app); const io = new Server(server); app.use(express.static("public")); let players = {}; const jumps = { 4: 14, 9: 31, 20: 38, 28: 84, 40: 59, 51: 67, 63: 81, 71: 91, 95: 75, 99: 80 }; io.on("connection", (socket) => { let currentRoom = null; socket.on("createRoom", (roomId, name) => { currentRoom = roomId; socket.join(roomId); const room = getRoom(roomId); room.players[socket.id] = { name, coins: 100, frozen: false, boost: false, position: 1 }; io.to(roomId).emit("update", room.players); }); socket.on("joinRoom", (roomId, name) => { currentRoom = roomId; socket.join(roomId); const room = getRoom(roomId); room.players[socket.id] = { name, coins: 100, frozen: false, boost: false, position: 1 }; io.to(roomId).emit("update", room.players); }); socket.on("join", (name) => { players[socket.id] = { name, coins: 100, frozen: false, boost: false, position: 1 }; if (currentRoom) { const room = getRoom(currentRoom); io.to(currentRoom).emit("update", room.players); } }); socket.on("roll", () => { const room = getRoom(currentRoom); const player = room.players[socket.id]; if (!player || player.frozen) return; const player = players[socket.id]; if (!player || player.frozen) return; const dice = Math.floor(Math.random() * 6) + 1; player.position += dice; if (jumps[player.position]) { io.emit("effect", { type: "jump" }); player.position = jumps[player.position]; } let gain = dice * 2; if (player.boost) gain *= 2; player.coins += gain; if (currentRoom) { const room = getRoom(currentRoom); io.to(currentRoom).emit("update", room.players); } }); socket.on("buy", (item, targetId) => { const player = players[socket.id]; if (!player) return; if (item === "boost" && player.coins >= 50) { player.coins -= 50; player.boost = true; io.emit("effect", { type: "boost" }); setTimeout(() => (player.boost = false), 10000); } if (item === "freeze" && player.coins >= 40) { const target = players[targetId]; if (target) { player.coins -= 40; target.frozen = true; io.emit("effect", { type: "freeze" }); setTimeout(() => (target.frozen = false), 5000); } } if (item === "attack" && player.coins >= 30) { const target = players[targetId]; if (target) { player.coins -= 30; target.coins = Math.max(0, target.coins - 20); io.emit("effect", { type: "attack" }); } } if (currentRoom) { const room = getRoom(currentRoom); io.to(currentRoom).emit("update", room.players); } }); socket.on("disconnect", () => { delete players[socket.id]; if (currentRoom) { const room = getRoom(currentRoom); io.to(currentRoom).emit("update", room.players); } }); }); server.listen(3000); // ===== FRONTEND =====

🎪 MAX Circus