【问题标题】:Lua LÖVE automate variable namesLua LÖVE 自动命名变量
【发布时间】:2015-12-08 10:36:59
【问题描述】:

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

任务是关于蚂蚁的,需要寻找食物,带一些到它们来自的巢穴,并在途中留下信息素的踪迹。此外,我们编写了一个可视化过程的程序。对于 100 只蚂蚁,5 种食物来源,所有这些都在 500x500 方格的空间中

我选择了 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++。

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    制作xAntyAnt 表,并以xAnt[i]yAnt[i] 访问各个条目。

    【讨论】:

      【解决方案2】:

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

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

      local ants = {}
      

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

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

      每只蚂蚁本身也是一个表格,但它使用字符串键而不是数字键。有关更多信息,请参阅 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多