lua if else else语句限制?

时间:2015-12-12 22:55:44

标签: if-statement lua computercraft

我试图在游戏中为基于lua的计算机制作程序。虽然它的运行时它很奇怪

--Tablet

    oldpullEvent = os.pullEvent
    os.pullEvent = os.pullEventRaw
    while true do
        term.clear()
        term.setTextColor( colors.white )
        term.setCursorPos(1, 1)
        print("Please Enter Password:")
        input = read("*")
        incorrect = 0
        while incorrect < 3 do
            if input == "qwerty" then
                print("Password Correct, Unlocking")

            else
                if incorrect < 3 then
                    incorrect = incorrect + 1
                    print("Password incorrect")
                    print(3 - incorrect, " tries remaining")
                else 
                    print(3 - incorrect, "tries remaining, locking phone for 1m")
                    local num = 0
                    while num < 60 do
                        if num < 60 then 
                            term.clear()
                            term.setTextColor( colors.red )
                            term.setCursorPos(1, 1)
                            num = num + 1
                            print(60 - num, "s remaining")
                            sleep(1)
                        else
                            incorrect = 0
                        end
                    end
                end
            end
        end 
    end
    os.pullEvent = oldpullEvent

当它运行时,它开始于 “请输入密码:” 在输入“qwerty”所需的密码后,它无休止地循环“密码纠正,解锁”。 当我输入错误的密码时,它不会运行else语句中的任何代码,只返回到输入密码屏幕。没有错误代码或崩溃。知道lua的人是否知道我是否写了我的while / if / elseif函数错误或解决方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

输入正确的密码后,不会告知循环停止。输入正确的密码后,应在break

之后放置print("Password Correct, Unlocking")

这是因为input在循环之外,更好的方法是这样的:

local incorrect = 0
while true do
    term.clear()
    term.setTextColor( colors.white )
    term.setCursorPos(1, 1)
    print("Please Enter Password:")
    local input = read("*")

    if input == "qwerty" then
        print("Password Correct, Unlocking")
        break
    else
        if incorrect < 2 then
            incorrect = incorrect + 1
            print("Password incorrect")
            print(3 - incorrect, " tries remaining")
            sleep(1) -- let them read the print.
        else
            print("out of attempts, locking phone for 1m")
            for i = 10, 1, -1 do
                term.clear()
                term.setTextColor( colors.red )
                term.setCursorPos(1, 1)
                print(i, "s remaining")
                sleep(1)
            end
            incorrect = 0
        end
    end
end

上述代码将允许用户3尝试使用密码,如果全部使用,则会被锁定60秒并再次尝试3次。重复此操作,直到输入正确的密码。

我已经删除了内部while循环,因为它不是必需的。 incorrect已设置为本地并移至while循环之外,因此每次用户输入密码时都不会重置。{/ p>

read("*")已经在while循环中移动,因此每次都会提示用户输入密码,而不是一次询问,然后无限循环。

代码已经过测试,似乎没有任何问题。

如果任何代码没有意义,请不要犹豫。

答案 1 :(得分:0)

输入正确的密码后,您不会重置incorrect值。您需要使用break来中止循环或将incorrect设置为3或更大的值。