Random 从表中获取一个值并将其分配给另一个值,无需重复
具体来说,这是为加里的国防部,但我不认为这在这个问题太重要。我想做的是得到一个玩家,并将其值设置为另一个随机玩家(因此每个玩家都有一个随机的“目标”)。我希望这样做没有重复,这样一个球员就不会被分配给他们自己。为了更好地说明: 这张图片唯一的区别是,我希望每个玩家都被分配给另一个随机玩家,所以更像player1=>player5,player3=>player2,等等 这是我目前的代码,但这总是会导致一个人未点击:Random 从表中获取一个值并将其分配给另一个值,无需重复,random,lua,lua-table,garrys-mod,Random,Lua,Lua Table,Garrys Mod,具体来说,这是为加里的国防部,但我不认为这在这个问题太重要。我想做的是得到一个玩家,并将其值设置为另一个随机玩家(因此每个玩家都有一个随机的“目标”)。我希望这样做没有重复,这样一个球员就不会被分配给他们自己。为了更好地说明: 这张图片唯一的区别是,我希望每个玩家都被分配给另一个随机玩家,所以更像player1=>player5,player3=>player2,等等 这是我目前的代码,但这总是会导致一个人未点击: validTargets = {} TargetList = {} loca
validTargets = {}
TargetList = {}
local Swap = function(array, index1, index2)
array[index1], array[index2] = array[index2], array[index1]
end
GetShuffle = function(numelems)
local shuffle = {}
for i = 1, numelems do
shuffle[#shuffle + 1] = i
end
for ii = 1, numelems do
Swap(shuffle, ii, math.random(ii, numelems))
end
return shuffle
end
function assignTargets()
local shuffle = GetShuffle(#playing)
for k,v in ipairs(shuffle) do
TargetList[k] = v
end
SyncTargets()
end
function SyncTargets()
for k,v in pairs(TargetList) do
net.Start("sendTarget")
net.WriteEntity(v)
net.Send(k)
end
end
我有一个lua函数,在给定
n
的情况下,它会生成从1到n
的随机数字乱序。
该方法基于生成元素数组的随机排列
您可以尝试这样使用:
local Swap = function(array, index1, index2)
array[index1], array[index2] = array[index2], array[index1]
end
GetShuffle = function(numelems)
local shuffle = {}
for i = 1, numelems do
shuffle[#shuffle + 1] = i
end
for ii = 1, numelems do
Swap(shuffle, ii, math.random(ii, numelems))
end
return shuffle
end
function assignTargets()
local shuffle = GetShuffle(#playing) --assuming `playing` is a known global
for k,v in ipairs(shuffle) do
TargetList[k] = v
end
end
好吧,我有点傻。在我自己的示例中,您能帮助我使用这个吗?假设您每次都要更新
TargetList
,函数assignTargets
执行与您的assignTargets
相同的操作:在调用assignTargets
之后,TargetList
将被玩家分配的新随机洗牌填充。所以我只是把这个而不是我的代码放进去?我需要改变什么吗?抱歉-这里是super noob。我刚刚尝试了代码,得到了“尝试调用全局‘交换’”。这不是默认函数吗?是的,抱歉,没有意识到我还有另一个函数。但是刚刚编辑了我的答案。