From cfae266bc68bf7ef15b7cd8de07cf9a148f754ec Mon Sep 17 00:00:00 2001 From: Zhao Xin <7176466@qq.com> Date: Fri, 5 Aug 2022 10:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9B=E5=8F=98?= =?UTF-8?q?=E9=87=8F=EF=BC=8C=E6=96=B0=E5=BB=BA=E4=B8=80=E4=BA=9B=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=8B=E4=BB=B6=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.js | 83 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/server.js b/server.js index 56d423c..55a752f 100644 --- a/server.js +++ b/server.js @@ -7,53 +7,56 @@ const server = app.listen(port, host, () => console.log(`陆战棋游戏服务 const io = require('socket.io')(server) const clients = [] +let player1 = null +let player2 = null +let startTime = null +let isStarted = false +let player1Ready = false +let player2Ready = false let currentPlayer = null io.on('connection', (client) => { - // 来人了 + handleConnection(client) + client.on('disconnect', () => handleDisconnection(client)) + client.on('join', () => handleJoin(client)) +}) + +// 处理客户端连接 +function handleConnection(client) { clients.push(client) + client.emit('joined', { player: 'player1', ip: player1 != null ? player1.handshake.address : '' }) + client.emit('joined', { player: 'player2', ip: player2 != null ? player2.handshake.address : '' }) +} - const i = clients.indexOf(client) - if (i == 0) client.emit('role', '玩家1') - else if (i == 1) client.emit('role', '玩家2') - else client.emit('role', '旁观者') +// 处理客户端断线 +function handleDisconnection(client) { + const index = clients.indexOf(client) + clients.splice(index, 1) +} - if (clients.length == 2) { - currentPlayer = clients[0] +// 处理参战请求 +function handleJoin(client) { + if (player1 != null && player2 != null) { + client.emit('alert', '玩家已满,无法加入游戏。') + return } - io.emit('player', clients.length < 2 || currentPlayer != clients[1] ? 'player1' : 'player2') + if (client == player1 || client == player2) { + client.emit('alert', '你已加入,无法重新加入。') + return + } - // 人走了 - client.on('disconnect', () => { - const idx = clients.indexOf(client) - clients.splice(idx, 1) + if (player1 == null) { + player1 = client + client.emit('alert', '加入游戏成功,你是黑方。') + io.emit('joined', { player: 'player1', ip: client.handshake.address }) + return + } - clients.forEach((c) => { - const i = clients.indexOf(c) - if (i == 0) c.emit('role', '玩家1') - else if (i == 1) c.emit('role', '玩家2') - else c.emit('role', '旁观者') - }) - - if (clients.length >= 2) { - currentPlayer = clients[0] - } else { - currentPlayer = null - } - io.emit('player', clients.length < 2 || currentPlayer != clients[1] ? 'player1' : 'player2') - }) - - client.on('click', () => { - if (clients.length >= 2 && client == currentPlayer) { - // 切换玩家 - if (currentPlayer === clients[0]) { - currentPlayer = clients[1] - io.emit('player', 'player2') - } else { - currentPlayer = clients[0] - io.emit('player', 'player1') - } - } - }) -}) + if (player2 == null) { + player2 = client + client.emit('alert', '加入游戏成功,你是红方。') + io.emit('joined', { player: 'player2', ip: client.handshake.address }) + return + } +}