我一直在学习FreeBasic并开始编写一个很好的 Basic 文本冒险游戏。我一直遵循相同的公式,但在我最近的开发中获得了以下错误:
beta.bas(226)错误32:'结束'中预期'END IF'
这很奇怪,因为之前一切正常。这是我的代码的两个副本 -
断 -
Dim As String strInput
main:
print "You have awakened in a dark room. What do you do? "
input ">", strInput
sleep 500
if strinput = "Leave" then
goto option1L1
else if strinput = "leave" then
goto option1L1
else
print "You can't do that."
end if
sleep 500
goto main
option1L1:
print "You have left the room"
sleep 500
print "You are now outside. What do you want to do.?"
input ">", strInput
sleep 500
if strinput = "Look around" then
goto lookaround1
else if strinput = "look around" then
goto lookaround1
else
print "You can't do that."
end if
goto option1L1
lookaround1:
print "You see a road leading into a dark forest, and a road leading into a happy looking meadow. Which path do you take?"
sleep 500
input ">", strinput
if strinput = "Dark forest" then
goto darkforest
else if strinput = "dark forest" then
goto darkforest
else if strinput = "Dark Forest" then
goto darkforest
else if strinput = "Happy meadow" then
goto happymeadow
else if strinput = "Happy Meadow" then
goto happymeadow
else if strinput = "happy meadow" then
goto happymeadow
else if strinput = "happy looking meadow" then
goto happymeadow
else if strinput = "Happy looking meadow" then
goto happymeadow
else if strinput = "Happy Looking Meadow" then
goto happymeadow
else
print "You can't do that."
end if
goto lookaround1
end if
end
darkforest:
print "You have taken the path leading into the dark forest. Before you, you see a bear. What do you do?"
print "Options- 'Attack bear' or 'Run from bear'"
print "Tip- Commands are case sensitive"
sleep 500
input ">", strinput
if strinput = "Attack bear" then
goto attackbear
else if strinput = "Run from bear" then
goto runfrombear
else
print "You can't do that."
END if
goto darkforest
END
happymeadow:
print "The meadow turns out to be a trap. Unfortunately, you are caught in this trap and are now dead. Goodbye."
END if
end
attackbear:
print "You attack the bear with your 'bare' hands. You prevail, but have broken your arm. What do you do?"
print "Your options are to 'Make a splint' or to 'Press onward'"
sleep 500
input ">", strinput
if strinput = "Make a splint" then
goto makeasplint
else if strinput = "Press onward" then
goto pressonward
else
print "You can't do that."
END if
goto attackbear
end if
END
runfrombear:
print "You tried to run from the bear, but were eaten. Sorry!"
END if
end
makeasplint:
print "You made a splint, and are able to carry on."
print "Travelling..."
sleep 1000
print "You have come to a small house. What do you do?"
print "Options- 'Go inside', 'Wait outside, 'Keep travelling'"
input ">", strinput
if strinput = "Go inside" then
goto insidehouse
else if strinput = "Wait outside" then
goto outsidehouse
else if strinput = "Keep travelling" then
goto keeptravelling
else
print "You can't do that."
print "Tip: Commands are case sensitive"
goto makeasplint
END if
end
pressonward:
print "You press onward, but trip on a rock and die."
END if
end
insidehouse:
print "You have entered the cabin. Inside you find a sword. Do you want to equip the sword?"
print "Options: 'Yes' or 'No'"
input ">", strinput
if strinput = "Yes" then
goto yes
else if strinput = "No" then
goto no
else
print "Please enter either 'Yes' or 'No'"
print "Remember, all commands are case sensitive. Sorry!"
goto insidehouse
end if
end
outsidehouse:
print "You wait around outside the huse. You eventually die of starvation."
end if
end
keeptravelling:
print "You keep travelling and eventually find your way out of the forest. "
print "Travelling..."
sleep 2000
print "You have now come to a giant castle. What do you want to do?"
print "Your options are 'Go inside' and 'Leave'"
input ">", strinput
if strinput = "Go inside" then
goto insidecastle
else if strinput = "Leave" then
goto leave
else
print "You can't do that"
goto keeptravelling
END if
end
yes:
print "You equip the sword, but slip and stab yourself with it. You are dead."
end if
end
no:
print "You leave the house."
goto makeasplint
end if
end
insidecastle:
print "After entering the castle, you slip on a stone and hit your face on the floor, rendering you unconscious."
print "..."
sleep 2000
print "After you awake, you find your movement to be constricted by some sort of leather strap."
print "..."
sleep 2000
print "You hear a sound. It is a rough voice saying 'This is my swamp..."
print "The ogre kills you, and you are dead."
end if
end
leave:
print "You leave the castle, and find your way to a happy cottage, where you find a bed. What do you do now?"
print "Your options are 'Sleep' and 'Don't sleep'"
input ">", strinput
if strinput = "Sleep" then
goto sleeping
else if strinput = "Don't sleep" then
goto dontsleep
else
print "You can't do that."
goto leave
end if
end
sleeping:
print "You die in your sleep."
end if
end
dontsleep:
print "By not sleeping, you avoided the ghosts. Congrats, you've survived!"
sleep 5000
print "Do you wish to exit?"
input ">", strinput
if strinput = "Yes" then
goto exitgame
if strinput = "No" then
print "Too bad!"
goto exitgame
end if
end
exitgame:
end
要明确的是,我试图在“结束”之前添加一个“结束if”,但它仍然给了我:
“预期”结束如果'在'结束'如果'“
上次工作 -
Dim As String strInput
main:
print "You have awakened in a dark room. What do you do? "
input ">", strInput
sleep 500
if strinput = "Leave" then
goto option1L1
else if strinput = "leave" then
goto option1L1
else
print "You can't do that."
end if
sleep 500
goto main
option1L1:
print "You have left the room"
sleep 500
print "You are now outside. What do you want to do.?"
input ">", strInput
sleep 500
if strinput = "Look around" then
goto lookaround1
else
print "You can't do that."
end if
goto option1L1
lookaround1:
print "You see a road leading into a dark forest, and a road leading into a happy looking meadow. Which path do you take?"
sleep 500
input ">", strinput
if strinput = "Dark forest" then
goto darkforest
else if strinput = "Happy meadow" then
goto happymeadow
else
print "You can't do that."
end if
goto lookaround1
end
darkforest:
print "You have taken the path leading into the dark forest. Before you, you see a bear. What do you do?"
print "Options- 'Attack bear' or 'Run from bear'"
print "Tip- Commands are case sensitive"
sleep 500
input ">", strinput
if strinput = "Attack bear" then
goto attackbear
else if strinput = "Run from bear" then
goto runfrombear
else
print "You can't do that."
END if
goto darkforest
END
happymeadow:
print "The meadow turns out to be a trap. Unfortunately, you are caught in this trap and are now dead. Goodbye."
END if
end
attackbear:
print "You attack the bear with your 'bare' hands. You prevail, but have broken your arm. What do you do?"
print "Your options are to 'Make a splint' or to 'Press onward'"
sleep 500
input ">", strinput
if strinput = "Make a splint" then
goto makeasplint
else if strinput = "Press onward" then
goto pressonward
else
print "You can't do that."
END if
goto attackbear
END
runfrombear:
print "You tried to run from the bear, but were eaten. Sorry!"
END if
end
makeasplint:
print "You made a splint, and are able to carry on."
print "Travelling..."
sleep 1000
print "You have come to a small house. What do you do?"
print "Options- 'Go inside', 'Wait outside, 'Keep travelling'"
input ">", strinput
if strinput = "Go inside" then
goto insidehouse
else if strinput = "Wait outside" then
goto outsidehouse
else if strinput = "Keep travelling" then
goto keeptravelling
else
print "You can't do that."
print "Tip: Commands are case sensitive"
goto makeasplint
END if
end
pressonward:
print "You press onward, but trip on a rock and die."
END if
end
insidehouse:
print "You have entered the cabin. Inside you find a sword. Do you want to equip the sword?"
print "Options: 'Yes' or 'No'"
input ">", strinput
if strinput = "Yes" then
goto yes
else if strinput = "No" then
goto no
else
print "Please enter either 'Yes' or 'No'"
print "Remember, all commands are case sensitive. Sorry!"
goto insidehouse
end if
end
outsidehouse:
print "You wait around outside the huse. You eventually die of starvation."
end if
end
keeptravelling:
print "You keep travelling and eventually find your way out of the forest. "
print "Travelling..."
sleep 2000
print "You have now come to a giant castle. What do you want to do?"
print "Your options are 'Go inside' and 'Leave'"
input ">", strinput
if strinput = "Go inside" then
goto insidecastle
else if strinput = "Leave" then
goto leave
else
print "You can't do that"
goto keeptravelling
END if
end
yes:
print "You equip the sword, but slip and stab yourself with it. You are dead."
end if
end
no:
print "You leave the house."
goto makeasplint
end if
end
insidecastle:
print "After entering the castle, you slip on a stone and hit your face on the floor, rendering you unconscious."
print "..."
sleep 2000
print "After you awake, you find your movement to be constricted by some sort of leather strap."
print "..."
sleep 2000
print "You hear a sound. It is a rough voice saying 'This is my swamp..."
print "The ogre kills you, and you are dead."
end if
end
leave:
print "You leave the castle, and find your way to a happy cottage, where you find a bed. What do you do now?"
print "Your options are 'Sleep' and 'Don't sleep'"
input ">", strinput
if strinput = "Sleep" then
goto sleeping
else if strinput = "Don't sleep" then
goto dontsleep
else
print "You can't do that."
goto leave
end if
end
sleeping:
print "You die in your sleep."
END if
end
dontsleep:
print "By not sleeping, you avoided the ghosts. Congrats, you've survived!"
end if
end
我是一个相当新手,我很难过。我做错了什么?
答案 0 :(得分:1)
您正在使用现在过时的编程风格 - 例如你使用GOTO大量跳转。 FreeBasic提供了许多更好的概念来构建代码:函数/子函数,用户定义的类型,类,继承,......
然而,代码中存在一些导致编译错误的基本错误。一个主要的是你使用"否则如果"而不是" ElseIf" (注意空格字符)。另一个是你使用"结束如果"虽然你还没有使用&#34开始IF块;如果"或者" ElseIf"。
这是代码的一个版本,在语法上是正确的(它将编译),但仍然使用错误的代码样式(例如GOTO和标签)。此外还有语义和其他问题。例如。在GOTO之后,END直接没有意义,因为它永远无法到达。
Dim As String strInput
main:
print "You have awakened in a dark room. What do you do? "
input ">", strInput
sleep 500
if strinput = "Leave" then
goto option1L1
ElseIf strinput = "leave" then
goto option1L1
else
print "You can't do that."
end if
sleep 500
goto main
option1L1:
print "You have left the room"
sleep 500
print "You are now outside. What do you want to do.?"
input ">", strInput
sleep 500
if strinput = "Look around" then
goto lookaround1
ElseIf strinput = "look around" then
goto lookaround1
else
print "You can't do that."
end if
goto option1L1
lookaround1:
print "You see a road leading into a dark forest, and a road leading into a happy looking meadow. Which path do you take?"
sleep 500
input ">", strinput
if strinput = "Dark forest" then
goto darkforest
ElseIf strinput = "dark forest" then
goto darkforest
ElseIf strinput = "Dark Forest" then
goto darkforest
ElseIf strinput = "Happy meadow" then
goto happymeadow
ElseIf strinput = "Happy Meadow" then
goto happymeadow
ElseIf strinput = "happy meadow" then
goto happymeadow
ElseIf strinput = "happy looking meadow" then
goto happymeadow
ElseIf strinput = "Happy looking meadow" then
goto happymeadow
ElseIf strinput = "Happy Looking Meadow" then
goto happymeadow
else
print "You can't do that."
end if
goto lookaround1
end
darkforest:
print "You have taken the path leading into the dark forest. Before you, you see a bear. What do you do?"
print "Options- 'Attack bear' or 'Run from bear'"
print "Tip- Commands are case sensitive"
sleep 500
input ">", strinput
if strinput = "Attack bear" then
goto attackbear
ElseIf strinput = "Run from bear" then
goto runfrombear
else
print "You can't do that."
END if
goto darkforest
END
happymeadow:
print "The meadow turns out to be a trap. Unfortunately, you are caught in this trap and are now dead. Goodbye."
end
attackbear:
print "You attack the bear with your 'bare' hands. You prevail, but have broken your arm. What do you do?"
print "Your options are to 'Make a splint' or to 'Press onward'"
sleep 500
input ">", strinput
if strinput = "Make a splint" then
goto makeasplint
ElseIf strinput = "Press onward" then
goto pressonward
else
print "You can't do that."
END if
goto attackbear
END
runfrombear:
print "You tried to run from the bear, but were eaten. Sorry!"
end
makeasplint:
print "You made a splint, and are able to carry on."
print "Travelling..."
sleep 1000
print "You have come to a small house. What do you do?"
print "Options- 'Go inside', 'Wait outside, 'Keep travelling'"
input ">", strinput
if strinput = "Go inside" then
goto insidehouse
ElseIf strinput = "Wait outside" then
goto outsidehouse
ElseIf strinput = "Keep travelling" then
goto keeptravelling
else
print "You can't do that."
print "Tip: Commands are case sensitive"
goto makeasplint
END if
end
pressonward:
print "You press onward, but trip on a rock and die."
end
insidehouse:
print "You have entered the cabin. Inside you find a sword. Do you want to equip the sword?"
print "Options: 'Yes' or 'No'"
input ">", strinput
if strinput = "Yes" then
goto yes
ElseIf strinput = "No" then
goto no
else
print "Please enter either 'Yes' or 'No'"
print "Remember, all commands are case sensitive. Sorry!"
goto insidehouse
end if
end
outsidehouse:
print "You wait around outside the huse. You eventually die of starvation."
end
keeptravelling:
print "You keep travelling and eventually find your way out of the forest. "
print "Travelling..."
sleep 2000
print "You have now come to a giant castle. What do you want to do?"
print "Your options are 'Go inside' and 'Leave'"
input ">", strinput
if strinput = "Go inside" then
goto insidecastle
ElseIf strinput = "Leave" then
goto leave
else
print "You can't do that"
goto keeptravelling
END if
end
yes:
print "You equip the sword, but slip and stab yourself with it. You are dead."
end
no:
print "You leave the house."
goto makeasplint
end
insidecastle:
print "After entering the castle, you slip on a stone and hit your face on the floor, rendering you unconscious."
print "..."
sleep 2000
print "After you awake, you find your movement to be constricted by some sort of leather strap."
print "..."
sleep 2000
print "You hear a sound. It is a rough voice saying 'This is my swamp..."
print "The ogre kills you, and you are dead."
end
leave:
print "You leave the castle, and find your way to a happy cottage, where you find a bed. What do you do now?"
print "Your options are 'Sleep' and 'Don't sleep'"
input ">", strinput
if strinput = "Sleep" then
goto sleeping
ElseIf strinput = "Don't sleep" then
goto dontsleep
else
print "You can't do that."
goto leave
end if
end
sleeping:
print "You die in your sleep."
end
dontsleep:
print "By not sleeping, you avoided the ghosts. Congrats, you've survived!"
sleep 5000
print "Do you wish to exit?"
input ">", strinput
if strinput = "Yes" then
goto exitgame
ElseIf strinput = "No" then
print "Too bad!"
goto exitgame
end if
end
exitgame:
end
答案 1 :(得分:0)
我是一个相当新手,我很难过。我做错了什么?
老实说,废弃您的代码并重新开始。 BASIC不是任何一种现代语言的指标,它会教会你在尝试使用现代语言时限制你的坏习惯 - for example your prolific use of goto
s which are in essence shunned nowadays, and have been since the mid 70s。
答案 2 :(得分:0)
使用CASES代替ElseIf
您可以使用Array在var中存储多个选项或消息
Dim as integer i = 0
dim as String Message(3)
Message(1) = "Hello"
Message(2) = "Middle Answer"
Message(3) = "End Answer"
For i = 1 To 16 Step 1 ' Init loop until 16 cicles
print i
Select Case as const i
Case 1
Print "The message is:" & Message(i) ' The first 3 steps
Case 2
Print "The message is:" & Message(i) ' The first 3 steps
Case 3
Print "The message is:" & Message(i) ' The first 3 steps
Case 4 ' If i = 4 Give this solution
Print " Solution 1"
Case 8 ' Same when = 8
Print "Middle"
Case 16 ' At last = 16
Print "Last"
End Select
next i
如您所见,您可以使用CASE输入更多条件选项,对于文本冒险来说,还必须创建由选项条件的设置变量:
Dim AnswerPrompt As string
Dim MyStep as Integer
Dim MyGold as Integer
'For a correct developing You Have to set each var before you use it
Dim as Integer MySword = 0 'Directly when you set
AnswerPrompt = "" 'Before the program ask
MyStep = 1
MyGold = 15
Line Input "Do you want give 10 gold for the Sword ?"; AnswerPrompt
If UCASE(AnswerPrompt) = "YES" Then ' UCASE transform all letter in capital
If MyGold >= 10 Then
MyStep = MyStep + 5
MyGold = MyGold - 10
MySword = 1
Else
Print "Your Gold is not Enough"
End If
Else
Print "Allright lets go away"
End If
尽管FreeBASIC为兼容起见从旧的BASIC继承了GOTO,但好的做法是创建一个不需要使用GOTO的结构,使用Do While直到循环创建循环,并在执行任务的地方使用先前指定的功能。