0

そこで私は、ユーザーに次のアクションを入力してもらいたいテキストベースのゲームに取り組んでいます。「ピクピク」しないようにコーディングする方法を模索しています。ゲームが部分的な入力(たとえば、北ではなくn)を受け入れ、「go」などのプレフィックスを無視するようにします。

forループを使用して部分入力を作成しました。これは、「go」プレフィックスを使用した入力も受け入れます。ただし、方向を入力せずに単に「go」と入力すると、デフォルトで「north」になります。これは、有効なコマンドのリストの最初の部分です。この問題は、空の入力を与えるときにも発生します。

私が今探しているのは、地図の前にある「チェック」や南の前にある「歩く」など、プレフィックスを変更する方法です。また、入力にプレフィックスのみが含まれ、実際のコマンドが含まれていない場合に認識させる必要があります。

これは現時点で関連するコードです。

move_input = input("You silently ask yourself what to do next.\n").lower()
    for n in valid_moves:
        if n.startswith(move_input) or ("go " + n).startswith(move_input):
            move_input = n
4

1 に答える 1

0

あなたはそれを言葉に分割してみることができます:

noise = ['go', 'check', 'walk']
commands = [word for word in move_input if word not in noise]
# process commands

コマンドごとに異なるプレフィックスを付ける場合は、次のようにすることができます。

prefixes = {('map', 'inventory'): ('check',),
            ('north', 'south', 'east', 'west'): ('go', 'walk')}
commands = [word for word in move_input if word not in noise]
if len(commands) == 1:
   command = commands[0]
else:
    assert len(commands) == 2 # or decide what to do otherwise
    for com, pref in prefixes.items():
        if commands[0] in pref and commands[1] in com:
           command = commands[1]
           break
    else:
        print('Invalid command')

しかし、それはあまりにも複雑に見え始めています。

于 2013-01-28T17:58:06.793 に答える