所以基本上这是我正在制作的一个小字符串游戏的一部分,这真的让我感到茫然。玩家可以按“a”或“d”向左或向右看房间以收集线索。如果玩家已经看过那个地方。它弹出一条消息,说“你已经来过这里”
虽然,它会转到正确的一次,然后下一个点会弹出一条消息,说“你已经在这里”。例。如果我按“a”然后“d”代表“d”它会说我已经去过那里但我没有。任何帮助/建议??
left = 0
right = 0
#Room 1 movements
def roomOneLeft():
global left
left = 1
print '-- You search the rubble and find some cloth'
return roomOneMoves()
def roomOneRight():
global right
right = 1
print '-- You find a pick under a wooden chair'
return roomOneMoves()
#room 1 user choose
def roomOneMoves():
global left
global right
move = raw_input("")
if left == 1:
print 'you have already been here'
return roomOneMoves()
if right == 1:
print 'you have already been here'
return roomOneMoves()
if move == 'a':
roomOneLeft()
if move == 'd':
roomOneRight()
roomOneMoves()
编辑:谢谢大家的帮助。如果我的代码非常令人沮丧,我很抱歉!让它现在运作。但只能得到你的帮助。
答案 0 :(得分:3)
虽然有很多事情可以说对你的代码“不确定”,但你的问题来自于left
和right
都会被检查,无论玩家做出什么动作。如果您按'a'left
变为1.按'd'将检查left
是否为1并打印消息。
答案 1 :(得分:2)
浏览代码:
roomOneMoves()
a
,移动变为'a'
left
不是1
,因此我们不会输入if的分支。right
不是1
所以我们不会输入if的那个分支。move
'a'
所以我们致电roomOneLeft()
left
变为1
,我们会打印一条消息,然后再次致电roomOneMoves()
。d
,move
变为'd'
left
现在为1,因此我们会打印一条消息并再次致电roomOneMoves()
。换句话说,在你决定用户真正想要去哪个房间之前,你正在检查你是否去过一个房间并纾困。
答案 2 :(得分:1)
在为时已晚之前,您不会检查行动。观察:
move = raw_input("")
if left == 1:
print 'you have already been here'
return roomOneMoves()
if right == 1:
print 'you have already been here'
return roomOneMoves()
if move == 'a':
roomOneLeft()
if move == 'd':
roomOneRight()
如果用户实际离开,您只想评估left == 1
部分,不是吗?因此,嵌套if语句,如下所示:
move = raw_input("")
if move == 'a':
if left:
print 'you have already been here'
return roomOneMoves()
roomOneLeft()
if move == 'd':
if right:
print 'you have already been here'
return roomOneMoves()
roomOneRight()
此外,您应该重新考虑您的数据结构,并使用具有布尔值或类似的字典而不是全局变量。另外,由于大多数Python解释器无法有效地评估tail recursion,您可能希望使用迭代主循环而不是递归调用下一个函数。
答案 3 :(得分:0)
问题在于您的roomOneMoves
功能:
move = raw_input("")
首先,你得到了用户的指示;你还没有评估它。
if left == 1:
print 'you have already been here'
return roomOneMoves()
if right == 1:
print 'you have already been here'
return roomOneMoves()
您检查用户是否曾经向左或向右走,并显示消息,更糟糕的是,您再次启动roomOneMoves
。
if move == 'a':
roomOneLeft()
if move == 'd':
roomOneRight()
只有在那之后,你才真正评估新的方向。
您应首先评估新方向,并且仅在评估方向是否输入之前:
move = raw_input("")
if move == 'a':
if left == 1:
print 'you have already been here'
else:
roomOneLeft()
elif move == 'd':
if right == 1:
print 'you have already been here'
else:
roomOneRight()
roomOneMoves()
此外,您可能希望最后无条件地重新启动该方法。