x, y = centre for i, j in active: background[x + i][y + j] = 1 l = [] for i in range(1, 20): if 0 not in background[i]: l.append(i)
时间: 2024-02-14 12:22:53 浏览: 59
这段代码是将当前方块加入到已经存在的方块中,形成新的堆积。首先获取当前方块的中心点坐标。然后遍历当前方块中的每个方块,将它们的坐标加上中心点坐标,并将这些坐标在背景矩阵中标记为已经存在的方块。接着遍历整个背景矩阵,查找哪些行已经被填满,将这些行的索引添加到一个列表中。最后返回这个列表,表示哪些行已经被填满。
相关问题
score[0] += len(l) pygame.display.set_caption("分数:%d" % (score[0])) active.clear() active.extend(list(random.choice(all_block))) centre.clear() centre.extend([20, 4]) x, y = centre for i, j in active: i += x j += y if background[i][j]: break else: return alive.append(1)
这段代码的作用是:在俄罗斯方块游戏中,当一个方块落到底部或者堆积的方块中时,需要更新分数,并且生成一个新的方块作为下一个要移动的方块。具体来说:
- `score[0] += len(l)`:将当前方块所在的行数 `l` 加到得分中。
- `pygame.display.set_caption("分数:%d" % (score[0]))`:将窗口标题设置为当前得分数。
- `active.clear()`: 清空当前方块的坐标列表,为下一个方块的生成做准备。
- `active.extend(list(random.choice(all_block)))`: 从方块集合 `all_block` 中随机选择一个方块,并将其坐标添加到当前方块的坐标列表中。
- `centre.clear()`: 清空当前方块的中心坐标,为下一个方块的生成做准备。
- `centre.extend([20, 4])`: 将当前方块的中心坐标设置为 `[20, 4]`,即下一个方块的出现位置。
- `x, y = centre`: 获取当前方块的中心坐标。
- `for i, j in active: i += x j += y if background[i][j]: break`: 遍历当前方块的坐标列表,将它们的横纵坐标加上中心坐标,判断是否与堆积的方块重叠,如果有,则跳出循环。
- `else: return`: 如果当前方块没有和堆积的方块重叠,直接返回,等待下一次移动。
- `alive.append(1)`: 将当前方块的状态添加到 `alive` 列表中,表示它仍然存活。
def rotate(): x, y = centre l = [(-j, i) for i, j in active] for i, j in l: i += x j += y if j < 0 or j > 9 or background[i][j]: break else: active.clear() active.extend(l)
这是一个旋转方块的函数。首先获取当前方块的中心点坐标,然后将当前方块中每个方块的坐标按照一定规则进行旋转(这里使用了矩阵变换),变换后的坐标需要加上中心点坐标才是实际坐标。接着判断变换后的方块是否超出了边界或者与已经存在的方块重叠,如果有则不能进行旋转。如果没有,则清空当前方块列表,并将变换后的方块列表添加到当前方块列表中。
阅读全文
相关推荐

















