(Python3)将10x10游戏地图存储在Python数组中

2024-06-28 15:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在2D python3阵列上存储10x10(100个单位)的游戏地图?在

以下是我当前的代码:

53    worldMap = [[13, 13, 13, 13, 13, 13, 13, 13, 13, 13], [13, 13, 13, 
                    13, 13, 13, 13, 13, 13, 13]]
236    porq = 0
237 genX = 0
238 genY = 0
239 
240 #world generator
241 while not 13 in worldMap:
242     porq = porq + 1
243     genIncoming = randint(1, 12)
244     worldMap[genX][genY] = genIncoming
245     genX = genX + 1
246     genY = genY + 1
247 print(worldMap)

正在引发错误:

"Traceback (most recent call last): File "python", line 244, in IndexError: list index out of range"


Tags: 代码in游戏world地图not单位generator
2条回答

因此,从你目前的问题内容来看,我们无法确定你的最终目标到底是什么。我将在这样一个假设下工作:您希望一个n x n矩阵用Python表示,并且其中有一些数字。我要用数字13填充这个矩阵,你可以根据需要改变它。在

矩阵基本上是行和列,类似这样

13 13 13
13 13 13
13 13 13

这是一个3x3矩阵,有3行3列。在

我可以用集合集合(列表列表、元组元组、元组列表等)来表示矩阵,其中每个内部集合表示一行。在

我不打算用你想要的大小的矩阵,因为你需要能够计算出来,我将使用5x5。在

这就是5x5矩阵在Python列表中的样子

[[13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13]]

为了做到这一点,我可以做一些简短的事情

[[13 for column in range(5)] for row in range(5)]

现在,您需要一个矩阵,集合的集合可能有点不必要而且速度慢,让我们尝试在Python中使用这个名为numpy的库。你必须从源代码,通过Python代码,或者pip或者其他一些工具来安装它。在

假设我有一个旧的列表集合,现在我不想使用它,因为它是不必要的,看它有点混乱。我必须用我自己的代码把它正确地打印成矩阵,对它进行矩阵运算等等。为什么不使用一些为我包装起来的东西,比如numpy matrix?在

^{pr2}$

假设我需要访问第3行和第4列的元素。在我的集合集合中,这意味着我需要获取第三行,然后是其中的第四个元素。这意味着

collection_of_13s[3][4]

如果我想浏览所有的元素,我将使用@thekingofkings的答案,当然除了这个例子中有5行5列。在

for row in range(5):
    for column in range(5):
        print(collection_of_13s[row][column])

虽然这很管用,但这不是我想要的。我真正想要的是一个13度的网格。因此,为什么不使用这样的numpy矩阵呢?在

matrix_of_13s = np.matrix(collection_of_13s)
for element in np.nditer(matrix_of_13s):
    print(element)

它将按行的顺序从左到右遍历矩阵中的每个元素。在

您还将注意到随着项目规模的增长,numpy更高效、更易于使用,for a reason。在

我还想再提一个选择,这是一个超级简单的概念,你不需要任何集合或纽姆。只需使用1D数组来表示网格。这个概念实际上用于图像的主成分分析,但这是无关的。在

本质上,13的网格只是一个普通的列表

[13, 13, 13, 13, 13, 13, 13, 13, 13]

任何元素的新索引都将是(column +1)*(row)。有一个数学证明和解释,但我现在不想找到它,哈哈

您需要嵌套的两级for循环来遍历映射。你只会在地图的对角线上生成块,也就是说,你正在为(0,0),(1,1),(2,2),…..生成映射,这也解释了索引超出范围的错误。在

试试这个

for genX in range(10):
    for genY in range(10):
        worldMap[genX][genY] = randint(1, 12)

相关问题 更多 >