Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为玩家分配一个2位数的唯一id_Javascript_Algorithm - Fatal编程技术网

Javascript 如何为玩家分配一个2位数的唯一id

Javascript 如何为玩家分配一个2位数的唯一id,javascript,algorithm,Javascript,Algorithm,我正在使用html、node js和socket.io制作一个多人游戏。最初我在游戏更新中发送socket_id、玩家位置(x,y)和角度。由于socket id相当长并且使用了更多的字节,我想用一个小的(2或3个单词/数字)id来代替socket id来代表每个玩家。一个游戏最多可以有50个玩家。如果我使用随机数字(0-100)来制作id,则有可能某个玩家已经使用了id(如果已经有30到40个玩家)。分配id的更好算法是什么 当玩家死亡或退出游戏时,该id是免费的,因此可以(不一定)将其分配给

我正在使用html、node js和socket.io制作一个多人游戏。最初我在游戏更新中发送socket_id、玩家位置(x,y)和角度。由于socket id相当长并且使用了更多的字节,我想用一个小的(2或3个单词/数字)id来代替socket id来代表每个玩家。一个游戏最多可以有50个玩家。如果我使用随机数字(0-100)来制作id,则有可能某个玩家已经使用了id(如果已经有30到40个玩家)。分配id的更好算法是什么


当玩家死亡或退出游戏时,该id是免费的,因此可以(不一定)将其分配给新玩家。

一种方法是简单地增加:

let curId = 0;
//...
player.id = curId;
curId+=1;
如果要使其随机,请执行以下操作:

  • 制作一个数字数组0..100
  • 从数组中为ID选择一个随机数
  • 将其从阵列中删除
  • 重复


  • 我推荐第一种方法,因为第二种方法限制了潜在用户的数量。虽然从理论上讲,如果我有10000个已知用户,我会使用第二种方法,在用户断开连接时将id添加回阵列。所以我没有无限期地递增。

    一种方法是简单地递增:

    let curId = 0;
    //...
    player.id = curId;
    curId+=1;
    
    如果要使其随机,请执行以下操作:

  • 制作一个数字数组0..100
  • 从数组中为ID选择一个随机数
  • 将其从阵列中删除
  • 重复


  • 我推荐第一种方法,因为第二种方法限制了潜在用户的数量。虽然从理论上讲,如果我有10000个已知用户,我会使用第二种方法,在用户断开连接时将id添加回阵列。所以我没有无限期地递增。

    只需将所有使用的id保存在一个数组中,然后检查id是否唯一:

    const arrayOfIds = [];
    
    const getRandomBetween1And60 = () => {  
    
    let newNumber = arrayOfIds[0] // just as start value  
    
    while(arrayOfIds.includes(newNumber)) {    
     newNumber = Math.floor(Math.random() * 60) + 1  
     }  
     return newNumber; 
    }
    
    
    ... 
    
    const newId = getRandomBetween1And60();
    

    只需将所有使用的id保存在一个数组中,然后检查id是否唯一:

    const arrayOfIds = [];
    
    const getRandomBetween1And60 = () => {  
    
    let newNumber = arrayOfIds[0] // just as start value  
    
    while(arrayOfIds.includes(newNumber)) {    
     newNumber = Math.floor(Math.random() * 60) + 1  
     }  
     return newNumber; 
    }
    
    
    ... 
    
    const newId = getRandomBetween1And60();
    

    第一个玩家得到1,第二个玩家得到2,…只需从1开始,为每个新玩家添加+1?这样,当玩家退出游戏时,id值可以达到一个更大的数值。如果超过50,可以继续递增。。没有随机性。递增是最好的方法,国美的例子是非常基本的。解决问题的方法是:1)忽略它。你永远无法达到
    数字.MAX\u SAFE\u INTEGER
    。2) 在分配新id之前,将删除的id存储在一个数组中,并从该数组中分配值。第一个玩家获得1,第二个玩家获得2,…只需从1开始,为每个新玩家添加+1?这样,当玩家退出游戏时,id值可以达到一个更大的数值。如果超过50,可以继续递增。。没有随机性。递增是最好的方法,国美的例子是非常基本的。解决问题的方法是:1)忽略它。你永远无法达到
    数字.MAX\u SAFE\u INTEGER
    。2) 在分配新id之前,将删除的id存储在数组中,并从该数组中分配值。