【发布时间】:2016-05-14 20:02:05
【问题描述】:
我正在尝试根据块周围的块对块应用不同的纹理,但在执行代码时出现“列表索引超出范围”错误。
我已经搜索并尝试解决问题几个小时,我认为我做的不对,但我想不出正确的方法。
level = [
# 1 1 1 1 1 1 1 1 1 1 2 2 2
# 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#0
[ 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,0,0],#1
[ 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,0,0],#2
[ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0],#3
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#4
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#5
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#6
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#7
[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],#8
]
for i in range(9):
for j in range(23):
if level[i][j] == 1:
# LEFT TOP RIGHT BOTTOM
if level[i][j-1] == 1 and level[i-1][j] == 1 and level[i][j+1] == 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_.png")
if level[i][j-1] == 1 and level[i][j+1] != 1 and level[i+1][j] == 1 and level[i-1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_t.png")
if level[i][j-1] == 1 and level[i-1][j] == 1 and level[i][j+1] == 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_b.png")
if level[i][j-1] != 1 and level[i-1][j] == 1 and level[i][j+1] == 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_l.png")
if level[i][j-1] == 1 and level[i-1][j] == 1 and level[i][j+1] != 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_r.png")
if level[i][j-1] != 1 and level[i-1][j] != 1 and level[i][j+1] == 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tl.png")
if level[i][j-1] == 1 and level[i-1][j] != 1 and level[i][j+1] != 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tr.png")
if level[i][j-1] != 1 and level[i-1][j] == 1 and level[i][j+1] == 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_bl.png")
if level[i][j-1] == 1 and level[i-1][j] == 1 and level[i][j+1] != 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_br.png")
if level[i][j-1] != 1 and level[i-1][j] != 1 and level[i][j+1] == 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tbl.png")
if level[i][j-1] == 1 and level[i-1][j] != 1 and level[i][j+1] != 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tbr.png")
if level[i][j-1] != 1 and level[i-1][j] != 1 and level[i][j+1] != 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tlr.png")
if level[i][j-1] != 1 and level[i-1][j] == 1 and level[i][j+1] != 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_blr.png")
if level[i][j-1] == 1 and level[i-1][j] != 1 and level[i][j+1] == 1 and level[i+1][j] != 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tb.png")
if level[i][j-1] != 1 and level[i-1][j] == 1 and level[i][j+1] != 1 and level[i+1][j] == 1:
block = Block( j*48, i*48, 48, 48, grey, "constructor_lr.png")
else:
block = Block( j*48, i*48, 48, 48, grey, "constructor_tblr.png")
self.object_list_c.add(block)
我期待您的帮助。谢谢^.^
【问题讨论】:
-
哪行代码出错了?
-
什么是
Block()? -
就是“constructor_tl.png”上方的那个
-
Block()是一个类,它运行良好。 -
有很多复制/粘贴的代码。了解如何使用函数消除重复并变得更有表现力。