1

试图理解这段代码是如何工作的,谁能解释一下。

def draw_star(star): # drawing a star
    # you only need to change a pixel, so use set_at, not draw.line
    screen.set_at((star[0], star[1]), (255, 255, 255))
    star[0] -= 1
    if star[0] < 0:
        star[0] = screen.get_width()
        star[1] = random.randint(0, screen.get_height())

stars = []
for i in range(1200):
    x = random.randint(0, screen.get_width())
    y = random.randint(0, screen.get_height())
    stars.append([x,y])

for star in stars:
    draw_star(star)
4

1 回答 1

5

首先,代码生成 1200[x, y]个坐标,所以每个坐标都是一个 Python list

stars = []
for i in range(1200):
    x = random.randint(0, screen.get_width())
    y = random.randint(0, screen.get_height())
    stars.append([x,y])

每个坐标由屏幕约束内的随机值组成xy

接下来,绘制这些坐标中的每一个:

for star in stars:
    draw_star(star)

这会将[x, y]坐标列表传递给函数draw_star

def draw_star(star): # drawing a star

这会在给定坐标处设置一个白色像素(star[0]xstar[1]y坐标):

    # you only need to change a pixel, so use set_at, not draw.line
    screen.set_at((star[0], star[1]), (255, 255, 255))

然后代码从 x 坐标中减去 1(左一步)。这会更改原始列表,因为使用了可变列表:

    star[0] -= 1

如果这改变了屏幕边缘之外的坐标,则星坐标将替换为屏幕右侧的新坐标,位于随机高度:

    if star[0] < 0:
        star[0] = screen.get_width()
        star[1] = random.randint(0, screen.get_height())

如果您现在要在中间有屏幕空白的情况下重复循环for star in stars: draw_star(star),您将动画星星从右向左移动,随着星星从左侧掉落,新星星以随机高度出现在右侧屏幕。

这里的核心思想是该draw_star()函数处理可变列表并更改其中包含的值,从而有效地更改stars下一个动画循环的全局列表的内容。

于 2013-04-05T11:12:33.660 回答