Python - Dungeon Crawler Game - 通过列表移动一个地方

时间:2016-10-05 12:41:50

标签: python python-3.x

我正在编写一个基本的地下城爬行器,而且我在地图上导航时遇到了问题。我有一个存储在列表列表中的地图,如下所示:

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]
]

所有1代表房间,0代表墙壁。

我在地图上移动的代码将玩家位置表示为X,Y坐标,然后将地图作为参数传递给函数,使用X,Y坐标作为索引参考。 (因此,Y将是要引用的列表,X将是该列表中的哪个项目)

所以我的代码:在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.我添加了显示玩家位置的打印功能,因此您可以看到它在其他所有方向都有效。

有没有人发现我做错了什么?我对编程很新,所以这可能是一个根本性的错误,甚至可能只是一个错字。我已经被困了多年了!

由于

1 个答案:

答案 0 :(得分:0)

playerPosY == goDown(playerPosX, playerPosY, map)

应该是

playerPosY = goDown(playerPosX, playerPosY, map)

你有一个等价运算符而不是赋值