Node JS Express JS客户端/服务器游戏

4
我正在使用 Node.js 和 Express js 编写一个双人纸牌游戏(为了简单起见,假设它是常规扑克牌)。我遇到了一些问题。首先,如何确保只有两个玩家可以访问游戏实例,并且如果玩家失去连接是否可以重新连接?其次,如何从服务器发送消息给客户端?我可以在“socket.on”监听器调用中发送消息,但在程序的正常范围内无法使其正常工作。
var socket = io.listen(app);
socket.on('connection', function(client){
  player++;  
  if(player <= 2) {
  var messageout = "player " + player + " connected";
  client.broadcast(messageout);
  client.on('message', function(data){console.log(data); })
  client.on('disconnect', function(){console.log('disconnected');})
  }
  else {
  socket.end;
    }

});

我在概念上遇到了问题,不知道如何解决这个问题。例如,我应该全部使用套接字吗?还是每次轮换时返回一个包含游戏状态(牌、赌注等)更新的网页?

2个回答

2
首先,我如何确保只有两个玩家可以访问游戏实例?
创建一个实例对象的数组。 当新玩家加入时,要么创建一个新的实例并将其设置为player1,要么将其添加到现有实例作为player2。
var instances = [];

function Instance () {
  return { 
   name = 'game' + instances.length + 1,
   gameVariables = defaults,
   player1 = null,
   player2 = null,
   player1UUID = UUID(),
   player2UUID = UUID()
  }
}

如果玩家失去连接,是否有可能让他们重新连接?
如果在初始连接时向每个玩家发送UUID,则可以在重新连接时使用它进行身份验证。
如何从服务器向客户端发送消息?
client.send({ gameState: gameState() }); 或者如果您已将客户端保存到对象中:instances[ 'game1' ].player1.send( data ); 我需要全部使用sockets吗?
我建议使用web sockets来处理所有动态交互。
每回合都要返回更新后的游戏状态(卡牌、赌注等)的网页吗?
我不会通过web sockets发送html。相反,发送json并使用客户端模板进行渲染。

0
尝试现在
// server
var nowjs = require("now")
var everyone = nowjs.initialize(app);

everyone.connected(function() {
    if (users.length < 2) {
        users.push(this);
    }
});

everyone.now.sendMessage = function(message, cb) {
    gameLogic(message);
    users.forEach(function(user) {
        user.update(gameLogic.getState());
    });
};

//client
$("#action").click(function() {
     now.sendMessage($(this).data("action"));
});

now.update = function(data) {
     // update UI
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接