你如何使用列表在python上创建一个简单的3x3迷宫?

时间:2017-10-01 11:14:56

标签: python maze

我有这个项目,我必须制作一个基于文本的基本迷宫/冒险游戏。这是我的代码到目前为止,但它很奇怪。我希望它能够随时退出并且当输入不在选项中时显示“请选择可用方向”。我知道我的代码错了,但我不知道该怎么做。有人可以帮我吗?谢谢!

顺便说一句,我使用此链接作为指南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.')

1 个答案:

答案 0 :(得分:0)

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

但是,让我告诉你一些事情:指南是非常低的"质量(是的,我可能太苛刻,但嘿!只是一个意见)。即使认为这是初学者编程,我也没有看到不引入词典和其他常用工具的理由。

我在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
  问:嗨,谢谢!如果你不介意我问,那该怎么办?   directions = {" North":1," East":2," South":3," West":4}和   directions.get(q.title())吗?

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

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

最后q是从问题返回的字符串。 str.title()函数返回第一个字母大写的字符串。例如。 " hellOOO" .title()=" Hellooo"这就是为什么你可以输入" easT"并且仍然得到东方"这是使direction.get(" East")工作所需的价值。

  

问:如果我想添加,还有一个问题(对不起,我很陌生)   退出功能,我会在哪里插入?我试着把它放在线上   在else语句之前,但我得到错误。

我补充说:

import sys

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