2

Pythonで基本的なテキストアドベンチャーRPGゲームを作っています。私の問題は、ダンジョンがそれぞれ座標を持つ正方形に分割される移動システムにあります。プレイヤーは移動先の座標を求められ、それが関数 move2 に渡されます。次に、プログラムは以下のような一連の if ステートメントをチェックし、それに応じたフロアのマップを出力します。座標ごとに if ステートメントがあるため、40 個の異なる if ステートメントがあり、それぞれにマップの画像が含まれています。問題は、プレイヤーが座標を求められた後、何も起こらないことです。座標を要求した後、プログラムは終了しますが、エラーは発生しません (正しい座標を入力していることはわかっています)。

move = input("\n To move around the room Hero, simply think the coordinates of the tile        you want to move to! However, you can only move one tile at a time Ex: You are at tile 5,4. You can move to 5,3 5,5 or 4,4")
move2(move)

悪いコードで申し訳ありません。これを行うためのはるかに優れた方法があると確信していますが、まだ私が知っている方法はありません...

def move2 (move):      
    while move == "5,1" "5,2" "5,3" "5,4" "5,5" "5,6" "5,7" "5,8" "4,1" "4,2" "4,3" "4,4" "4,5" "4,6" "4,7" "4,8" "3,1" "3,2" "3,3" "3,4" "3,5" "3,6" "3,7" "3,8" "2,1" "2,2" "2,3" "2,4" "2,5" "2,6" "2,7" "2,8" "1,1" "1,2" "1,3" "1,4" "1,5" "1,6" "1,7" "1,8":
        if move == "5,3":
            move = input("""
       1  2  3  4  5  6  7  8                
       __ __ __ D_ __ __ __ __                 
    1 |_ |_ |_ |_ |_ |_ |_ |_C|                      
    2 |_ |_ |_ |_ |_ |_ |_ |_ |                             
    3 |_ |?_|_ |_ |_ |_ |_ |_ |                            
    4 |_ |_ |_ |_ |_ |_ |_ |_ |                              
    5 |_ |_ |_x|_ |_ |_ |_ |_ |                              
                D""")    
4

3 に答える 3

1

他の方も指摘されている通り、

while move == "5,1" "5,2" "5,3" "5,4" "5,5" "5,6" "5,7" "5,8" "4,1" "4,2" "4,3" "4,4" "4,5" "4,6" "4,7" "4,8" "3,1" "3,2" "3,3" "3,4" "3,5" "3,6" "3,7" "3,8" "2,1" "2,2" "2,3" "2,4" "2,5" "2,6" "2,7" "2,8" "1,1" "1,2" "1,3" "1,4" "1,5" "1,6" "1,7" "1,8":

すべての文字列を連結 (結合) します。代わりに必要なのは次のとおりです。

while move in ("5,1", "5,2", "5,3", "5,4", "5,5", "5,6", "5,7", "5,8", "4,1", "4,2", "4,3", "4,4", "4,5", "4,6", "4,7", "4,8", "3,1", "3,2", "3,3", "3,4", "3,5", "3,6", "3,7", "3,8", "2,1", "2,2", "2,3", "2,4", "2,5", "2,6", "2,7", "2,8", "1,1", "1,2", "1,3", "1,4", "1,5", "1,6", "1,7", "1,8"):

しかし、それもそれほど素晴らしいことではありません。代わりに、より優れた文字列マッチングを使用します。

import re
while re.match(r'\d,\d', move):
于 2013-06-25T20:42:41.327 に答える
0

適切なコーディング プラクティスとして、長い宣言をコードの別の部分に移動する必要があります。簡単なリファクタリング:

allowed_moves =["5,1", "5,2", "5,3", "5,4",...]
while move in allowed_moves:
    etc...

また、Python を学習するための優れたリソースを探している場合は、これだけでなく、プログラミングのキャリアに役立つその他の無数のことにも役立つ次の本をお勧めします。

http://www.greenteapress.com/thinkpython/

オンラインで無料で、私の教授によって書かれています。

于 2013-06-25T20:40:54.540 に答える