MultiplayerMinesweeper/index.js
2022-04-30 17:49:20 -04:00

111 lines
2.8 KiB
JavaScript

const worldgen = require("./worldgen.js")
const util = require("./util.js")
const gridSize = [18, 18];
const perlinScale = 3;
var express = require('express');
process.title = "Server"
class Player {
constructor(id, name, color) {
this.id = id;
this.name = name;
this.color = color;
}
}
class Game {
constructor() {
this.players = [];
this.world = worldgen.generateWorld(gridSize, perlinScale);
}
addPlayer(id, name) {
var color
switch(util.randomNumber(1,4)) {
case 1:
color = "red";
break;
case 2:
color = "aquamarine";
break;
case 3:
color = "green";
break;
case 4:
color = "yellow";
break;
}
const player = new Player(id, name, color);
this.players.push(player);
}
removePlayer(id) {
this.players = this.players.filter(obj => obj.id != id);
console.log("removed player - " + id)
}
getPlayerByID(id) {
console.log(this.players)
console.log(id)
const player = this.players.filter(obj => obj.id == id)[0]
return player
}
}
var game = new Game();
var app = express() //Static resources server
app.use(express.static(__dirname + '/www/'));var server = app.listen(8082, function () {
var port = server.address().port;
console.log('Server running at port %s', port);
});
var io = require('socket.io')(server);/* Connection events */
io.on('connection', function(client) {
console.log('User connected');
client.on('disconnect', function(){
console.log(client.id + ' disconnected.')
game.removePlayer(client.id)
client.broadcast.emit('playerList', game.players)
})
client.on('joinGame', function(data){
game.addPlayer(client.id);
console.log(data)
console.log(`${client.id} joined the game as ${data.name} requesting to join room: ${data.room}`);
client.emit('gameVars', {gridSize: gridSize, world: game.world})
client.broadcast.emit('playerList', game.players)
client.emit('playerList', game.players)
})
client.on('leaveGame', function(tank){
console.log(client.id + ' disconnected.')
game.removePlayer(client.id)
client.broadcast.emit('playerList', game.players)
})
client.on('clickCanvas', function(data){
console.log(data)
const xu = data.tilePosition[0]
const yu = data.tilePosition[1]
game.world[xu][yu].structure = data.structure
game.world[xu][yu].owner = game.getPlayerByID(client.id).color;
// console.log(world[xu][yu].owner = game.getPlayerbyID(client.id))
client.broadcast.emit('sync',{world: game.world})
client.emit('sync',{world: game.world})
})
});
function sendMap(client) {
client.broadcast.emit('sync',{world: game.world.map})
client.emit('sync',{world: game.world.map})
}