import pgzrun import random WIDTH = 1200 HEIGHT = 800 balls = [] def draw(): screen.fill('black') for ball in balls: screen.draw.filled_circle( (ball[0], ball[1]), ball[2], (ball[3], ball[4], ball[5])) for x in range(1, ball[2], 3): screen.draw.filled_circle((ball[0], ball[1]), ball[2]-x, (random.randint( ball[3], 255), random.randint(ball[4], 255), random.randint(ball[5], 255))) def on_mouse_move(pos, rel, buttons): if mouse.LEFT in buttons: x = pos[0] y = pos[1] r = random.randint(10, 20) colorR = random.randint(10, 255) colorG = random.randint(10, 255) colorB = random.randint(10, 255) ball = [x, y, r, colorR, colorG, colorB] balls.append(ball) pgzrun.go()代码解析
时间: 2024-04-22 15:25:29 浏览: 131
这段代码是一个使用Pygame Zero库编写的简单的粒子效果。下面是对代码的解析:
- 首先,导入了`pgzrun`和`random`模块。
- 定义了窗口的宽度和高度为1200和800。
- 创建了一个空列表`balls`,用于存储粒子的信息。
接下来是两个函数:
1. `draw()`函数用于绘制画面。它首先将屏幕填充为黑色。然后,对于`balls`列表中的每个粒子,使用`screen.draw.filled_circle()`方法绘制一个实心圆。该方法接受三个参数:圆心坐标`(ball[0], ball[1])`、半径`ball[2]`以及颜色`(ball[3], ball[4], ball[5])`。接着使用一个循环来绘制多个不同半径的圆,每个圆的颜色都是随机生成的。
2. `on_mouse_move(pos, rel, buttons)`函数用于在鼠标移动时创建新的粒子。如果鼠标左键被按下,函数会获取鼠标位置,并生成一个随机半径和随机颜色的粒子,并将其添加到`balls`列表中。
最后,调用了`pgzrun.go()`来启动游戏循环。
这段代码实现了一个简单的粒子效果,当鼠标移动且按下左键时,会在鼠标位置创建新的粒子,并且粒子会逐渐变小并改变颜色。整个画面会不断刷新,形成动态的效果。
相关问题
def move(): """Update object positions.""" bird.y -= 5 for ball in balls: ball.x -= 3 if randrange(10) == 0: y = randrange(-199, 199) ball = vector(199, y) balls.append(ball) while len(balls) > 0 and not inside(balls[0]): balls.pop(0) if not inside(bird): draw(False) return
这是一个 Python 代码段,它定义了一个名为 `move()` 的函数。这个函数的作用是更新游戏中各个对象的位置。函数中有一个 `bird` 对象和一个 `balls` 列表,`bird` 对象的 `y` 坐标每次减少 5,`balls` 列表中的每个元素(即球)的 `x` 坐标每次减少 3。如果随机数生成器 `randrange(10)` 返回 0,则会在屏幕右侧随机生成一个新的球,并将其添加到 `balls` 列表中。接下来,函数会检查 `balls` 列表中的球是否已经超出屏幕外,如果是,则将其从列表中移除。最后,函数会检查 `bird` 对象是否已经碰到了屏幕的边缘,如果是,则会调用 `draw(False)` 函数来结束游戏。
def draw(alive): """Draw screen objects.""" clear() goto(bird.x, bird.y) if alive: dot(10, 'green') else: dot(10, 'red') for ball in balls: goto(ball.x, ball.y) dot(20, 'black') update()
这段代码定义了一个名为 `draw` 的函数,用来绘制屏幕上的对象。
该函数接受一个布尔型参数 `alive`,表示小鸟是否还存活。在函数内部,首先使用 `clear()` 清空屏幕,然后使用 `goto()` 将画笔移动到小鸟的位置 `(bird.x, bird.y)`。
接下来,如果小鸟还存活,就使用 `dot()` 在小鸟的位置绘制一个绿色的小点;否则就绘制一个红色的小点。
然后,使用一个循环依次绘制 `balls` 列表中的每一个球。对于每个球,使用 `goto()` 将画笔移动到球的位置 `(ball.x, ball.y)`,然后使用 `dot()` 在该位置绘制一个黑色的大点。
最后,使用 `update()` 刷新屏幕。
阅读全文