Python游戏帮助:如何让一个函数一旦为真就始终保持为真。

2024-06-16 12:13:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个python游戏,有一个小问题。有一条走廊左右分开。当你向左走的时候,你会得到一把钥匙,当你向右走的时候,你会看到一个锁着的电梯。钥匙是打开电梯的钥匙。当一个用户试图在游戏中后退,然后他们又回到大厅时,问题就出现了。代码如下:

def elevator(Lock):
    if lock== 'unlock':
        print "Unlocked"

    else:
        print "It is locked"

def safe():
    print "obtain key"
    right_left('True')

def right_left(Key):
    backward = ['back']
    left = ['left', 'Left']
    right = ['right', 'Right']
    choice = raw_input("Enter Command > ")

    if Key == 'True':
        print "Left or right?"

        if choice== 'right':
            elevator('Unlock')
        elif choice == 'back':
            back()

    else:
        if any (s in choice for s in backward):
            back()

        elif any (s in choice for s in left):
            safe()

        elif any (s in choice for s in right):
            elevator()

def back():
    print "Back in the game."
    right_left('False')

我遇到的一个大问题是,如果用户拿起钥匙回到左右大厅,然后他们选择返回。如果他们回到游戏中,一路回到开头(这不在本示例/示例中),它将返回'back()'函数并继续返回'right\u left'函数,Key=false。但必须是真的。我不知道“right\u left”怎么会是真的,不管用户将来做什么,它都会是真的。谢谢,很抱歉这让人困惑


Tags: key用户inright游戏ifdefback
2条回答

这听起来像是面向对象代码的一个好问题。下面是一个简单的例子。首先,您可能需要创建一个游戏状态对象,如下所示:

class gameState(object):
   def __init__(self):
      self.hasKey = False

   def pickUpKey(self):
      self.hasKey = True

   def hasKey(self):
      return self.hasKey

这个game state对象还可以用来存放更多关于yoru游戏的信息,例如当前位置。你知道吗

然后您需要创建gameState对象的实例(传递给每个函数或用作全局变量)。例如,您的main可能看起来像:

def main():
    currentState = gameState()
    main_game_loop( currentState )

问题是,您的结构在无休止的right\u left()调用堆栈上调用自己,这似乎无法逃脱。您只将两个不同的字符串('True','False')传递到此方法中,因此没有用户的真实状态。你知道吗

您需要为用户重新构造路径,并将移动决策与文件室逻辑分开。然后可以为用户保存某种上下文,也可能为文件室保存某种状态。这将受益于面向对象的设计,否则您将需要使用globals来保持房间的状态。你知道吗

要使用全局变量执行此操作,可以定义以下方法:

# global variable to keep track
rooms=['safe', 'closet','main']
currentRoom=rooms[0]

# returns which the new room you are in.
def move(fromRoom, direction): 

# main section
while (response != "exit"):
   choice = raw_input("Enter Command > ")
   move(currentRoom, choice)

# etc..

相关问题 更多 >