2013-07-08 58 views
2

所以我试图创建一个基于文本的游戏,并且有人建议我将地图数据存储为多维数组我一直在试图弄清楚我该怎么做或怎么做我甚至可以浏览多维数组。在我看来,这将是难以置信的困难,但我不得不问,因为我无法自行解决。如果这个问题太含糊,让我知道什么应该更具体。用于基于文本的游戏的多维数组

+0

它是什么样的游戏,主要思路是什么? –

+0

@Markus Meskanen就导航设置方式而言,它就像Zork一样 – kevin2314

回答

1

手动创建多维列表

world_map = [['*', '*', '*', '*'], 
      ['*', ' ', 'i', '*'], 
      ['*', ' ', ' ', '*'], 
      ['*', '*', '*', '*']] 

*是一堵墙和i可能是球员。 要通过这个世界地图循环,使用两个for循环:

for row in world_map: 
    for column in row: 
     print(column, end="") 
    print() 

这将打印的世界地图。

如果你需要留下的球员移动,你可以这样做:

for row in world_map: 
    for i, column in enumerate(row): 
     if column == "i": 
      if i > 0 and row[i - 1] == ' ': 
       row[i - 1] = 'i' 
       row[i] = ' ' 

您也可以直接与world_map[row][column]访问元素,如果你知道你的元素的位置。

你必须自行完成其余的工作。 此外,这可能不是最好的方法,你应该使用类的玩家等,但这对初学者适用:)

+0

非常感谢这些信息对我应该如何在地图上移动以及明确的解释非常有帮助。 – kevin2314

+0

很高兴帮助:) –

2

多维数组无非是一个数组的元素映射到另一个数组,通常这些“子阵列”中的每一个在大小上相等(但不严格)。

inner = [ "" ] * 10 
outer = [ [].extend(inner) for x in inner ] 

这将创建一个方形的多维数组10×10个元素。

可以访问这些元素为:

outer[outer_index][inner_index] 

只是可视的外部和内部和指数上的网格,与外穿过x轴和内遍历的y轴。上述阵列将看起来有点像这样:

"" "" "" "" "" "" "" "" "" "" 0 
"" "" "" "" "" "" "" "" "" "" 1 
"" "" "" "" "" "" "" "" "" "" 2 
"" "" "" "" "" "" "" "" "" "" 3 
"" "" "" "" "" "" "" "" "" "" 4 (inner) 
"" "" "" "" "" "" "" "" "" "" 5 
"" "" "" "" "" "" "" "" "" "" 6 
"" "" "" "" "" "" "" "" "" "" 7 
"" "" "" "" "" "" "" "" "" "" 8 
"" "" "" "" "" "" "" "" "" "" 9 
0 1 2 3 4 5 6 7 8 9 

     (outer) 

如果我更新外的元件6和8的值,网格将改变:

outer[6][8] = "X" # marks the spot 

"" "" "" "" "" "" "" "" "" "" 0 
"" "" "" "" "" "" "" "" "" "" 1 
"" "" "" "" "" "" "" "" "" "" 2 
"" "" "" "" "" "" "" "" "" "" 3 
"" "" "" "" "" "" "" "" "" "" 4 (inner) 
"" "" "" "" "" "" "" "" "" "" 5 
"" "" "" "" "" "" "" "" "" "" 6 
"" "" "" "" "" "" "" "" "" "" 7 
"" "" "" "" "" "" "X" "" "" "" 8 
"" "" "" "" "" "" "" "" "" "" 9 
0 1 2 3 4 5 6 7 8 9 

     (outer) 

希望这有助于。

+0

这的确帮助我忽略了分配内部和外部坐标的需要。 – kevin2314