【问题标题】:Lua math.random explainLua math.random解释
【发布时间】:2022-09-28 17:23:16
【问题描述】:

抱歉问这个问题,但我听不懂

-- but i don\'t understand this code
ballDX = math.random(2) == 1 and 100 or -100
--here ballDY will give value between -50 to 50 
ballDY = math.random(-50, 50)

我不明白结构什么是(2)以及为什么它== 1

十分感谢

    标签: lua love2d


    【解决方案1】:

    math.random(x) 将随机返回一个介于 1 和 x 之间的整数。

    所以math.random(2) 会随机返回 1 或 2。

    如果它返回 1 (== 1),ballDX 将被设置为 100。

    如果它返回 2 (~= 1),ballDX 将被设置为 -100。

    一个简单的方法来获得 50-50 的机会。

    【讨论】:

      【解决方案2】:

      这是在 Lua 中基于条件分配变量的一种非常常见的方式。这和你做的一样,例如,在 Python 中使用“foo = a if x else b”: 第一个函数 math.random(2) 返回 1 或 2。因此,如果它返回 1,则 math.random(2) == 1 部分为真,因此您将 100 分配给变量 ballDX。否则,将 -100 分配给它。

      【讨论】:

        【解决方案3】:

        在lua中

        result = condition and first or second
        

        基本意思相同

        if condition and first ~= nil and first ~= false then
            result = first
        else
            result = second
        end
        

        所以在你的情况下

        if math.random(2) == 1 then
            ballDX = 100
        else
            ballDX = -100
        end
        

        换句话说,ballDX 有 50/50 的机会变为 100 或 -100

        【讨论】:

        • 仅当first 为真时才正确。
        • @LMD你是对的,没想到
        【解决方案4】:

        为了更好地理解,查看 lua 文档有很大帮助: https://www.lua.org/pil/3.3.html

        你可以阅读:运算符 or 如果不为假则返回其第一个参数;否则,它返回它的第二个参数:

        因此,如果随机数为 1,它将返回“或”的第一个参数 (100),否则将返回第二个参数 (-100)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-18
          • 2016-03-04
          • 2014-03-15
          • 2023-03-06
          • 2014-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多