私は基本的なダンジョンクローラーを書いていますが、地図の周りをナビゲートするのに問題があります。私はこのように、リストのリストに格納されたマップを持っている: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 ==:
おかげ
の等価演算子を持っていますgoDown(playerPosX、playerPosY、map) ' =、=ではなく=を使用することを意味します。 – Mephy
補足として、[Code Review](http://codereview.stackexchange.com/)を試してみてください。あなたが得ることができる多くのヒントがあります:) – Mephy