From 696a5c83ee76c6084c77886daf77f8c3f04a7114 Mon Sep 17 00:00:00 2001 From: vincentastolfi Date: Fri, 19 Apr 2024 09:38:10 +0200 Subject: [PATCH] :art: improve code structure to maybe make CD working --- Dockerfile | 2 +- app.js | 82 +++++++++++++++++++++++++++++++- index.js | 129 ++------------------------------------------------- package.json | 4 +- 4 files changed, 86 insertions(+), 131 deletions(-) diff --git a/Dockerfile b/Dockerfile index e8103f9..fd3b152 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,5 +3,5 @@ WORKDIR /usr/src/app COPY ./ ./ RUN sed -i '1i\' ./public/index.html RUN npm install -EXPOSE 3000 +EXPOSE 8081 CMD [ "node", "index.js" ] diff --git a/app.js b/app.js index 9fa8064..2ab0ef9 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,6 @@ +const { io } = require(`${__dirname}/index.js`); const { Player } = require(`${__dirname}/businesses/Player.js`); const { Room } = require(`${__dirname}/businesses/Room.js`); -const { Game } = require(`${__dirname}/Game.js`); -const { io } = require(`${__dirname}/index.js`); let room; let game; @@ -43,6 +42,9 @@ io.on("connection", (socket) => { room.addPlayer(player); game = new Game(room); game.validBoards(); + game.room.players.forEach((player) => { + io.to(player.socketId).emit("start game", game); + }); game.start(); }); @@ -50,3 +52,79 @@ io.on("connection", (socket) => { game.move(move); }); }); + +const askToPlay = (game) => { + io.to(game.actualPlayer.socketId).emit("play"); +}; + +const playedMoove = (game, isHit, isWin) => { + game.room.players.forEach((player) => { + io.to(player.socketId).emit("played move", game, isHit, isWin); + }); +}; + +class Game { + constructor(room) { + this.room = room; + this.actualPlayer = ""; + this.ennemy = ""; + } + + start() { + let rand = Math.floor(Math.random() * (1 - 0 + 1) + 0); + this.actualPlayer = this.room.players[rand]; + rand === 0 + ? (this.ennemy = this.room.players[1]) + : (this.ennemy = this.room.players[0]); + + askToPlay(this); + } + + /* + endGame() { + this.room.players.forEach((player) => + io.to(player.socketId).emit("end game"), + ); + } + */ + + move(move) { + let playedCase = this.ennemy.grid.cases[move.col][move.row]; + if (playedCase.isPlayed === false) { + playedCase.isPlayed = true; + let isHit = playedCase.isShip; + let isWin = this.checkWin(); + playedMoove(this, isHit, isWin); + let temp = this.actualPlayer; + this.actualPlayer = this.ennemy; + this.ennemy = temp; + } + askToPlay(this); + } + + checkWin() { + let w = true; + for (let i = 0; i < this.ennemy.grid.cases.length; i++) { + for (let j = 0; j < this.ennemy.grid.cases.length; j++) { + let c = this.ennemy.grid.cases[i][j]; + if (c.isShip && !c.isPlayed) { + w = false; + break; + } + } + } + return w; + } + + validBoards() { + this.room.players.forEach((player) => { + player.pieces.forEach((piece) => { + for (let i = piece.startPos.x; i <= piece.endPos.x; i++) { + for (let j = piece.startPos.y; j <= piece.endPos.y; j++) { + player.grid.cases[i][j].isShip = true; + } + } + }); + }); + } +} diff --git a/index.js b/index.js index 2386c1f..71136ef 100644 --- a/index.js +++ b/index.js @@ -4,13 +4,6 @@ const http = require("http").Server(app); const io = require("socket.io")(http); const port = 8081; -const { Player } = require(`${__dirname}/businesses/Player.js`); -const { Room } = require(`${__dirname}/businesses/Room.js`); - -let room; -let game; -let players = []; - app.use(express.static("public")); http.listen(port, () => { @@ -21,122 +14,6 @@ app.get("/", (req, res) => { res.sendFile(path.join(__dirname, "/public/index.html")); }); -console.log("server is working well"); - -io.on("connection", (socket) => { - console.log("New connected : ", socket.id); - /* TODO : handle disconnection - socket.on("disconnect", (reason) => { - if (game.room.players.length === 2) { - game.endGame(); - delete game.room; - } - console.debug(game); - }); - */ - - socket.on("first connection", (socketId, callback) => { - console.log("first connection"); - let player = new Player(socketId); - players.push(player); - callback({ - player: player, - }); - }); - - socket.on("Hello", (callback) => { - callback({ - Hello: "World", - }); - }); - - socket.on("room creation", (player) => { - room = new Room(); - room.addPlayer(player); - }); - - socket.on("ask for room", (player) => { - room.addPlayer(player); - game = new Game(room); - game.validBoards(); - game.start(); - }); - - socket.on("play", (move) => { - game.move(move); - }); -}); - -class Game { - constructor(room) { - this.room = room; - this.actualPlayer = ""; - this.ennemy = ""; - } - - start() { - this.room.players.forEach((player) => { - io.to(player.socketId).emit("start game", this); - }); - - let rand = Math.floor(Math.random() * (1 - 0 + 1) + 0); - this.actualPlayer = this.room.players[rand]; - rand === 0 - ? (this.ennemy = this.room.players[1]) - : (this.ennemy = this.room.players[0]); - - this.askToPlay(); - } - - endGame() { - this.room.players.forEach((player) => - io.to(player.socketId).emit("end game"), - ); - } - - askToPlay() { - io.to(this.actualPlayer.socketId).emit("play"); - } - - move(move) { - let playedCase = this.ennemy.grid.cases[move.col][move.row]; - if (playedCase.isPlayed === false) { - playedCase.isPlayed = true; - let isHit = playedCase.isShip; - let isWin = this.checkWin(); - this.room.players.forEach((player) => { - io.to(player.socketId).emit("played move", this, isHit, isWin); - }); - let temp = this.actualPlayer; - this.actualPlayer = this.ennemy; - this.ennemy = temp; - } - this.askToPlay(); - } - - checkWin() { - let w = true; - for (let i = 0; i < this.ennemy.grid.cases.length; i++) { - for (let j = 0; j < this.ennemy.grid.cases.length; j++) { - let c = this.ennemy.grid.cases[i][j]; - if (c.isShip && !c.isPlayed) { - w = false; - break; - } - } - } - return w; - } - - validBoards() { - this.room.players.forEach((player) => { - player.pieces.forEach((piece) => { - for (let i = piece.startPos.x; i <= piece.endPos.x; i++) { - for (let j = piece.startPos.y; j <= piece.endPos.y; j++) { - player.grid.cases[i][j].isShip = true; - } - } - }); - }); - } -} +module.exports = { + io, +}; diff --git a/package.json b/package.json index 26cf011..e8a0236 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "Simple online battleship game that I design for mae when lectures are boring", "main": "index.js", "scripts": { - "dev": "nodemon index.js, nodemon app.js", - "start": "node index.js, node app.js" + "dev": "nodemon app.js", + "start": "node app.js" }, "author": "Vincent Astolfi", "license": "ISC",