使用io.read()来引用表。 Lua 5.1

时间:2014-04-02 04:49:51

标签: reference lua lua-table

好吧,所以这就是我要做的事情,而且我几乎可以肯定我不知道用什么词来找到我正在寻找的东西所以我会尽量用有限的术语知识尽可能清楚。

我使用lua(或至少尝试)为D& D游戏生成赛道/赛段。

所以这就是我所做的,但我无法弄清楚如何让一张桌子引用另一张桌子。无论我如何努力研究或玩弄它都不会工作。

表转储:

--Track Tables
local raceClass =   { 'SS', 'S', 'A', 'B', 'C', 'D', 'N' }
local trackLength = { 50, 30, 25, 20, 15, 10, 5 }
local trackDifficulty = { 3, 3, 3, 2, 2, 1, 1 }
local trackTypes = { 'Straightaway', 'Curve', 'Hill', 'Water', 'Jump' }

所以,只是在这里解释一下。首先,我们有比赛的类。 N为新手,SS为最困难。接下来,我们得到结果轨道的长度。 SS是50段赛道。 N是5段轨道。每个种族的每个赛道都有一个难度上限。 SS,S和A的上限均为3. D和N的上限为1.然后,每段轨道进一步细分为它的类型。这些是使用这块代码生成的;

--Track Generation
math.randomseed(os.time())
for i = 1, trackLength do
    local trackTypeIndex = math.random(1, #trackTypes)
    local SP = math.random(1, trackDifficulty)  --SP is Stamina Cost for that segment.
    print(tracktypes[trackTypeIndex]..' of SP '..SP)
end
io.read() --So it doesn't just close the window but waits for some user input.

现在它进入我开始放松的部分。我希望DM能够输入所选的种族类并获得生成的赛道的生成列表。

--DM Input
print('Race Class? N, D, C, B, A, S, SS")
io.flush()
local classChoice = io.read()

因此,DM选择了类,我们可以使用N.我无法找到的是一段代码,它将classChoice的值与raceClass对齐并{ {1}}。然后使用该位置选择trackLengthtrackDifficulty中的位置,最后运行代码段Track Generation的其余部分,外推适当的变量并打印结果,获得某些内容;

Straightaway of SP 1
Curve of SP 1
Water of SP 1
Water of SP 1
Jump of SP 1

对于低端新手比赛,其长度仅为5段,最大难度为1.但是较高的等级仍将产生更长,更难的音轨。我试图尽可能具体,尽量减少我在代码方面缺乏经验可能造成的混乱。

1 个答案:

答案 0 :(得分:2)

我认为你会因为不同的表结构而变得更好:

local raceClass = {
    SS = {50, 3},
    S = {30, 3},
    A = {25, 3},
    B = 20, 2},
    C = {15, 2},
    D = {10, 1},
    N = {5, 1},
}

现在,您可以轻松访问raceClass的所有数据。代码就像:

print "Race Class? N, D, C, B, A, S, SS"
io.flush()
local classChoice = (io.read "*line"):upper()    -- To convert the input to upper case characters
if not raceClass[classChoice] then
    -- Wrong input was given
end
local SP, Length = raceClass[classChoice][2], raceClass[classChoice][1]