这是一个基于Python Turtle模块的气球动画程序,用于儿童节祝福。通过气球类、漂浮函数和主函数的设计,实现气球动态漂浮和祝福语展示,展现Python的可编程性和动态性。使用python画气球前,先了解一下turtle。
turtle.setup(width,height) #设置画板的大小
turtle.penup() #抬起画笔
turtle.pendown() #放下画笔
turtle.pensize() #控制画笔的大小
turtle.pencolor() #控制画笔的颜色
turtle.hideturtle() #隐藏画笔
turtle.forward(x) #将画笔向前移动x个像素(x可以理解为距离)
turtle.backward(x) #将画笔向后移动x个像素(x可以理解为距离)
turtle.left(n) #将画笔向左旋转n度
turtle.right(n) #将画笔向右旋转n度
turtle.speed() #设置画笔画图的速度(1~10递增,0最快
接下来模拟气球漂浮吧
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht() # 隐藏小海龟
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet'] #气球颜色列表
def __init__(self):
"""
初始化气球对象
"""
self.r = ra.randint(12, 20) # 气球的半径
self.x = ra.randint(-1000, 1000) # 气球的横坐标
self.y = ra.randint(-500, 500) # 气球的纵坐标
self.f = ra.uniform(-3.14, 3.14) # 气球左右移动呈正弦函数
self.speed = ra.randint(2, 8) # 气球移动速度
self.color = ra.choice(colors) # 气球的颜色
self.outline = 1 # 气球的外框大小(可不要)
def move(self):
"""
移动气球对象的位置。
根据当前气球的位置和速度,更新其在画布中的坐标。
当气球超出画布下边界时,重新生成一个新的气球。
"""
if self.y <= 500: # 当气球还在画布中时
self.y += self.speed # 设置上下移动速度
self.x += self.speed * math.sin(self.f) # 设置左右移动速度
self.f += 0.1 # 可以理解成标志,改变左右移动的方向
else: # 当气球漂出了画布时,重新生成一个气球
# 下面的代码用于初始化一个新的气球,包括其大小、位置、速度和颜色等属性
self.r = ra.randint(12, 20)
self.x = ra.randint(-1000, 1000)
self.y = -500
self.f = ra.uniform(-3.14, 3.14)
self.speed = ra.randint(5, 10)
self.color = ra.choice(colors)
self.outline = 1
def draw(self):
"""
绘制一个气球图案。
该方法使用turtle图形库中的turtle对象t来绘制一个气球图案。它通过一系列的turtle命令
实现了气球的绘制过程,包括移动、旋转、填充颜色等操作。
参数:
无直接参数,但依赖于实例变量self.x, self.y, self.color, 和 self.r,分别表示心形的起始位置、颜色和大小。
返回:
无返回值。
"""
# 将画笔抬起,移动到气球的起始绘制位置
t.penup()
t.goto(self.x, self.y)
t.pendown()
# 设置画笔颜色为实例变量self.color指定的颜色
t.color(self.color)
# 将画笔左转45度,准备绘制气球的起始角度
t.left(45)
# 开始填充心形图案
t.begin_fill()
t.fillcolor(self.color)
# 循环绘制气球的两个对称部分
for i in range(2):
t.circle(self.r * 2, 90)
t.circle(self.r, 90)
# 结束填充
t.end_fill()
# 隐藏turtle图标,准备进行绘制结束后的画笔调整
t.hideturtle()
# 调整画笔位置和方向,以准备绘制气球的凹陷部分
t.circle(self.r, -45)
t.right(90)
t.circle(20, 90)
import turtle as tu
import random as ra
import math
# 设置屏幕
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht() # 隐藏小海龟
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
class Balloon:
def __init__(self):
"""
初始化气球对象
"""
self.r = ra.randint(12, 20) # 气球的半径
self.x = ra.randint(-1000, 1000) # 气球的横坐标
self.y = ra.randint(-500, 500) # 气球的纵坐标
self.f = ra.uniform(-3.14, 3.14) # 气球左右移动呈正弦函数
self.speed = ra.randint(2, 8) # 气球移动速度
self.color = ra.choice(colors) # 气球的颜色
self.outline = 1 # 气球的外框大小(可不要)
def move(self):
"""
移动气球对象的位置。
根据当前气球的位置和速度,更新其在画布中的坐标。
当气球超出画布下边界时,重新生成一个新的气球。
"""
if self.y <= 500: # 当气球还在画布中时
self.y += self.speed # 设置上下移动速度
self.x += self.speed * math.sin(self.f) # 设置左右移动速度
self.f += 0.1 # 可以理解成标志,改变左右移动的方向
else: # 当气球漂出了画布时,重新生成一个气球
# 下面的代码用于初始化一个新的气球,包括其大小、位置、速度和颜色等属性
self.r = ra.randint(12, 20)
self.x = ra.randint(-1000, 1000)
self.y = -500
self.f = ra.uniform(-3.14, 3.14)
self.speed = ra.randint(5, 10)
self.color = ra.choice(colors)
self.outline = 1
def draw(self):
"""
绘制一个气球图案。
该方法使用turtle图形库中的turtle对象t来绘制一个气球图案。它通过一系列的turtle命令
实现了气球的绘制过程,包括移动、旋转、填充颜色等操作。
参数:
无直接参数,但依赖于实例变量self.x, self.y, self.color, 和 self.r,分别表示气球的起始位置、颜色和大小。
返回:
无返回值。
"""
# 将画笔抬起,移动到气球的起始绘制位置
t.penup()
t.goto(self.x, self.y)
t.pendown()
# 设置画笔颜色为实例变量self.color指定的颜色
t.color(self.color)
# 将画笔左转45度,准备绘制气球的起始角度
t.left(45)
# 开始填充气球图案
t.begin_fill()
t.fillcolor(self.color)
# 循环绘制气球的两个对称部分
for i in range(2):
t.circle(self.r * 2, 90)
t.circle(self.r, 90)
# 结束填充
t.end_fill()
# 隐藏turtle图标,准备进行绘制结束后的画笔调整
t.hideturtle()
# 调整画笔位置和方向,以准备绘制气球的凹陷部分
t.circle(self.r, -45)
t.right(90)
t.circle(20, 90)
# 创建气球列表
Balloons = []
for _ in range(100):
Balloons.append(Balloon())
# 设置背景色
tu.bgcolor('black')
# 开始漂浮
def main():
"""
主函数,用于显示动画气球和祝福语。
该函数会不断循环,更新屏幕上的气球位置,并在背景上写上祝福语。
"""
while True:
tu.tracer(0) # 关闭动画更新,以提高绘制效率
t.clear() # 清除之前的绘制内容,为新的绘制做准备
# 在画布中设置50个漂浮的气球,循环让每个气球移动和绘制
for i in range(50):
Balloons[i].move() # 更新气球位置
Balloons[i].draw() # 绘制气球
tu.penup() # 准备写祝福语,先抬起笔
tu.goto(-250, 20) # 移动到写祝福语的位置
tu.pendown() # 落下笔,准备书写
tu.color("skyblue") # 设置书写颜色
# 写上祝福语,使用指定的字体和样式
tu.write("程序猿加油", font=("黑体", 80, "italic"))
tu.hideturtle() # 隐藏海龟图标,以改善视觉效果
tu.update() # 更新屏幕,显示所有的更改
if __name__ == "__main__":
main()