Lua LÖVE 自动化变量名

Lua LÖVE automate variable names

我正在编写 lua LÖVE 程序作为学校项目。

The task is something about ants, that need to find food, take some to the nest they came from and on the way leaving a trace of pheromons. In addition we've write a program visualizing the process. For 100 ants, 5 food sources and all this in a space of 500x500 squares

我选择 lua LÖVE 作为可视化并编写了以下代码:

function love.load()
    p = 500 -- Starting position

    xNest, yNest = p, p -- Initializing nest position

    xAnt1, yAnt1 = p, p -- Initializing ant position
    xAnt2, yAnt2 = p, p


end

-- Changes position every frame.
function love.update(dt)

-- AntI // See what I did there?
    xAnt1 = xAnt1 + math.random (-2, 2) -- Change position by a random number between 2 steps forward and 2 steps backward
    yAnt1 = yAnt1 + math.random (-2, 2) -- Change position by a random number between 2 steps sideways

    xAnt2 = xAnt2 + math.random (-2, 2) 
    yAnt2 = yAnt2 + math.random (-2, 2)
end



-- Draw ants and nest.
function love.draw()

    -- Nest 
    love.graphics.setColor(0, 255, 255) -- set drawing color green
    love.graphics.rectangle("line", xNest, yNest, 2, 2) -- draw a nest at xNest, yNest with a size of 2x2

    -- Ant
    love.graphics.setColor(255, 255, 255) -- set drawing color white
    love.graphics.rectangle("line", xAnt1, yAnt1, 2, 2) -- draw an ant at xAnt(number of ant), yAnt(number of ant) with a size of 2x2
    love.graphics.rectangle("line", xAnt2, yAnt2, 2, 2)

end

因为我的任务是做我在 xAntX, yAntX = p, p 100 次,其中 X 我的意思是蚂蚁的数量,我需要某种循环来创建 xAntX, yAntX = p, pxAntX = xAntX + math.random (-2, 2)yAntX = yAntX + math.random (-2, 2)love.graphics.rectangle("line", xAntX, yAntX, 2, 2 一个 100次。

我尝试了一个 for 循环,但它总是对我大喊大叫,因为我试图将一个变量 'i' 附加到初始化 xAnt .. i, yAnt .. i 然后用 i = i + 1.

计算 i++

创建 xAntyAnt 表,并访问 xAnt[i]yAnt[i].

中的各个条目

虽然这个问题已经很老了,但如果您是 Lua 的新手并且在这里遇到了同样的问题,我想提出一个不同的解决方案,我认为它比接受的答案:

以结构化方式存储多个属性的一种简单方法是将它们存储为嵌套的“对象”-like tables 在“数组”-like table 中。例如,像这样初始化一个空的 ants table:

local ants = {}

然后,使用 numeric for 将所需数量的蚂蚁添加到 ants table:

for i = 1, 100 do
  ants[#ants + 1] = { x: ..., y: ... }
end

每只蚂蚁本身也是一个table,但它使用的不是数字键,而是字符串键。有关详细信息,请参阅 Lua 的 documentation on tables。现在,您可以遍历列表中的所有蚂蚁并使用以下命令更新每只蚂蚁:

for _, ant in ipairs(ants) do
  ant.x = ant.x + math.random(-2, 2)
  ant.y = ant.y + math.random(-2, 2)
end

具体的蚂蚁可以直接通过他们的索引进行更新。要更新第二只蚂蚁,请使用 ants[2].

这种方法的好处是您只有一个全局变量来保存所有蚂蚁,而不是为每只蚂蚁的每个个体 属性 设置单独的全局变量。这通常使代码更易于推理并有助于调试。

快乐的发展伙伴Luanatics :D