表值不会改变

时间:2014-06-19 09:07:21

标签: lua lua-table

我有一个2 dim数组,所有的单元格都用零填充。

我要做的是取一些随机选择的细胞并用4或5

填充

但我得到的是空格子,所有值都等于零,或者只得到一个值已经变为4或5,这是我的代码:

     local grid = {}
  for i=1,10 do
    grid[i] = {}
    for j=1,10 do
      grid[i][j] = 0
    end
  end

  local empty={}
  for i=1,10 do
    for j=1,10 do
      if grid[i][j]==0 then
        table.insert(empty,i ..'-'.. j)
      end
    end
  end
  local fp=math.floor(table.maxn(empty)/3)
  local fx,fy
  for i=1,fp do

    math.randomseed(os.time())
    math.random(0,1)
    local fo=math.random(0,1)
    math.random(table.maxn(empty))
    local temp= empty[math.random(table.maxn(empty))]
    local dashindex=string.find(temp,'-')

     fx=tonumber(string.sub(temp,1,dashindex-1))
     fy=tonumber(string.sub(temp,dashindex+1,string.len(temp)))
    if fo==0 then
      grid[fx][fy]=4
    elseif fo==1 then
      grid[fx][fy]=5
    end
end


for i=1,10 do
  for j=1,10 do
    print(grid[i][j])
  end
  print('\n')
end

1 个答案:

答案 0 :(得分:1)

我不确定for i=1,fp循环对tempfo的影响,例如,种子只应设置一次,并且返回值也是忽略local fo之后的行,看起来非常混乱。但根据你的帖子,如果你真的只是想从2D数组中随机选择N个单元格并将它们设置为4或5(随机),这应该有效:

-- maybe N = fp
local N = 5
math.randomseed(os.time())
local i = 1
repeat
    fx = math.random(1, 10)
    fy = math.random(1, 10)
    if grid[fx][fy] == 0 then
        grid[fx][fy] = math.random(4,5)
        i = i + 1
    end
until i > N

但请注意,N越接近数组中的项数(在您的示例中为100),循环完成所需的时间越长。如果这是一个问题,那么对于大的N值,你可以做相反的事情:随机地将每个单元格初始化为4或5,然后随机设置大小 - 它们中的N为0。

math.randomseed(os.time())

local rows = 10
local columns = 10
local grid = {}

if N > rows*columns/2 then 
    for i=1,rows do
        grid[i] = {}
        for j=1,columns do
            grid[i][j] = math.random(4,5)
        end
    end

    local i = 1
    repeat
        fx = math.random(1, 10)
        fy = math.random(1, 10)
        if grid[fx][fy] ~= 0 then
            grid[fx][fy] = 0
            i = i + 1
        end
    until i > N

else
    for i=1,rows do
        grid[i] = {}
        for j=1,columns do
            grid[i][j] = 0
        end
    end

    local i = 1
    repeat
        fx = math.random(1, 10)
        fy = math.random(1, 10)
        if grid[fx][fy] == 0 then
            grid[fx][fy] = math.random(4,5)
            i = i + 1
        end
    until i > N
end