首先,我知道這是一個混亂,無組織的一堆Lua,但我仍在學習,所以請原諒我。功能和while語句創建無限打印循環
我的問題是: 我在iPad的TouchLua +上運行我的代碼,它運行的很順利,直到我回到tinput = io.read(),無論是輸入'attack'還是'run away'I最終會在屏幕上印上「這不是一個有效的命令」,這是無限的。
我認爲這是while語句中的get_input()與我已經將tin.read()定義爲tinput而不是整個腳本的標準輸入之間的衝突。
我可以接受這一點,除了我從中學習的腳本(目前的YouTube視頻)沒有這樣做的事實,我已經比較了兩者和功能,以及'如果能夠'和他們寫的完全一樣。
我試圖找到答案在谷歌上,視頻和原始腳本存儲在github上的意見,但我不明白github,但谷歌並沒有幫助。
我做了什麼錯誤,或者錯過了,或者一般搞砸了......
另外,請原諒我的大量使用的意見,對不起。
print("Welcome to the game")
-- expilictly set the variable to an empty string
-- because it is used in a 'while' loop
input = ""
inv = {"sword", "coin", "armour"}
-- inventory function
function get_inv()
for i, v in pairs(inv) do
print(i .. " " .. v)
end
end
-- invalid command function
function inv_com()
print("You did not type a valid command...")
end
-- function to simplify 'while' statement throughout
-- entire programme
function get_input()
print("What do you want to do?")
i = io.read() -- get what the user types
return i
end
-- fuction adding item to inventory
function push_inv(item)
table.insert(inv, item)
end
-- function removing item from inventory
function pop_inv(item)
for i, v in pairs(inv) do
if v == item then
table.remove(inv, i)
end
end
end
-- '~=' means not equal to
while input ~= "leave cave" do
input = get_input() -- get what the user types
-- '==' means equal to
if input == "inspect" then
print("You are in a cave")
elseif input == "leave cave" then
print("You leave cave")
elseif input == "inv" then
get_inv()
else
inv_com()
end
end
input = ""
while input ~= "follow path" do
input = get_input()
if input == "inspect" then
print("You are at the base of a hill. There is a path")
elseif input == "follow path" then
print("You follow the path")
print("A troll appears wielding an axe")
print("What do you want to do")
tinput = io.read()
if tinput == "attack" then
print("You smack it, and it falls dead")
elseif tinput == "run away" then
print("You cowardly run away and it smack you, and steals your coin")
pop_inv("coin")
else
print("You stand there, it stabs you, you die")
os.exit()
end
elseif input == "inv" then
get_inv()
else
inv_com()
end
end
input = ""
-- a boolean value can only have 1 of 2 values
-- 'true' or 'false', this works great for the have_key
-- value because there are only 2 possibilities:
-- you either have the key or you don't.
have_key = false
-- this stement mean: while this statement:
-- 'input == "open gate"
-- and have_key' is true
while not (have_key == true and input == "open gate") do
input = get_input
if input == "inspect" then
--- if we dont have the key, tell us
if have_key == false then
print("there is a path behind you, a gate infront of you and key is hidden in the grass")
-- if we have the key, dont tell us
elseif have_key == true then
print("There is a path behind you, and a gate infront of you")
else
print("you did not put a valid command")
end
-- we now have the key, set variable to true
elseif input == "grab key" then
have_key = true
print("You grabbed the key")
table.insert(inv, "gate key")
elseif input == "inv" then
get_inv()
elseif input == "open gate" then
if have_key == true then
print("You've escaped")
elseif have_key == false then
print("The gate is locked")
end
elseif input == "pick up magic" then
push_inv("MAGIC")
elseif input == "inv" then
get_inv()
else
inv_com()
end
end
print("You won the game. Please leave!")
如果我的回答有幫助,可否請您將其標記爲已接受?如果它仍然處於無限循環狀態,我很樂意再看看並相應地編輯我的答案。 –