尝试在pygame中彼此相邻放置时删除两个对象

时间:2019-05-12 17:25:21

标签: python python-3.x pygame

我有一个类似Tetris的游戏,用户控制一个随机颜色的块,然后将该块放到底部,在该块锁定到位,然后在屏幕顶部生成一个新块。每当两个相同颜色的块彼此相邻放置时,我想“清除”,并且对于那些清除后的块上方要向下移动的块,就好像它们受到重力的影响一样。

我尝试使用冲突列表无济于事。

1 个答案:

答案 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