Node JS Express JS Client / Server游戏

时间:2011-04-17 22:18:32

标签: node.js

我正在Node.js和Express js中编写一个双人纸牌游戏(说它是简单的普通扑克游戏)。我遇到了一些问题。首先,我如何确保只有2个玩家可以访问游戏实例,如果他们失去连接,是否可以让他们重新连接?第二,如何从服务器向客户端发送消息?我可以在“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 个答案:

答案 0 :(得分:2)

  

首先,我如何确保那里   只有2名玩家可以访问   游戏的实例?

创建一个实例对象数组 当新玩家加入时,要么创建一个新实例并将它们设置为player1,要么将它们作为第二个玩家添加到现有实例中。

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 );

  

我是用套接字做的吗?

我会处理与网络套接字的所有动态交互。

  

我是否每回合都会返回一个包含更新游戏状态(卡片,赌注等)的网页?

我不会通过网络套接字发送HTML。而是发送json并使用客户端模板来呈现它。

答案 1 :(得分:0)

尝试now

// 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
};
相关问题