2014-06-10 3 views
2

특히, 이것은 Garry의 Mod를위한 것이지만,이 문제에서는 그다지 중요하지 않다고 생각합니다. 내가 원하는 것은 한 명의 플레이어를 얻고 다른 플레이어에게 그 가치를 설정하는 것입니다. 그래서 모든 플레이어는 임의의 '목표'를가집니다. 나는 반복을하지 않고 이것을하고 싶고, 그래서 플레이어는 자기 자신에게 배정되지 않는다. 더 설명하기 :루아 - 테이블에서 하나의 값 가져 오기 및 반복 없음으로 다른 테이블에 할당하기

Player assigning illustation.

그 사진의 유일한 차이점은 내가 너무 많은 선수 5, 선수 3 => 플레이어 2> 재생기 =처럼, 각각의 플레이어가 다른 임의 플레이어에 할당 할 것입니다

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 

답변

3

나는 랜덤 셔플 O를 생성하는 루아 기능이 있습니다, 등 여기

순간에 내 코드 그러나 이것은 항상 실을 뽑아 푼 한 사람 잎입니다 f 숫자는 1에서 n이고, 주어진 숫자는 n입니다. 이 방법은 요소 배열의 임의 순열을 생성하는 popular algorithm을 기반으로합니다.

당신은 너무 같은 것을 사용해 볼 수 있습니다 :

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 
+0

좋아 내가 멍청한 놈의 비트입니다. 제 자신의 모범에서 이것을 사용하는 것을 도울 수 있습니까? –

+0

매번'TargetList'를 업데이트한다고 가정하면,'assignTargets' 함수는'assignTargets'와 같은 일을합니다 : 당신이'assignTargets'를 호출하면,'TargetList'는 플레이어 할당의 새로운 랜덤 셔플로 채워질 것입니다. –

+0

그래서 코드 대신이 코드를 사용하면됩니까? 아무것도 바꾸어야합니까? 미안 해요, 바로 여기에 슈퍼 멍청한 놈. –