0

ですから、暇なときにかなり基本的なRPGを作成してきましたが、つまずきになりました。プレイヤーが戦闘に出入りするたびにコマンドの辞書を変更することで、特定の機能だけが特定の時間にアクセスできるようにしたいと思います。ただし、辞書キーを検索するために設定したループは、最初に記述されたコマンドを除いて、どのコマンドでも機能しないようです。

メインファイル:

    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)

*注:ループは他の誰かのコードから取得されました。私は主に学習目的でゲームを作成しているので、それを使用しています。

4

2 に答える 2

1

command.pyで定義されているグローバル変数を変更しようとしているコードのようです。Main fileつまり、次のようなものです: Global Variable from a different file Python

Commandsコードに 2 つの変数があり、1 つは のスコープにありcommand.py、もう 1 つは のスコープにあるため、これは機能しませんMain file。2 つのファイルでグローバル変数を共有しようとするのではなく (これは IMO ではかなりひどい考えです)、次Commandsの属性を作成することをお勧めしますPlayer

class Player:
    def __init__(self):
        ...
        self.Commands = {
            "attack": Player.attack,
            "flee": Player.flee,
            "help": Player.help
        }
于 2013-03-24T09:55:50.437 に答える
0

私は次のようなことをします

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

しかし、@ arunkumarが指摘しているように、コードを追加しないと、この質問に答えることは困難になります。

于 2013-03-23T23:57:24.817 に答える