2016-10-05 6 views
0

私は基本的なダンジョンクローラーを書いていますが、地図の周りをナビゲートするのに問題があります。私はこのように、リストのリストに格納されたマップを持っている:Python - Dungeon Crawler Game - リストを1箇所移動する

map = [ 
    [0,0,0,0,0], 
    [0,1,1,1,0], 
    [0,1,0,1,0], 
    [0,1,1,1,0], 
    [0,0,0,0,0] 
] 

すべて1sが、壁のための部屋、0を表します。

地図上を移動する私のコードは、プレイヤーの位置をX、Y座標で表し、X、Y座標をインデックス参照として使用して、マップを関数の引数として渡します。 (したがって、どのリストを参照するかは、そのリスト内のどのアイテムでもよいでしょう)

私のコードは、X、Y軸上のプレイヤーの位置を示します。引数としてマップとX、Yを渡して、上下左右のプレーヤーの入力を求めます。インデックス位置+ 1が0でないかどうかをチェックします。それが自由であればプレーヤーの位置を1だけ更新します。これはすべて以下のとおりです。

playerPosX = 1 
playerPosY = 1 

map = [ 
    [0,0,0,0,0], 
    [0,1,1,1,0], 
    [0,1,0,1,0], 
    [0,1,1,1,0], 
    [0,0,0,0,0] 
] 

def goRight(posX, posY, map): 
    if map[posY][posX + 1] == 0: 
     print('You can\'t go that way.') 
    else: 
     posX += 1 
    return posX 

def goLeft(posX, posY, map): 
    if map[posY][posX - 1] == 0: 
     print('You can\'t go that way.') 
    else: 
     posX -= 1 
    return posX 

def goDown(posX, posY, map): 
    if map[posY + 1][posX] == 0: 
     print('You can\'t go that way.') 
    else: 
     posY += 1 
    return posY 

def goUp(posX, posY, map): 
    if map[posY - 1][posX] == 0: 
     print('You can\'t go that way.') 
    else: 
     posY -= 1 
    return posY 

while True: 
    print(playerPosX, playerPosY) 
    print('North(n), South(s), West(w), East(e), or Quit(q)?') 
    direction = input() 
    if direction == 'w': 
     playerPosX = goLeft(playerPosX, playerPosY, map) 
    elif direction == 'e': 
     playerPosX = goRight(playerPosX, playerPosY, map) 
    elif direction == 'n': 
     playerPosY = goUp(playerPosX, playerPosY, map) 
    elif direction == 's': 
     playerPosY == goDown(playerPosX, playerPosY, map) 
    elif direction == 'q': 
     print('Thank you for playing!') 
     break 
    else: 
     print('I didn\'t catch that.') 

問題は、goDown機能とは別に、すべてのコードが動作していることです。リストのYインデックスの位置は1ずつ増加していません。プレーヤーの位置を表示するプリント機能を追加しました。これは、それが他のすべての方向で機能することを確認できます。

誰かが私が間違っていることを発見していませんか?私はかなりプログラミングに新しいので、それは基本的なエラーになる可能性がありますか、または単にタイプミスかもしれません。私は年齢のために立ち往生してきました! `playerPosY ==:

おかげ

+3

の等価演算子を持っていますgoDown(playerPosX、playerPosY、map) ' =、=ではなく=を使用することを意味します。 – Mephy

+1

補足として、[Code Review](http://codereview.stackexchange.com/)を試してみてください。あなたが得ることができる多くのヒントがあります:) – Mephy

答えて

0

playerPosY == goDown(playerPosX, playerPosY, map)

playerPosY = goDown(playerPosX, playerPosY, map)

する必要がありますあなたは` goDown`を呼び出す行に代わりに割り当て

+0

ああ。じぶんの。神。私はこのコードを何時間も見つめています...ありがとう! – kimnorth

+4

私たちは一般的に、単純なタイプミスにコメントを付けて答えます。このような質問は通常、コミュニティメンバーによって閉鎖され、システムによって自動削除されます。これは、今後の読者には役に立たないためです。誰かがまったく同じ問題を抱えていても、検索でこの質問を見つけることはまずありません。質問に自動削除プロセスを妨げる1つ以上の肯定的な回答がある場合。 –

関連する問題