我试图在游戏中为基于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函数错误或解决方法。
谢谢!
答案 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或更大的值。