所以我正在开发一款简单的游戏。逻辑流程是当2名玩家连接到房间时,游戏将初始化并发出3秒倒计时事件以及按钮。如果一个玩家点击该按钮,该玩家将发出一个事件,使他/她成为游戏的主持人。
按钮将显示3秒钟。如果它在没有被点击的情况下消失,服务器将随机选择主机。
是否点击按钮,3秒后所有客户端都会发出“就绪”事件。
这是我的代码。
如果单击该按钮,客户端将发出“host”事件,我的服务器端代码为
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 :(得分:0)
我认为首先要提到的是if (2>1) { ...
完全没必要。代码将直接进入for循环,就好像它不存在一样。
你的代码除了if语句之外,老实说还可以。没有什么可以尖叫'我会导致更多的循环然后必要'。此时我建议在项目中发布与以下相关的任何内容:
我相信更多信息应该到期。
答案 1 :(得分: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]
}
我发现有关socket io的有趣的事情是当两个套接字触发此事件时,如果Host没有退出,第一个将执行else(noHost)然后创建一个Host。第二个套接字将执行if条件,因为主机是由前一个套接字创建的....