“TypeError:'int'对象在2D,基于文本的Map Generator中是不可订阅的”

时间:2018-03-05 23:09:51

标签: python macos pygame

好的。在下面的代码中,我试图获取存储在my_heightmap中的(多行).txt文件,并将其转换为一个列表,然后我将其重新格式化为一个数组(这样高度阵列分别保存每行中的每个值)什么将成为一个二维,基于文本的高度图。)我在这一行得到“不可订阅”的错误:

heightarray[y[x]] = heightlist[count + x]

我不确定我搞砸了哪里,但据我所知,代码应该占用.txt文件的每一行并将其转换为heightarray中自己的列表。我不知道为什么我不能将值列表的单个实例转换为数组的单个实例(这只是列表中的列表)?

这可能是非常低效的,但我只是想在我感兴趣的项目上赚取我的印章。

 #converting the heightmap into an array
    heightlist = list(my_heightmap)
    heightarray = []
    count = 0

    for y in range(0,self.size):
        for x in range(0, self.size):
            heightarray[y[x]] = heightlist[count + x]
        count += self.size

    #peak generation
    for peaks in range(0, round(self.size/30)):
        y = random.randomint(0,size + 1)
        x = random.randomint(0,size + 1)
        for dist in range(0, random.randomint(size/50, size/10)):
            heightarray[y[x]] = 9
            y += random.randomint(-1,2)
            x += random.randomint(-1,2)

    my_heightmap.write(heightarray)
    my_heightmap.close()

我很抱歉,如果这是一个相当简单的修复(我没有找到另一个对我来说有意义的类似问题)而且我可能没有使用正确的术语。感谢您的帮助!

P.S。我希望我已经足够解释了这个情况。我很乐意发布更多代码或在需要时进一步解释!

2 个答案:

答案 0 :(得分:1)

问题来自y[x],因为y是一个int。您可能希望将heightarray初始化为2D列表并执行heightarray[y][x] = ...。有关详情,请参阅此处:https://www.cs.cmu.edu/~112/notes/notes-2d-lists.html

答案 1 :(得分:0)

在此代码中,y显然是一个整数:

for y in range(0,self.size):
    for x in range(0, self.size):
        heightarray[y[x]] = heightlist[count + x]

您期望y[x]做什么?正如错误消息所示,您不能下标为整数值。