Javascript Socket.io room功能可根据需要创建游戏桌

Javascript Socket.io room功能可根据需要创建游戏桌,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在使用JS和socket.io制作一个多人游戏 游戏玩家限制在2-5人之间 我想要实现的是: 1:在客户端浏览器上有一个下拉列表,显示所有游戏表名称及其最大玩家限制。玩家可以点击任何房间加入 2:一旦达到桌上游戏机的限制,房间就不能再加入了 3:每个房间的玩家都可以玩自己的游戏,在自己的频道聊天而不会分心 在我当前的设计中,有一个静态房间对象,在房间项目中有一个预先创建的表对象数组。table对象具有游戏所需的许多属性和方法 服务器端房间和桌子对象: function Room(name)

我正在使用JS和socket.io制作一个多人游戏

游戏玩家限制在2-5人之间

我想要实现的是:

1:在客户端浏览器上有一个下拉列表,显示所有游戏表名称及其最大玩家限制。玩家可以点击任何房间加入

2:一旦达到桌上游戏机的限制,房间就不能再加入了

3:每个房间的玩家都可以玩自己的游戏,在自己的频道聊天而不会分心

在我当前的设计中,有一个静态房间对象,在房间项目中有一个预先创建的表对象数组。table对象具有游戏所需的许多属性和方法

服务器端房间和桌子对象:

function Room(name) {  
this.players = [];
this.tables = [];
};

function Table(tableID){  
this.id = tableID;
this.players = [];
this.maxPlayerLimit = 4;
}; 
我可以预先创建一定数量的表,并将这些表对象推送到房间的表数组中

Room.prototype.createTables = function(amount) {
var tableList = [];
for(var i = 0; i < amount; i++){
    var table = new Table(i+1);
    table.setName("Table" + (i + 1));
    tableList.push(table);
}
return tableList;
};
我的设计实现了所有目标。但它是以这样一种硬编码的方式完成的预创建的表可能太多或太少。用我当前的设计解决这个问题的唯一方法是创建比预期更多的房间

我不确定我是否应该继续使用当前的设计或插座。io房间功能可以提供更好的解决方案。(按需创建游戏表)

但点播场景中存在一个缺陷:

玩家请求加入一个房间(桌子),一旦请求达到一定的限制(如4),服务器将加入这些玩家。这样,服务器将只创建所需数量的房间(桌子)但这些排队的玩家是随机玩家,他们可能不一定想要彼此玩。如果玩家想和他们的朋友一起玩,这将是一个问题。

有了Socket.io文件室功能,是否有一种更为动态的方式或更好的方式来创建具有不同玩家需求限制的文件室(在我的例子中是游戏桌)

socket.io文件室是完全动态的。你不会“创建一个房间”。相反,您只需将套接字连接到房间,该房间将自动创建。同样,您也不会删除。当最后一个插座离开房间时,房间就消失了


因此,如果您使用socket.io文件室而不是表,那么它们的创建将完全按需进行。您可以随时迭代正在使用的房间。您可以随时迭代房间中的套接字。您可以随时在房间中添加或删除插座。

您能详细说明一下吗?我无法真正使用socket.io room替换我的表,因为我需要用于游戏的表属性和方法。我在想,当客户创建一个房间时,他们需要能够设置数量限制,并且限制与房间内的桌面播放器限制相同。那么,当一个2人游戏室已满时,服务器将在请求时创建另一个2人游戏室?但这样很难在客户的浏览器中反映房间名称。@jindsay-我想我已经不明白你的问题是什么了。你有
桌子
房间
对象,你不想丢弃它们。那么,真正的问题是什么?很抱歉让你感到困惑。我想实现1:在客户端浏览器上显示所有预先创建的表名,客户端将转到他们单击的任何房间。(而且他们的朋友会知道加入哪个表)2:每个表都有玩家限制,我可以在我的表对象中设置。当限制达到时,玩家将无法加入。我目前的设计在这方面做得很好。但我担心的是,如果玩家数量超过了预先创建的房间所能容纳的数量,那将是一个问题。不过,我可以预先创建更多的房间,但这似乎不是最好的方式。@jindsay-这种逻辑都会发生在代码中,但你不会告诉我们当玩家想要加入房间时,你在哪里决定做什么。您只需决定哪些现有桌子有空间容纳新玩家并分配它们,或者如果没有现有桌子有空间,那么您将看到房间是否有空间容纳新桌子,如果有,您将创建一个新桌子。类似地,当玩家离开一张桌子时,您将决定是否移除一张空桌子。我不知道你在问我们什么。您不显示将玩家分配到表中的任何相关代码。这就是我们要做的。
socket.on('connectToTable',function(data) {
  var player = room.player(socket.id)// (room method to get the socket player)
  var table = room.table(data.tableID); //(room method to get the table)
  table.Name(data.tableName)//(table method to set name)
  table.maxPlayerLimit = Number(data.limit)
  if (tableisAvailable){
   table.join(player)//table method to add player to its list
  if(table.players.length===maxPlayerlimit){
   init the game
   }else{
   client.emit("table is full")//then the client would know to go elsewhere
   }
   }
   })