2017-03-05 48 views
0

所以我正在开发一个简单的游戏。逻辑流程是当两个玩家连接到房间时,游戏将初始化并发出3秒倒计时事件并伴随一个按钮。如果一个玩家点击该按钮,则该玩家将发出使他/她成为游戏主持人的事件。这个“if else”声明在我的socket.io/Node.js环境中不起作用

该按钮将显示3秒钟。如果没有被点击消失,服务器将随机选择主机。

无论按钮是否被点击,3秒钟后所有的客户端都会发出“就绪”事件。

这是我的代码。

如果单击该按钮,“主机”活动将通过客户端发出的,和我的服务器端代码

client.on('host',function(){ 

    var player = room.getPlayer(client.id); 
    player.isHost=true; 


}); 

然后这里是“准备”事件的服务器端。

client.on("ready", function() { 
    var player = room.getPlayer(client.id); 
    var table = room.getTable(player.tableID); 
    if (2>1) { 
     for (var i = 0; i < table.players.length; i++) { 

     if (table.players[i].isHost===true){ 

      console.log("you are the host") 
     } else { 
      console.log("we are going to randomly pick a host") 
      } 

     } 
    } 
}) 

现在,如果没有玩家点击按钮的终端会显示

我们将随机挑选一台主机

我们将随机挑选一台主机

我们要随机挑选主机

我们要随机挑选主机

否则它会像

我们将随机挑选一台主机

你是主机

我们将随机挑选一台主机

你是主机

在这个阶段,只有2个客户被允许进行游戏,所以players.length是2.看起来if/else将与players.length同时执行?

+0

难道这可能是因为您正在比较布尔值与'==='比较值和类型吗? – user82395214

+0

'if/else'会运行'table.players.length'次 - 在你的情况下似乎是'4' –

+0

我看不到你需要运行一个循环,每个玩家都会得到它自己的“你是主机“消息 –

回答

0

我认为首先要提的是if (2>1) { ...是完全不必要的。代码将简单地通过for循环,就好像它不在那里一样。

您的代码除了if语句之外,说实话也没关系。没有什么尖叫“我会导致更多的循环,然后是必要的”。在这一点上,我会建议张贴在项目任何有关:

  1. 多线程
  2. 插槽处理/连接这

外的插座,我相信更多的信息所致。

0

感谢您的帮助。是的for循环是没有必要的,这是问题的原因。我的解决方案是将它从if-else语句中分离出来。

for (var i = 0; i < table.players.length; i++) { 
} 
//test if Host exit in the table 
if (table.ifHost===true){ 

     console.log("you are the host") 
    } else { 
     var randomNumber = Math.floor(Math.random() * table.playerLimit); 

     var Host=table.players[randomNumber] 
     } 

我发现了插座IO有趣的是,当两个插槽触发这个事件,如果主机不退出,第一个将执行其他(noHost),然后创建一个主机。第二个套接字将执行if条件,因为主机是由前一个套接字创建的....