如何使用列表在 python 上制作一个简单的 3x3 迷宫?

How do you make a simple 3x3 maze on python using lists?

我有这个项目,我必须制作一个基本的基于文​​本的 maze/adventure 游戏。到目前为止,这是我的代码,但很奇怪。我希望它能够随时退出并在输入不在选择范围内时显示 'Please choose an available direction' 。我知道我的代码是错误的,但我不知道该怎么办。有人可以帮我吗?谢谢!

顺便说一句,我用这个 link 作为指南 http://programarcadegames.com/index.php?chapter=lab_adventure

maze_list = []
maze = ['Available Directions: East', None, 1, None, None]
maze_list.append(maze)
maze = ['Available Directions: East, South', None, 2, 3, 0]
maze_list.append(maze)
maze = ['Available Directions: West', None, None, None, 1]
maze_list.append(maze)
maze = ['Available Directions: North, East', 1, 4, None, None]
maze_list.append(maze)
maze = ['Available Directions West, South', None, None, 5, 3]
maze_list.append(maze)


current_tile = 0
print(maze_list[0])


done = False
while done != True:

    print('')
    print(maze_list[current_tile][0]) # available directions
    move = raw_input('Which direction will you take?' )
    if move == 'East' or 'east' or 'EAST':
        next_tile = maze_list[current_tile][2]
        current_tile = next_tile

        print('')
        print(maze_list[current_tile][0])
        move = raw_input('Which direction will you take? ')
        if move == 'South' or 'south' or 'SOUTH':
          next_tile = maze_list[current_tile][3]
          current_tile = next_tile

          print('')
          print(maze_list[current_tile][0])
          move = raw_input('Which direction will you take? ')
          if move == 'East' or 'east' or 'EAST':
            next_tile = maze_list[current_tile][2]
            current_tile = next_tile

            print('')
            print(maze_list[current_tile][0])
            move = raw_input('Which direction will you take? ')
            if move == 'South' or 'south' or 'SOUTH':
              next_tile = maze_list[current_tile][3]
              current_tile = next_tile
              print('Nice')


              if move == 'Quit' or 'quit' or 'QUIT':
                print('Better luck next time. \nGoodbye.')
              elif move == 'West' or 'west' or 'WEST':
                next_tile = maze_list[4]
                current_tile = next_tile
              else:
                print('Please choose an available direction')

          elif move == 'Quit' or 'quit' or 'QUIT':
            print('Better luck next time. \nGoodbye.')
          elif move == 'North' or 'north' or 'NORTH':
            next_tile = maze_list[1]
            current_tile = next_tile
          else:
            print('Please choose an available direction')

        elif move == 'Quit' or 'quit' or 'QUIT':
          print('Better luck next time. \nGoodbye.')
        elif move == 'East' or 'east' or 'EAST':
          next_tile = maze_list[current_tile][2]
          current_tile = next_tile
        else:
          print('Please choose an available direction')

    elif move == 'Quit' or 'quit' or 'QUIT':
      print('Better luck next time. \nGoodbye.')
        else:
        print('Please choose an available direction.')

我开始这样做是为了尝试一件有趣的事情。 (下面这个可能不是答案,但无论如何......发布它)

但让我告诉你一件事:该指南非常 "low" 质量(是的,我可能太苛刻了,但是嘿!只是一个意见)。即使这是初学者编程,我也没有理由不介绍字典和其他常用工具。

我在第 10 点或第 11 点停了下来,继续我到目前为止的内容。 基本上目标是根据你给我的网站上的数字移动到厨房。如果您有兴趣了解更多或有任何问题,我很乐意回答。

祝你好运:)

import sys
room_list = [] 

#2,3,4
room_list.append(["Bedroom 2, You can go north and east.",3,1,None,None])
room_list.append(["South Hall, ...",4,2,None,0])
room_list.append(["Dining Room, ...",5,None,None,1])
room_list.append(["Bedroom 1, ...",None,4,0,None])
room_list.append(["North Hall, ...",6,5,1,3])
room_list.append(["Kitchen, ...",None,None,2,4])
room_list.append(["Balcony, ...",None,None,4,None])

#5
current_room = 0

#6
#print(room_list)

#7
#print(room_list[0])

#8
#print(room_list[current_room])

#9
#print(room_list[current_room][0])

#10
done = False


#10++ Here I started writing my own code... :)

directions = {"North":1,"East":2,"South":3,"West":4}

#11
while not done:

    print("\n"+room_list[current_room][0])
    q = "0"
    valid_choice = False

    while not valid_choice:

        while not directions.get(q.title()):
            if q != "0":
                print("Try again...")
            q = raw_input("Where do you want to go? (North,East,South or West) Or Quit (Q)")
            if q.title() == "Q":
                print("You pressed Q. Exit")
                sys.exit()

        next_move = directions.get(q.title()) 
        next_room = room_list[current_room][next_move]

        if next_room:
            valid_choice = True
            current_room = next_room                
        else:
            print("You can't go that way")
            q = "0" # reset question

    if current_room == 5:
        print("\nYou are in: "+room_list[5][0])
        done = True

Q: Hi, thanks for this! If you don't mind me asking, what do the directions = {"North":1,"East":2,"South":3,"West":4} and the directions.get(q.title()) do?

directions = {"North":1,"East":2,"South":3,"West":4} 在这种情况下是字典。它包含键(北、东、南、西)及其对应的值(1、2、3、4)。因此,当您键入 directions["North"] 时,您实际上得到的值是 1.

但是还有另一种获取值的方法,那就是使用 directions.get() 函数。当您这样做并且密钥不存在时,返回 None。例如。 directions.get("monkey") = None 但 directions.get("East") = 2。这在我们使用 while not 循环时非常有用。在用户输入有效内容之前,q 将是 None 并重复问题。

最后 q 是问题返回的字符串。而 str.title() 函数 returns 首字母大写的字符串。例如。 "hellOOO".title() = "Hellooo" 这就是为什么您可以输入 "easT" 并仍然得到 "East" 的原因,这是您需要制作 directions.get 的值("East") 工作。

Q: one more question (sorry i'm quite new at this), if i wanted to add a quit function, where would i insert it? i tried placing it in lines before else statements but i get errors.

我补充了:

import sys

if q.title() == "Q":
    print("You pressed Q. Exit")
    sys.exit()