2013-03-23 2 views
0

Итак, я создаю довольно простой rpg в свое свободное время, но я достиг камнем преткновения. Я хочу сделать так, чтобы только определенные функции были доступны в определенное время, изменяя словарь команд каждый раз, когда игрок переходит в битву или выходит из нее. Тем не менее, цикл, который я настроил для поиска по клавишам словаря, кажется, не работает для каких-либо команд, кроме тех, которые изначально были написаны.Изменение словарей функций - Python

Главный файл:

from commands import * 

    Commands = { 
     "travel": Player.travel, 
     "explore": Player.explore, 
     "help": Player.help, 
     } 

    p = Player() 

    while (john_hero.health > 0): 
     line = raw_input("=> ") 
     args = line.split() 
     if len(args) > 0: 
      commandFound = False 
      for c in Commands.keys(): 
        if args[0] == c[:len(args[0])]: 
          Commands[c](p) 
          commandFound = True 
          break 
      if not commandFound: 
        print "John's too simple to understand your complex command." 

command.py

  class Player: 
       def __init__(self): 
        self.state = "normal" 
        john_hero = John() 
        self.location = "Town" 
        global Commands 
        Commands = { 
          "attack": Player.attack, 
          "flee": Player.flee, 
          "help": Player.help 
          } 
       def fight(self): 
        Player.state = "fight" 
        global Commands 
        enemy_a = Enemy() 
        enemy_name = enemy_a.name 
        print "You encounter %s!" % (enemy_name) 

* Примечание: Петля была взята из чужого кода. Я использую его, так как я создаю игру в основном для учебных целей.

+1

где код, который изменяет 'Commands'? – arunkumar

+0

@arunkumar А, я только что добавил. Оглядываясь назад, мне было довольно глупо не включать это. – IndustrialPioneer

ответ

0

Я хотел бы сделать что-то вроде

commands = {"travel":{"cmd":Player.travel, "is_available":True}} 
for key in commands: 
    if commands[key]["is_available"]: 
     print "do stuff" 

, но как отметил @arunkumar это будет трудно ответить на этот вопрос, не больше кода.

1

кажется, что ваш код в command.py пытается изменить глобальную переменную, которая определена в Main file, другими словами, что-то вроде этого: Global Variable from a different file Python

Это не работает, потому что ваш код теперь имеет две Commands переменные, один в области command.py, один в области Main file. Вместо того, чтобы сделать два файла разделить глобальную переменную (которая является довольно страшная мысль IMO), я предлагаю вам сделать Commands атрибут Player:

class Player: 
    def __init__(self): 
     ... 
     self.Commands = { 
      "attack": Player.attack, 
      "flee": Player.flee, 
      "help": Player.help 
     } 
Смежные вопросы