在Lua中跳过了Elseifs

时间:2013-10-06 20:34:45

标签: if-statement lua

我开始在Lua开发一个小型的Game-Dev项目,但我的代码部分出现问题:

    if genrel == RPG and langl == BASIC and topicl == WAR then
        review = math.random(2, 5)
        review2 = math.random(2, 5)
        review3 = math.random(2, 3)
        money = money + 300
        print("You have earned a total of $300 dollars from your game. Overall not many people enjoyed the game.")

elseif genrel == RPG and langl == BASIC and topicl == "WESTERN" then
        review = math.random(7, 9)
        review2 = math.random(4, 9)
        review3 = math.random(5, 8)
    money = money + 400
    print("You have earned a total of $300 dollars from your game. The game recieved mixed reviews.")

topicl,langl和genrel,在代码的前面定义。 例如:

topicChoice = io.read()
if topicChoice == 'War' then
topic = "[War]"
topicl = WAR

progLang = io.read()
if progLang == 'Java' then
lang = "[JAVA]"
langl = JAVA

genreChoice = io.read()
if genreChoice == 'ACTION' then
genre = "[ACTION]"
genrel = ACTION

一切都已定义,但是当我运行代码时,输​​出的随机数是if下的第一个,无论我放入什么。这可能很难理解,所以这是我的完整代码。 http://pastebin.com/XS3aEVFS

摘要:程序通过确定类型,主题和编码语言是什么来决定显示哪些随机数。它不是按流派,主题和编码语言选择数字,而只是使用第一个if语句。

2 个答案:

答案 0 :(得分:2)

在代码的早期,你有这个:

if genreChoice == 'ACTION' then
    genre = "[ACTION]"
    genrel = ACTION     
elseif genreChoice == 'RPG' then
    genre = "[RPG]"
    genrel = RPG     
elseif genreChoice == 'SIM' then
    genre = "[SIM]"
    genrel = SIM     
end

并且您为genrel分配了变量ACTIONRPGSIM的值,但这些变量似乎没有在任何地方定义,因此他们的值为nil。换句话说,执行时:

genrel = ACTION     

就像你做的那样:

genrel = nil     

答案 1 :(得分:1)

Lorenzo涵盖了为什么您的代码没有按预期执行的要点。第二个问题是您正在检查播放器输入的字符串,但您没有对案例进行规范化。

考虑如果玩家输入WeSTErn之类的内容会发生什么。这与WESTERN不同 - 您的变量设置不正确,程序会再次输出错误的结果。

在比较播放器输入之前,使用string.upperstring.lower或使用不同的数据类型来标准化播放器输入,例如。数字。在处理数据时,并非所有内容都必须表示为字符串。

  

我应该像Krister Andersson所说的那样在if语句中加上引号?

仅当您希望这些变量包含字符串类型时。您也可以为它们分配唯一的数字,以便在它们之间进行识别。比如这样的事情:

local ACTION, RPG, SIM = 1, 2, 3
local JAVA, BASIC = 1, 2, 3
local WAR, WESTERN, BLOCKS = 1, 2, 3
-- etc.

最后请注意,你应该考虑分解你的程序 - 这就是函数发明的原因。