Javascript 如何为玩家分配一个2位数的唯一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的更好算法是什么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是免费的,因此可以(不一定)将其分配给
当玩家死亡或退出游戏时,该id是免费的,因此可以(不一定)将其分配给新玩家。一种方法是简单地增加:
let curId = 0;
//...
player.id = curId;
curId+=1;
如果要使其随机,请执行以下操作:
我推荐第一种方法,因为第二种方法限制了潜在用户的数量。虽然从理论上讲,如果我有10000个已知用户,我会使用第二种方法,在用户断开连接时将id添加回阵列。所以我没有无限期地递增。一种方法是简单地递增:
let curId = 0;
//...
player.id = curId;
curId+=1;
如果要使其随机,请执行以下操作:
我推荐第一种方法,因为第二种方法限制了潜在用户的数量。虽然从理论上讲,如果我有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存储在数组中,并从该数组中分配值。