继续来研究怎么实现消除后的下移,大体思想都已经说了,开始编写函数。
先找到第一轮需要下移的元素。
def find_fall_stars(board):
all_stars = []
single_star = {}
find_fall_star = False
for column in range(columns):
# 从底部往上找,每一个减少的row值都相当于往上走一行
for row in range(rows-2, -1, -1):
# 此位置星星可以下降,记录,使用字典记录类型,处于二维列表中的位置,然后放入all_stars中
if board[row][column] != 'empty' and board[row+1][column] == 'empty':
print(row, column)
single_star['type'] = board[row][column]
single_star['x'] = row
single_star['y'] = column
all_stars.append(single_star)
single_star = {}
find_fall_star = True
# 返回当前找到的星星,同时返回标志位,为下次寻找作准备
return find_fall_star, all_stars
先做一个单独往下移动一个固定位置的函数。
def one_column_falling_stars(board, star, speed):
move_x = 0
speed *= 0.01
move_y = int(speed * tile_size)
basex = star['x']
basey = star['y']
left_location = x_margin / 2 + (basey * tile_size) + 3
top_location = y_margin / 2 + (basex * tile_size) + 3
r = pygame.Rect((left_location + move_x, top_location + move_y, tile_size, tile