我有一个类似Tetris的游戏,用户控制一个随机颜色的块,然后将该块放到底部,在该块锁定到位,然后在屏幕顶部生成一个新块。每当两个相同颜色的块彼此相邻放置时,我想“清除”,并且对于那些清除后的块上方要向下移动的块,就好像它们受到重力的影响一样。
我尝试使用冲突列表无济于事。
答案 0 :(得分:1)
您必须找到具有相同颜色的相邻块并将其从.csv
中删除。每当块到达底部时(例如,在copylist
中,都必须这样做。
找到相邻块的索引,并将其存储到set()
中。请注意,一组索引是唯一的:
例如:
chooseBlock)
创建一个新的adjoining = set()
for i in range(len(copylist)):
for j in range(len(copylist)):
if i == j or colorList[i] != colorList[j]:
continue
if (copylist[i][0] == copylist[j][0] and abs(copylist[i][1]-copylist[j][1]) == height) or \
(copylist[i][1] == copylist[j][1] and abs(copylist[i][0]-copylist[j][0]) == width):
adjoining.add(i)
adjoining.add(j)
和copylist
,仅包含该元素,其索引不包含在colorList
中:
adjoining
最后,您必须找到所有必须放到地面上的块,因为下面的块已删除。
在下面的not any()
块中向下移动一个块:
例如
copylist = [copylist[i] for i in range(len(copylist)) if i not in adjoining]
colorList = [colorList[i] for i in range(len(colorList)) if i not in adjoining]
在for i in range(len(copylist)):
if copylist[i][1] >= 390:
continue
if not any([copylist[j] for j in range(len(copylist)) \
if i != j and copylist[i][0] == copylist[j][0] and copylist[i][1] + height == copylist[j][1]]):
copylist[i][1] += height
中执行算法,然后重复进行直到找到相邻的块:
chooseBlock