103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
const express = require("express");
|
|
const http = require("http");
|
|
const socketIO = require("socket.io");
|
|
const bp = require("body-parser");
|
|
const path = require("path");
|
|
|
|
const _PORT = 3000;
|
|
|
|
const app = express();
|
|
const server = http.createServer(app);
|
|
/** @type {import("socket.io").Server} */
|
|
const io = socketIO(server);
|
|
|
|
app.use(bp.urlencoded({ extended: false }));
|
|
app.use(express.static(path.join(__dirname, "../../frontend")));
|
|
|
|
app.use((req, res, next) => {
|
|
console.log(`${req.method} | ${req.url}`);
|
|
|
|
next();
|
|
})
|
|
|
|
const playerList = [];
|
|
|
|
io.on('connection', (socket) => {
|
|
console.log("Es ist ein neuer Spieler beigetreten");
|
|
|
|
const player = {
|
|
id: socket.id,
|
|
x: 100,
|
|
y: 100,
|
|
socket: socket,
|
|
};
|
|
|
|
playerList.push(player);
|
|
emitPlayerMovement();
|
|
|
|
socket.on("moveUp", () => {
|
|
const player = playerList.find((p) => p.id === socket.id);
|
|
if (player) {
|
|
player.y -= 10;
|
|
}
|
|
|
|
emitPlayerMovement();
|
|
});
|
|
|
|
socket.on("moveDown", () => {
|
|
const player = playerList.find((p) => p.id === socket.id);
|
|
if (player) {
|
|
player.y += 10;
|
|
}
|
|
|
|
emitPlayerMovement();
|
|
});
|
|
|
|
socket.on("moveRight", () => {
|
|
const player = playerList.find((p) => p.id === socket.id);
|
|
if (player) {
|
|
player.x += 10;
|
|
}
|
|
|
|
emitPlayerMovement();
|
|
});
|
|
|
|
socket.on("moveLeft", () => {
|
|
const player = playerList.find((p) => p.id === socket.id);
|
|
if (player) {
|
|
player.x -= 10;
|
|
}
|
|
|
|
emitPlayerMovement();
|
|
});
|
|
|
|
// Handle player disconnect
|
|
socket.on("disconnect", () => {
|
|
console.log(`Spieler ${socket.id} hat das Spiel verlassen`);
|
|
const index = playerList.findIndex((p) => p.id === socket.id);
|
|
if (index !== -1) {
|
|
playerList.splice(index, 1);
|
|
}
|
|
|
|
emitPlayerMovement();
|
|
});
|
|
|
|
socket.on("disconnect", () => {
|
|
playerList.splice(playerList.findIndex(p => p.id === socket.id), 1);
|
|
})
|
|
});
|
|
|
|
function emitPlayerMovement() {
|
|
const playerMap = playerList.map(x => {
|
|
return {
|
|
id: x.id,
|
|
x: x.x,
|
|
y: x.y
|
|
}
|
|
});
|
|
io.emit("updatePos", playerMap);
|
|
}
|
|
|
|
server.listen(_PORT, () => {
|
|
console.log(`Backend gestartet auf http://localhost:${_PORT}`);
|
|
}) |