turtle生日蛋糕+彩色旋转文字祝福
这篇文章介绍了如何利用Python的Turtle库创建一个彩色动态图形,通过wuxing函数实现劳动节快乐的字样旋转并随机着色,展示了基础的IT图形处理技术。朋友的生日到了,疫情原因封在学校里,不能线下庆祝的话,那就画一个生日蛋糕给她。声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。用Python画一个生日蛋糕_python画蛋糕,生日快乐-CSDN博客。和deepsee
效果如视频
生日蛋糕+彩色旋转文字祝福
声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
彩色旋转文字-CSDN博客文章浏览阅读193次。这篇文章介绍了如何利用Python的Turtle库创建一个彩色动态图形,通过wuxing函数实现劳动节快乐的字样旋转并随机着色,展示了基础的IT图形处理技术。https://blog.csdn.net/skhoole/article/details/138357710?fromshare=blogdetail&sharetype=blogdetail&sharerId=138357710&sharerefer=PC&sharesource=skhoole&sharefrom=from_link用Python画一个生日蛋糕_python画蛋糕,生日快乐-CSDN博客文章浏览阅读1.4w次,点赞47次,收藏354次。朋友的生日到了,疫情原因封在学校里,不能线下庆祝的话,那就画一个生日蛋糕给她。_python画蛋糕,生日快乐
https://blog.csdn.net/m0_46207115/article/details/124093010?fromshare=blogdetail&sharetype=blogdetail&sharerId=124093010&sharerefer=PC&sharesource=skhoole&sharefrom=from_link和deepseek对话了一个下午+晚上,把两个功能合并起来了
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 23 19:29:25 2025
@author: 破无差
"""
# -*- coding: utf-8 -*-
import turtle as t
import math
import random
import time
t.colormode(255)
class BirthdayAnimation:
def __init__(self):
self.screen = t.Screen()
self.screen.setup(800, 1000) # 加大窗口尺寸
self.screen.bgcolor("#d3dae8")
self.screen.tracer(0)
# 创建两个独立画笔
self.cake_pen = t.Turtle() # 蛋糕画笔
self.text_pen = t.Turtle() # 文字画笔
# 初始化画笔
self.cake_pen.hideturtle()
self.cake_pen.speed(0)
self.text_pen.hideturtle()
self.text_pen.penup()
self.text_pen.speed(0)
self.text_pen.goto(0, 280) # 初始文字位置
#---------- 蛋糕绘制部分 (修改所有t->self.cake_pen) ----------#
def drawX(self, a, i):
angle = math.radians(i)
return a * math.cos(angle)
def drawY(self, b, i):
angle = math.radians(i)
return b * math.sin(angle)
def layer_0(self):
self.cake_pen.pencolor("white")
self.cake_pen.fillcolor("#fef5f7")
self.cake_pen.penup()
self.cake_pen.goto(150, 0)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
for i in range(180):
x = self.drawX(150, i)
y = self.drawY(-60, i)-120
self.cake_pen.goto(x, y)
self.cake_pen.goto(x, y+120)
for i in range(180):
x = self.drawX(-150, i)
y = self.drawY(60, i)
self.cake_pen.goto(x, y)
self.cake_pen.end_fill()
# 顶部奶油
self.cake_pen.pencolor("#f2d7dd")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(150, i)
y = self.drawY(60, i)
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#f2d7dd")
self.cake_pen.end_fill()
# 下溢奶油
self.cake_pen.begin_fill()
self.cake_pen.pensize(4)
self.cake_pen.pencolor("#f2d7dd")
for i in range(1800):
x = self.drawX(150, 0.1 * i)
y = self.drawY(-20, i) - 85
self.cake_pen.goto(x, y)
self.cake_pen.goto(-150, 0)
self.cake_pen.pensize(1)
for i in range(0, 180):
x = self.drawX(-150, i)
y = self.drawY(-60, i)
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#f2d7dd")
self.cake_pen.end_fill()
def layer_1(self):
# 第二层底层
self.cake_pen.pencolor("#ffa79d")
self.cake_pen.penup()
self.cake_pen.goto(120, 0)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(120, i)
y = self.drawY(48, i)
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#ffa79d")
self.cake_pen.end_fill()
self.cake_pen.begin_fill()
for i in range(180):
x = self.drawX(120, i)
y = self.drawY(48, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.goto(-120, 0)
self.cake_pen.end_fill()
# 蓝色浇头
self.cake_pen.penup()
self.cake_pen.goto(120, 70)
self.cake_pen.pendown()
self.cake_pen.pencolor('#cbd9f9')
self.cake_pen.fillcolor("#cbd9f9")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(120, i)
y = self.drawY(48, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.end_fill()
# 蓝色中心为顶向下浇浇头
self.cake_pen.begin_fill()
self.cake_pen.pensize(8)
self.cake_pen.goto(120, 70)
for s in range(0, 12): # 相当于涂抹糕身的特效
for i in range(180):
x = self.drawX(120, i)
y = self.drawY(-48, i) + 70-5*s
self.cake_pen.goto(x, y)
for i in range(180):
x = self.drawX(-120, i)
y = self.drawY(-48, i)+70-5.1*s
self.cake_pen.goto(x, y)
# 白色涂层
self.cake_pen.penup()
self.cake_pen.goto(120, 70)
self.cake_pen.pendown()
self.cake_pen.pencolor("#fff0f3")
self.cake_pen.fillcolor("#fff0f3")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(120, i)
y = self.drawY(48, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.end_fill()
# 蓝色蛋糕的顶面白色涂层里的涂层
self.cake_pen.penup()
self.cake_pen.goto(110, 70)
self.cake_pen.pendown()
self.cake_pen.pencolor("#fff9fb")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(110, i)
y = self.drawY(44, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#fff9fb")
self.cake_pen.end_fill()
# 第二层蛋糕圆弧部分(类似于瀑布蛋糕)
self.cake_pen.penup()
self.cake_pen.goto(120, 70)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
self.cake_pen.pensize(4)
self.cake_pen.pencolor("#fff0f3")
for i in range(1800):
x = self.drawX(120, 0.1 * i)
y = self.drawY(-18, i) + 10
self.cake_pen.goto(x, y)
self.cake_pen.goto(-120, 70)
self.cake_pen.pensize(1)
for i in range(180, 360):
x = self.drawX(120, i)
y = self.drawY(48, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#fff0f3")
self.cake_pen.end_fill()
# 蓝色蛋糕的顶面白色涂层里的涂层
self.cake_pen.penup()
self.cake_pen.goto(110, 70)
self.cake_pen.pendown()
self.cake_pen.pencolor("#fff9fb")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(110, i)
y = self.drawY(44, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#fff9fb")
self.cake_pen.end_fill()
# 第二层蛋糕圆弧部分(类似于瀑布蛋糕)
self.cake_pen.penup()
self.cake_pen.goto(120, 70)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
self.cake_pen.pensize(4)
self.cake_pen.pencolor("#fff0f3")
for i in range(1800):
x = self.drawX(120, 0.1 * i)
y = self.drawY(-18, i) + 10
self.cake_pen.goto(x, y)
self.cake_pen.goto(-120, 70)
self.cake_pen.pensize(1)
for i in range(180, 360):
x = self.drawX(120, i)
y = self.drawY(48, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#fff0f3")
self.cake_pen.end_fill()
def layer_2(self):
# 第三层
self.cake_pen.pencolor("#6f3732")
self.cake_pen.penup()
self.cake_pen.goto(80, 70)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
self.cake_pen.goto(80, 120)
for i in range(180):
x = self.drawX(80, i)
y = self.drawY(32, i) + 120
self.cake_pen.goto(x, y)
self.cake_pen.goto(-80, 70)
for i in range(180, 360):
x = self.drawX(80, i)
y = self.drawY(32, i) + 70
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#6f3732")
self.cake_pen.end_fill()
# 棕色蛋糕的表面涂层
self.cake_pen.penup()
self.cake_pen.goto(80, 120)
self.cake_pen.pendown()
self.cake_pen.pencolor("#ffaaa0")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(80, i)
y = self.drawY(32, i) + 120
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#ffaaa0")
self.cake_pen.end_fill()
# 涂层内圈
self.cake_pen.penup()
self.cake_pen.goto(70, 120)
self.cake_pen.pendown()
self.cake_pen.pencolor("#ffc3be")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(70, i)
y = self.drawY(28, i) + 120
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#ffc3be")
self.cake_pen.end_fill()
# 第二层涂层圆弧部分(类似于瀑布蛋糕)
self.cake_pen.penup()
self.cake_pen.goto(80, 120)
self.cake_pen.pendown()
self.cake_pen.begin_fill()
self.cake_pen.pensize(3)
self.cake_pen.pencolor("#ffaaa0")
for i in range(1800):
x = self.drawX(80, 0.1 * i)
y = self.drawY(-12, i) + 80
self.cake_pen.goto(x, y)
self.cake_pen.goto(-80, 120)
self.cake_pen.pensize(1)
for i in range(180, 360):
x = self.drawX(80, i)
y = self.drawY(32, i) + 120
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#ffaaa0")
self.cake_pen.end_fill()
def candle_part(self):
# 蜡烛
self.cake_pen.penup()
self.cake_pen.goto(0, 120)
self.cake_pen.pendown()
self.cake_pen.pencolor("#b1c9e9")
self.cake_pen.begin_fill()
for i in range(360):
x = self.drawX(4, i)
y = self.drawY(1, i) + 130
self.cake_pen.goto(x, y)
self.cake_pen.goto(4, 180)
for i in range(540):
x = self.drawX(4, i)
y = self.drawY(1, i) + 180
self.cake_pen.goto(x, y)
self.cake_pen.goto(-4, 130)
self.cake_pen.fillcolor("#b1c9e9")
self.cake_pen.end_fill()
# 蜡烛的白色线条
self.cake_pen.pencolor("white")
self.cake_pen.pensize(2)
for i in range(1, 6):
self.cake_pen.goto(4, 130 + 10 * i)
self.cake_pen.penup()
self.cake_pen.goto(-4, 130 + 10 * i)
self.cake_pen.pendown()
self.cake_pen.penup()
self.cake_pen.goto(0, 180)
self.cake_pen.pendown()
self.cake_pen.goto(0, 190)
self.cake_pen.pensize(1)
self.cake_pen.penup()
self.cake_pen.goto(4, 200)
self.cake_pen.pendown()
# 火焰部分
self.cake_pen.pencolor("#F160AD")
self.cake_pen.begin_fill()
for i in range(360):
ii = random.randint(0, 1) # 模拟火焰大小随机形状
if ii == 0:
x = self.drawX(4, i) + random.random()
else:
x = self.drawX(4, i) - random.random()
y = self.drawY(10, i) + 200
self.cake_pen.goto(x, y)
self.cake_pen.fillcolor("#F160AD")
self.cake_pen.end_fill()
# 随机星星点点
def writing(self):
color = ["#e28cb9", "#805a8c", "#eaa989", "#6e90b7", "#b8b68f", "#e174b5", "#cf737c", "#7c8782"]
# 棕色蛋糕部分
for i in range(20): # 个人私设的小彩蛋,Ta的生日多大就有多少个小星星
self.cake_pen.penup()
x = random.randint(-80, 80)
y = random.randint(60, 90)
self.cake_pen.goto(x, y)
self.cake_pen.pendown()
self.cake_pen.dot(random.randint(2, 5), color[random.randint(0, 7)])
# 背景板的星星点点(可加可不加)
for i in range(50):
self.cake_pen.penup()
x = random.randint(-500, 500)
y = random.randint(150, 300)
self.cake_pen.goto(x, y)
self.cake_pen.pendown()
self.cake_pen.dot(random.randint(3, 5), color[random.randint(0, 7)])
self.cake_pen.setheading(90)
self.cake_pen.penup()
self.cake_pen.goto(0, 0)
self.cake_pen.forward(210)
self.cake_pen.left(90)
self.cake_pen.forward(200)
self.cake_pen.pendown()
#---------- 文字动画部分 ----------#
def rotating_text(self):
angle = 0 # 初始角度
text = "祝XXX生日快乐!" # 中文文字
center_x, center_y = 0, -20 # 圆心坐标
radius = 250 # 旋转半径
while True:
self.text_pen.clear() # 清除上一帧的文字
self.text_pen.penup()
# 计算每个字符的位置
for i, char in enumerate(text):
# 计算当前字符的角度
char_angle = angle - (i * 360 / len(text)) # 均匀分布字符 -是顺时针
char_angle_rad = math.radians(char_angle) # 转换为弧度
# 计算字符的坐标
x = center_x + radius * math.cos(char_angle_rad)
y = center_y + radius * math.sin(char_angle_rad)
# 移动到字符位置
self.text_pen.goto(x, y)
self.text_pen.setheading(char_angle + 90) # 调整字符朝向
# 随机颜色
r = random.randint(100, 255)
g = random.randint(100, 255)
b = random.randint(100, 255)
self.text_pen.pencolor(r, g, b)
# 绘制字符
self.text_pen.write(char, align="center", font=("楷体", 50, "bold"))
self.screen.update() # 更新屏幕
time.sleep(0.05) # 控制刷新速度
angle += 3 # 控制旋转速度 -是顺时针
def run(self):
# 先绘制蛋糕
self.layer_0()
self.layer_1()
self.layer_2()
self.candle_part()
self.screen.update()
self.cake_pen.penup()
self.cake_pen.goto(200,-350)
self.cake_pen.write("————XXX 年月日")
self.writing()
# 再启动文字动画
self.rotating_text()
if __name__ == '__main__':
animation = BirthdayAnimation()
animation.run()
t.done()
更多推荐


所有评论(0)