文件“C:\ Users \ Tom \ Desktop \ Tetris!\ tetris.py”,第206行,在typeSet中 Globals.blockArray [I] .x.append(7) IndexError:列表索引超出范围
我在typeSet
中获得第4行的上述错误初始化时:
def main():
initialize()
def initialize():
Globals.running = True
addBlock()
class Globals:
running = True
blockArray = []
blockNum = 0
然后是:
def addBlock():
Globals.blockArray.append(block())
class block:
def __init__(self):
self.id = Globals.blockNum
Globals.blockNum += 1
self.x = []
self.y = []
self.landed = False
self.blockType = 1#random.randint(1,6)
self.typeSet()
def typeSet(self):
i = self.id
if self.blockType == 1:
#square(i)
Globals.blockArray[i].x.append(7)
Globals.blockArray[i].y.append(0)
Globals.blockArray[i].x.append(7)
Globals.blockArray[i].y.append(1)
Globals.blockArray[i].x.append(8)
Globals.blockArray[i].y.append(0)
Globals.blockArray[i].x.append(8)
Globals.blockArray[i].y.append(1)
编辑:添加了更多代码并进行了切换,因此id应从0开始。错误代码未更改
答案 0 :(得分:1)
代码不够。该错误告诉您确切的问题。 Globals.blockArray
在i
位置没有成员。这就是为什么你不应该使用全局变量来避免它们的原因,因为要确保你的全局变量在它们中具有预期值是很困难的。
答案 1 :(得分:0)
虽然没有立即考虑上面的代码,但我要尝试的第一件事就是打印Globals.blockArray
和Globals.blockArray[i]
的内容。
答案 2 :(得分:0)
我不确定,但也许你想做
Globals.blockArray.append(self)
在init函数中,并且在赋值给self.id后增加Globals.blockNum 。
答案 3 :(得分:0)
每次创建block
的实例时,Globals.blockNum
都会增加1,而self.id
会设置为Globals.blockNum
的当前值
稍后(typeSet
)self.id
用于索引Globals.blockArray
。
当Globals.blockArray
中没有至少self.id + 1
个项目时,会发生错误。
如果Globals.blockNum
不断增加且其值(间接)用于索引Globals.blockArray
,则可能会导致错误(除非某些因素导致Globals.blockArray
继续增长。