【Python合集系列】2023兔年吉祥,新的一年希望放烟花的人跟看烟花的人都能平平安安哦~(附多种源码)

news2024/12/25 14:51:32

前言

希望放烟花的人跟看烟花的人都能平平安安。

👀 NICE TO MEET YOU :)🌙

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

​哈喽!我是木子,新的一年祝大家所求皆如愿,所行化坦途,多喜乐,长安宁。

2023兔年——兔飞猛进,兔步青云,前兔无量,扬眉兔气,前兔似锦,大展宏兔

玉兔呈祥,兔出贡献,兔围而出,谈兔不凡,兔谋大业,兔飞猛进,兔步青云,宏兔大志!

今天给给大家写一些新年的代码送给大家,喜欢的点点三连哦~💖💖

正文

一、烟画许愿

💥我对着烟花许愿,希望你诸邪避退,百事无忌,平安喜乐,万事如意。

💥我对着烟火许愿,希望你永远在我身边。

💥希望新春的烟火可以带来好多好多的好消息。

💥如果你也刚好看到烟花,就当我们见过面吧。

💥浪漫的不是烟花,而是和你一起看烟花的人。

1)烟花盛开代码

import pygame
from random import randint, uniform, choice
import math

#===========首先设置全局变量====================
vector = pygame.math.Vector2
# 重力变量
gravity = vector(0, 0.3)
# 控制窗口的大小
DISPLAY_WIDTH = DISPLAY_HEIGHT = 800

# 颜色选项
trail_colours = [(45, 45, 45), (60, 60, 60), (75, 75, 75), (125, 125, 125), (150, 150, 150)]
dynamic_offset = 1
static_offset = 3
#=======Firework : 整体部分;================
class Firework:
    def __init__(self):
        # 随机颜色
        self.colour = (randint(0, 255), randint(0, 255), randint(0, 255))
        self.colours = (
            (randint(0, 255), randint(0, 255), randint(0, 255)),
            (randint(0, 255), randint(0, 255), randint(0, 255)),
            (randint(0, 255), randint(0, 255), randint(0, 255)))
        self.firework = Particle(randint(0, DISPLAY_WIDTH), DISPLAY_HEIGHT, True,
                                 self.colour)  # Creates the firework particle
        self.exploded = False
        self.particles = []
        self.min_max_particles = vector(100, 225)

    def update(self, win):  # 每帧调用
        if not self.exploded:
            self.firework.apply_force(gravity)
            self.firework.move()
            for tf in self.firework.trails:
                tf.show(win)

            self.show(win)

            if self.firework.vel.y >= 0:
                self.exploded = True
                self.explode()
        else:
            for particle in self.particles:
                particle.apply_force(vector(gravity.x + uniform(-1, 1) / 20, gravity.y / 2 + (randint(1, 8) / 100)))
                particle.move()
                for t in particle.trails:
                    t.show(win)
                particle.show(win)

    def explode(self):
        # amount 数量
        amount = randint(self.min_max_particles.x, self.min_max_particles.y)
        for i in range(amount):
            self.particles.append(Particle(self.firework.pos.x, self.firework.pos.y, False, self.colours))

    def show(self, win):
        pygame.draw.circle(win, self.colour, (int(self.firework.pos.x), int(self.firework.pos.y)), self.firework.size)

    def remove(self):
        if self.exploded:
            for p in self.particles:
                if p.remove is True:
                    self.particles.remove(p)

            if len(self.particles) == 0:
                return True
            else:
                return False

#================Particle:烟花粒子(包含轨迹)======================
class Particle:
    def __init__(self, x, y, firework, colour):
        self.firework = firework
        self.pos = vector(x, y)
        self.origin = vector(x, y)
        self.radius = 20
        self.remove = False
        self.explosion_radius = randint(5, 18)
        self.life = 0
        self.acc = vector(0, 0)
        # trail variables
        self.trails = []  # stores the particles trail objects
        self.prev_posx = [-10] * 10  # stores the 10 last positions
        self.prev_posy = [-10] * 10  # stores the 10 last positions

        if self.firework:
            self.vel = vector(0, -randint(17, 20))
            self.size = 5
            self.colour = colour
            for i in range(5):
                self.trails.append(Trail(i, self.size, True))
        else:
            self.vel = vector(uniform(-1, 1), uniform(-1, 1))
            self.vel.x *= randint(7, self.explosion_radius + 2)
            self.vel.y *= randint(7, self.explosion_radius + 2)
            # 向量
            self.size = randint(2, 4)
            self.colour = choice(colour)
            # 5 个 tails总计
            for i in range(5):
                self.trails.append(Trail(i, self.size, False))

    def apply_force(self, force):
        self.acc += force

    def move(self):
        if not self.firework:
            self.vel.x *= 0.8
            self.vel.y *= 0.8
        self.vel += self.acc
        self.pos += self.vel
        self.acc *= 0

        if self.life == 0 and not self.firework:  # 检查粒子的爆炸范围
            distance = math.sqrt((self.pos.x - self.origin.x) ** 2 + (self.pos.y - self.origin.y) ** 2)
            if distance > self.explosion_radius:
                self.remove = True

        self.decay()

        self.trail_update()

        self.life += 1

    def show(self, win):
        pygame.draw.circle(win, (self.colour[0], self.colour[1], self.colour[2], 0), (int(self.pos.x), int(self.pos.y)),
                           self.size)

    def decay(self):  # random decay of the particles
        if 50 > self.life > 10:  # early stage their is a small chance of decay
            ran = randint(0, 30)
            if ran == 0:
                self.remove = True
        elif self.life > 50:
            ran = randint(0, 5)
            if ran == 0:
                self.remove = True

    def trail_update(self):
        self.prev_posx.pop()
        self.prev_posx.insert(0, int(self.pos.x))
        self.prev_posy.pop()
        self.prev_posy.insert(0, int(self.pos.y))

        for n, t in enumerate(self.trails):
            if t.dynamic:
                t.get_pos(self.prev_posx[n + dynamic_offset], self.prev_posy[n + dynamic_offset])
            else:
                t.get_pos(self.prev_posx[n + static_offset], self.prev_posy[n + static_offset])

#=======Trail:烟花轨迹,本质上是一个点 。创建 Trail 类,定义 show 方法绘制轨迹 、get_pos  实时获取轨迹坐标====
class Trail:
    def __init__(self, n, size, dynamic):
        self.pos_in_line = n
        self.pos = vector(-10, -10)
        self.dynamic = dynamic

        if self.dynamic:
            self.colour = trail_colours[n]
            self.size = int(size - n / 2)
        else:
            self.colour = (255, 255, 200)
            self.size = size - 2
            if self.size < 0:
                self.size = 0

    def get_pos(self, x, y):
        self.pos = vector(x, y)

    def show(self, win):
        pygame.draw.circle(win, self.colour, (int(self.pos.x), int(self.pos.y)), self.size)


def update(win, fireworks):
    for fw in fireworks:
        fw.update(win)
        if fw.remove():
            fireworks.remove(fw)

    pygame.display.update()

#=======================主函数=======================
def main():
    pygame.init()
    pygame.font.init()
    pygame.display.set_caption("祝您新年快乐")  # 标题
    background = pygame.image.load("./5.png")  # 背景
    sound_wav = pygame.mixer.music.load("2.mp3")
    pygame.mixer.music.play()


pygame.init()
# 加载背景音乐
'''pygame.mixer.music.load("./res/音乐文件名")
# 循环播放背景音乐
pygame.mixer.music.play(-1)
# 停止背景音乐
pygame.mixer.music.stop()
# 加载音效
boom_sound = pygame.mixer.Sound("./res/音效名")
# 播放音效
boom_sound.play()
boom_sound.stop()

myfont = pygame.font.Font("simkai.TTF", 80)
myfont1 = pygame.font.Font("simkai.ttf", 30)

testsurface = myfont.render("虎虎生威", False, (0, 0, 0), (220, 20, 60))
testsurface1 = myfont1.render("", False, (251, 59, 85))'''

# pygame.image.load("")
win = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
# win.blit(background)
clock = pygame.time.Clock()

fireworks = [Firework() for i in range(2)]  # create the first fireworks
running = True

while running:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:  # Change game speed with number keys
            if event.key == pygame.K_1:  # 按下 1
                fireworks.append(Firework())
            if event.key == pygame.K_2:  # 按下 2 加入10个烟花
                for i in range(10):
                    fireworks.append(Firework())
            if event.key == pygame.K_3:  # 按下 3 加入100个烟花
                for i in range(100):
                    fireworks.append(Firework())
    win.fill((20, 20, 30))  # draw background
    #win.blit(background, (0, 0))
    #win.blit(testsurface, (200, 30))
    #win.blit(testsurface1, (520, 80))

    if randint(0, 20) == 1:  # 创建新的烟花

        fireworks.append(Firework())

    update(win, fireworks)
pygame.quit()
quit()

2)效果展示

随机截图——

​随机截图——

二、新年烟花

🎃烟花和你都嘎嘎浪漫。

🎃凑不够满天星辰,那就放烟花给你看。

🎃烟花和喜欢的人看才嘎嘎浪漫。

🎃希望接下来的日子像烟花一样灿烂。

🎃新年的烟花那么响,也没有我想你那么想。

1)烟花表白代码

import random
import pygame as py
import tkinter as tk
from time import time, sleep
from tkinter import filedialog
from PIL import Image, ImageTk
from math import sin, cos, radians
from random import choice, uniform, randint
#导入库


def randomcolor():
    #生成随机颜色
    colArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    color = ""
    for i in range(6):
        color += colArr[random.randint(0,14)]
    return "#"+color

GRAVITY = 0.06
#重力变量
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen','indigo', 'cornflowerblue', 'pink']
#颜色列表
 
 
'''
Generic class for particles
particles are emitted almost randomly on the sky, forming a round of circle (a star) before falling and getting removed
from canvas
Attributes(属性):
    - id: 粒子的id
    - x, y: 粒子的坐标
    - vx, vy: 粒子在对应坐标的变化速度
    - total:一颗烟花里的粒子总数
    - age: 粒子在画布上停留的时间
    - color: 自我移植
    - cv: 画布
    - lifespan: 粒子在画布上停留的时间
'''
 
class part:
#为每一个烟花绽放出来的粒子单独构建一个类的对象 ,每个粒子都会有一些重要的属性,决定它的外观(大小、颜色)、移动速度等
    def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx = 0., vy = 0., size=2., color = 'red', lifespan = 2, **kwargs):
        self.id = idx
        #每个烟花的特定标识符
        self.x = x
        #烟花绽放x轴
        self.y = y
        #烟花绽放y轴
        self.initial_speed = explosion_speed
        #粒子初始速度
        self.vx = vx
        #粒子运动x轴速度
        self.vy = vy
        #粒子运动y轴速度
        self.total = total
        #绽放粒子数
        self.age = 0
        #粒子已停留时间
        self.color = color
        #粒子颜色
        self.cv = cv
        #画布
        self.cid = self.cv.create_oval(x - size, y - size, x + size,y + size, fill=self.color, outline='white',width=0.01)
        #指定一个限定矩形(Tkinter 会自动在这个矩形内绘制一个椭圆)
        self.lifespan = lifespan
        #粒子在画布上停留的时间
 
 
    def update(self, dt): 
        self.age += dt
        #更新粒子停留时间
        if self.alive() and self.expand():
            #如果粒子既存活又处于扩张阶段
            move_x = cos(radians(self.id*360/self.total))*self.initial_speed
            #粒子x轴继续膨胀
            move_y = sin(radians(self.id*360/self.total))*self.initial_speed
            #粒子y轴继续膨胀
            self.cv.move(self.cid, move_x, move_y)
            #根据id把画布上的粒子移动x和y个距离
            self.vx = move_x/(float(dt)*1000)
            #粒子x轴的速度
       
        
        elif self.alive():
            columnFont = ('华文行楷',14)
            #如果粒子仅存活不扩张(只是停留时间足够,说明膨胀到最大了),则自由坠落
            self.cv.create_text(250, 100, text='三',tag="write_tag", fill=choice(colors),font = columnFont) #字体
            self.cv.create_text(300, 100,  text='生',tag="write_tag", fill=choice(colors),font = columnFont)
            self.cv.create_text(350, 100, text='烟',tag="write_tag", fill=choice(colors),font = columnFont)
            self.cv.create_text(400, 100,  text='火',tag="write_tag", fill=choice(colors),font = columnFont)
            #删除文字标签
            move_x = cos(radians(self.id*360/self.total))
            #x轴的移动位移
            # we technically don't need to update x, y because move will do the job
            self.cv.move(self.cid, self.vx + move_x, self.vy+GRAVITY*dt)
            self.vy += GRAVITY*dt
            #更新y轴
 

        elif self.cid is not None:
            #如果粒子生命周期已过,则将其移除
            cv.delete(self.cid)
            #在画布上移除该粒子对象
            self.cv.delete("write_tag")
            #同时移除字体
            self.cid = None
 
 
 
    def expand (self):
        #定义膨胀效果时间帧
        return self.age <= 1.2
        #判断膨胀时间是否小于1.2秒
 
 
 
    def alive(self):
        #判断粒子是否仍在生命周期内
        return self.age <= self.lifespan
        #判断已停留时间是否小于应该停留时间
 
 
'''
Firework simulation loop:
Recursively call to repeatedly emit new fireworks on canvas
a list of list (list of stars, each of which is a list of particles)
is created and drawn on canvas at every call, 
via update protocol inside each 'part' object 
'''
 
def simulate(cv):
 
    t = time()
    #返回自1970年后经过的浮点秒数,精确到小数点后7位
    explode_points = []
    #爆炸点列表,烟花列表
    wait_time = randint(10,100)
    #等待时间为10到100之间整数
    numb_explode = randint(8,20)
    #爆炸烟花个数时6到10之间的随机整数
    # create list of list of all particles in all simultaneous explosion
    for point in range(numb_explode):
        #为所有模拟烟花绽放的全部粒子创建一列列表
        if point<=4:
            objects = []
            #每个点的爆炸粒子列表粒子列表
            x_cordi = 250 + point*50
            #每个爆炸点的x轴
            y_cordi = 100
            #每个爆炸点的y轴
            speed = uniform (0.5, 1.5)          
            #每个爆炸点的速度
            size = uniform (0.5,3)
            #每个爆炸点的大小
            color = choice(colors)
            #每个爆炸点的颜色
            explosion_speed = uniform(0.6, 3)
            #爆炸的绽放速度
            total_particles = randint(10,60)
            #烟花的总粒子数
            for i in range(1,total_particles):
            #同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的
                r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi, vx = speed, vy = speed, color=color, size = size, lifespan = uniform(0.6,1.75))
                #把上述参数代入part函数,但是每个粒子的生存时间是自己独立的
                objects.append(r)
                #把r添加进粒子列表
            explode_points.append(objects)
            #把粒子列表添加进烟花列表
        else: 
            objects = []
            #每个点的爆炸粒子列表粒子列表
            x_cordi = randint(50,550)
            #每个爆炸点的x轴
            y_cordi = randint(50, 150)
            #每个爆炸点的y轴
            speed = uniform (0.5, 1.5)          
            #每个爆炸点的速度
            size = uniform (0.5,3)
            #每个爆炸点的大小
            color = choice(colors)
            #每个爆炸点的颜色
            explosion_speed = uniform(0.3, 2)
            #爆炸的绽放速度
            total_particles = randint(10,50)
            #烟花的总粒子数
            for i in range(1,total_particles):
            #同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的
                r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi, vx = speed, vy = speed, color=color, size = size, lifespan = uniform(0.6,1.75))
                #把上述参数代入part函数,但是每个粒子的生存时间是自己独立的
                objects.append(r)
                #把r添加进粒子列表
            explode_points.append(objects)
            #把粒子列表添加进烟花列表

 
    total_time = .0
    #初始化总时间
    # keeps undate within a timeframe of 1.8 second 
    while total_time < 2:
    #当总时间小于1.8秒时运行该循环
        sleep(0.03)
        #让画面暂停0.01秒
        tnew = time()
        #刷新时间
        t, dt = tnew, tnew - t
        #时间等于新时间,和上次时间间隔为tnew-t
        for point in explode_points:
        #遍历烟花列表
            for item in point:
            #遍历烟花里的粒子列表
                item.update(dt)
                #粒子更新时间
        cv.update()
        #刷新画布
        total_time += dt
        #为while循环增加时间
 
    root.after(wait_time, simulate, cv)
    #将组件置于其他组件之后,放在最顶层,覆盖下面的,递归调用自己,形成新一轮的爆炸

def close(*ignore):
    #打开模拟循环并关闭窗口
    """Stops simulation loop and closes the window."""
    global root
    root.quit()
 
    
if __name__ == '__main__': 
    root = tk.Tk() 
    root.title('漫天烟花——祝大家—有情人终成眷属')  # 设置窗体的标题栏
    cv = tk.Canvas(root, height=600, width=600)
    #绘制一个高600,宽600的画布 
    bgpath = filedialog.askopenfilename(title='请选择背景图片')
    #选择背景图片
    image = Image.open(bgpath)
    #打开背景图片
    image = image.resize((600,600), Image.ANTIALIAS)
    #把背景图片调整成窗口大小
    photo = ImageTk.PhotoImage(image) 
    cv.create_image(0, 0, image=photo, anchor='nw')
    #在画布上绘制加载的背景图片 
    bgmusic = filedialog.askopenfilename(title='请选择背景音乐')
    py.mixer.init()
    # 初始化
    py.mixer.music.load(bgmusic)
    # 文件加载
    py.mixer.music.play(-1, 0, fade_ms=50)
    # 播放  第一个是播放值 -1代表循环播放, 第二个参数代表开始播放的时间
    py.mixer.music.pause() 
    #暂停
    py.mixer.music.unpause()
    #取消暂停
    cv.pack()
    #把cv添加进去
    root.protocol("WM_DELETE_WINDOW", close)
    root.after(200, simulate, cv)
    #在0.1秒后再调用stimulate函数,生成一轮烟花绽放效果
    root.mainloop()
    #执行root,生成窗口

2)效果展示

三、平平安安

🎉玫瑰花送谁都浪漫,烟花和谁看都好看,但和你就是双倍的浪漫。

🎉愿我们在烟花爆竹的光亮中成为澄清勇敢温柔的人。

🎉烟花盛开的时候,是我在想你。

🎉把愿望写在春联上,把思念留在烟花里。

🎉希望放烟花的人跟看烟花的人都能平平安安。

1)2023兔年吉祥代码

# coding=utf-8
"""
"""
from turtle import *
import time


def set_start(x, y, w=0.5, c='black'):
    penup()
    setx(x)
    sety(y)
    setheading(towards(0, 0))
    width(w)
    pencolor(c)
    pendown()
    speed(0)


def left_rotate(time, angle, length):
    for i in range(time):
        left(angle)
        forward(length)


def right_rotate(time, angle, length):
    for i in range(time):
        right(angle)
        forward(length)


def fill_color(color):
    def decorator_all(func):
        def wrapper(*args, **kwargs):
            begin_fill()
            func(*args, **kwargs)
            fillcolor(color)
            end_fill()
        return wrapper
    return decorator_all


def fill_color_patch(x, y, c='pink'):
    set_start(x, y, 1, c=c)
    forward(1)


def draw_circle(radius, color, color2=''):
    if color2 == '':
        color2 = color
    penup()
    setheading(towards(0, 0))
    right(90)
    pencolor(color)
    pendown()
    begin_fill()
    circle(radius)
    fillcolor(color2)
    end_fill()


def draw_ear():
    # 左侧耳朵
    fill_color_patch(-50, 86, c='#9392B3')
    begin_fill()
    set_start(-50, 86, w=4, c='#9392B3')
    right_rotate(1, 174, 10)
    right_rotate(5, 5, 15)
    right_rotate(4, 6, 15)
    width(3)
    right_rotate(2, 4, 13)
    right_rotate(2, 5, 10)
    left_rotate(3, 9, 12)
    width(4)
    right_rotate(1, 128, 10)
    right_rotate(3, 9.5, 31)
    right_rotate(5, 7, 25)
    right_rotate(1, 80, 10)
    left_rotate(3, 7, 12)
    fillcolor('pink')
    end_fill()
    width(3)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    fill_color_patch(-35, 105, c='#E6E6FA')
    begin_fill()
    set_start(-35, 105, w=1, c='#E6E6FA')
    right_rotate(1, 170, 10)
    right_rotate(3, 8, 25)
    right_rotate(3, 11, 23)
    right_rotate(1, 130, 20)
    right_rotate(5, 8, 25)
    goto(-35, 105)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(-32, 110, c='#D6D2F6')
    begin_fill()
    set_start(-32, 110, w=1, c='#D6D2F6')
    right_rotate(1, 170, 10)
    right_rotate(3, 7, 23)
    right_rotate(3, 11, 20)
    right_rotate(1, 131, 20)
    right_rotate(5, 8, 23)
    goto(-32, 110)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(-48.87, 85.22, w=3, c='#9392B3')
    setheading(195.67)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    # 右侧耳朵
    fill_color_patch(90, 67, c='#9392B3')
    begin_fill()
    set_start(90, 67, w=4, c='#9392B3')
    left_rotate(1, 180, 10)
    left_rotate(3, 5, 13)
    left_rotate(2, 8, 15)
    left_rotate(3, 6, 15)
    left_rotate(4, 5, 15)
    right_rotate(4, 5.5, 8)
    left_rotate(1, 132, 15)
    left_rotate(2, 8, 18)
    left_rotate(5, 5, 18)
    left_rotate(4, 4, 17)
    left_rotate(1, 70, 5)
    right_rotate(3, 5, 8)
    goto(90, 67)
    fillcolor('pink')
    end_fill()
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)
    fill_color_patch(90, 80, c='#E6E6FA')
    begin_fill()
    set_start(90, 80, w=1, c='#E6E6FA')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 12)
    left_rotate(4, 7, 15)
    right_rotate(4, 5, 9)
    left_rotate(1, 150, 15)
    left_rotate(4, 7.5, 15)
    left_rotate(2, 3, 15)
    right_rotate(2, 2, 10)
    left_rotate(2, 7, 12)
    goto(90, 80)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(90, 85, c='#D6D2F6')
    begin_fill()
    set_start(90, 85, w=1, c='#D6D2F6')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 10)
    left_rotate(4, 6, 15)
    right_rotate(4, 5, 7)
    left_rotate(1, 153, 15)
    left_rotate(3, 9.5, 15)
    left_rotate(2, 2, 15)
    right_rotate(3, 0, 10)
    goto(90, 85)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(90.00, 67.00, w=4, c='#9392B3')
    setheading(327.67)
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)


def draw_cat():
    set_start(34, 141, w=1, c='#C65B03')
    draw_circle(5, '#C65B03', color2='')
    set_start(33.5, 139, w=1, c='#ED9C22')
    draw_circle(3, '#ED9C22', color2='')
    fill_color_patch(-23, 90, c='#850009')
    begin_fill()
    set_start(-23, 90, w=2, c='#850009')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(11, 12, 10)
    width(2)
    left_rotate(2, 12, 12)
    goto(-23, 90)
    fillcolor('#B80705')
    end_fill()
    fill_color_patch(46, 110, c='#850009')
    begin_fill()
    set_start(46, 110, w=3, c='#850009')
    right_rotate(1, 145, 9)
    left_rotate(2, 16, 8)
    width(2)
    left_rotate(3, 22, 2)
    left_rotate(3, 12, 9)
    goto(46, 110)
    fillcolor('#E50703')
    end_fill()
    fill_color_patch(-23, 90, c='#BE7728')
    begin_fill()
    set_start(-23, 90, w=2, c='#BE7728')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(1, 55, 10)
    left_rotate(2, 5, 15)
    left_rotate(3, 6.5, 16)
    width(2)
    left_rotate(1, 55, 10)
    left_rotate(2, 10, 8)
    goto(-23, 90)
    fillcolor('#E4C127')
    end_fill()
    fill_color_patch(20, 98, c='#DC960D')
    begin_fill()
    set_start(20, 98, w=1, c='#DC960D')
    left_rotate(1, 75, 5)
    left_rotate(2, 12, 5)
    left_rotate(3, 33, 4)
    left_rotate(3, 35, 1)
    right_rotate(3, 28, 2)
    left_rotate(3, 35, 3)
    right_rotate(3, 30, 2)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    right_rotate(3, 25, 1)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    goto(20, 98)
    fillcolor('#DC960D')
    end_fill()
    fill_color_patch(22, 99, c='#839D76')
    begin_fill()
    set_start(22, 99, w=1, c='#839D76')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    fillcolor('#839D76')
    end_fill()
    begin_fill()
    set_start(24, 99, w=1, c='#398640')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    fillcolor('#398640')
    end_fill()
    begin_fill()
    set_start(25.5, 101, w=1, c='#0ADBC9')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    fillcolor('#0ADBC9')
    end_fill()


def draw_head():
    fill_color_patch(46, 83, c='#9392B3')
    begin_fill()
    set_start(46, 83, w=4, c='#9392B3')
    left_rotate(1, 105, 10)
    right_rotate(3, 8, 20)
    right_rotate(3, 10, 22)
    right_rotate(1, 13, 15)
    left_rotate(3, 3, 9)
    left_rotate(2, 12, 6)
    left_rotate(1, 30, 5)
    left_rotate(2, 15, 3)
    right_rotate(1, 135, 8)
    right_rotate(3, 8, 8)
    left_rotate(1, 140, 8)
    left_rotate(2, 10, 8)
    right_rotate(1, 130, 8)
    right_rotate(5, 7.5, 7.5)
    left_rotate(1, 140, 5)
    left_rotate(2, 8, 5)
    right_rotate(1, 125, 5)
    right_rotate(5, 8, 6)
    goto(125, -130)
    set_start(125, -130, w=4, c='#9392B3')
    left_rotate(1, 78, 10)
    right_rotate(3, 5, 18)
    right_rotate(4, 6, 21)
    right_rotate(5, 5, 18)
    right_rotate(3, 7, 20)
    left_rotate(1, 15, 10)
    right_rotate(2, 5, 6)
    right_rotate(4, 7, 6.5)
    right_rotate(1, 130, 5)
    left_rotate(3, 11, 4.5)
    left_rotate(1, 140, 7)
    right_rotate(3, 12, 6)
    right_rotate(5, 5, 5)
    right_rotate(1, 130, 5)
    left_rotate(3, 5, 4)
    left_rotate(3, 13, 3)
    left_rotate(1, 120, 8)
    right_rotate(5, 10, 6.5)
    right_rotate(1, 95, 5)
    left_rotate(3, 12, 5)
    left_rotate(3, 10, 10)
    right_rotate(3, 5, 12)
    right_rotate(3, 2, 5)
    right_rotate(3, 5, 12)
    right_rotate(4, 5, 13)
    left_rotate(3, 6, 6)
    left_rotate(5, 13.5, 7)
    right_rotate(1, 158, 8)
    right_rotate(3, 7, 7)
    right_rotate(5, 15, 5)
    fillcolor('white')
    end_fill()


if __name__ == '__main__':
    title('Python顾木子吖(公众号)')
    wide = 800
    height = 600
    screensize(wide, height, '#DC0058')
    setup(wide+30, height+30, 50, 10)
    shape(name='turtle')
    time.sleep(2)
    draw_ear()
    draw_cat()
    draw_head()
    # draw_face()
    # draw_mouth()
    # draw_eye()
    # draw_eyebrow()
    # draw_nose()
    # draw_cheek()
    # draw_forehead()
    # draw_foot()
    # draw_body()
    # draw_hand()
    # draw_clothes()
    # draw_jade()

    set_start(1000, 1000, 2.5)
    done()

2)效果展示

​总结

2023祝大家大展宏兔,前途似锦,兔年吉祥!

好啦!今天的内容写到这里就结束了哈,记得三连关注一下哦~

老规矩源码基地见,资料都是免费拿滴,没拿到的不要急一个一个来哈,可能有时候不是很及

时,多多包涵哦~

🎯完整的免费源码领取处:找我吖!文末公众hao可自行领取,滴滴我也可!

🔨推荐往期文章——

项目1.0 玫瑰花(内含多份源码)

【Turtle玫瑰汇总】温柔且浪漫至极——“玫瑰的花期到了“

项目1.1 雪花(内含多份源码)

Turtle系列:下雪了,下雪了、最漂亮的雪景在这里....太美了

项目 2.1 樱花将灿,冬尽风暖

漫天樱花表白小程序:“樱花将灿,冬尽风暖“一樱花和你我都想念~(内含多份源码)

项目 2.2 源码合集(表白)

Turtle系列:小人发射爱心、文字表白、一箭穿心你想要的都在这个小程序哦~(超值)

项目2.3 魔法阵合集

【Turtle合集】火遍抖音的五款魔法阵终于被我找到了(初代萌王,童年的小樱回来了)

🎄文章汇总——

汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了

(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式之适配器模式,以C++为例。

今天来盘一盘适配器模式。适配器&#xff1a;顾名思义&#xff0c;就是让原本不合适的变为合适的&#xff0c;好似一对男女&#xff0c;没有中间的媒婆是不会互相了解的&#xff0c;好像不太恰当&#xff0c;就这么解释吧&#xff0c;只有有了这个中间人他们才会产生联系&#…

智能驾驶开启高精定位新赛道,这家供应商正加码布局海外市场

高工智能汽车研究院监测数据显示&#xff0c;2022年1-11月中国市场乘用车前装标配搭载NOA交付达到18.38万辆&#xff0c;同比增长91.86%&#xff1b;同时&#xff0c;NOA搭载的车型配置价格还在不断下滑&#xff0c;正在把NOA的配置拉至15万元价格区间。 而作为高精定位&#x…

面向对象——static(静态)Math类自定义工具类代码块

目录 static&#xff08;静态&#xff09;关键字 static的注意事项 static的优点和缺点 应用场景 自定义工具类 代码块 static&#xff08;静态&#xff09;关键字 static是一个修饰符&#xff0c;用于修饰成员&#xff08;成员变量 、成员方法&#xff09;static的特点…

Redis处理client连接数过多,大量空闲链接无法释放问题

打开redis命令终端&#xff0c;输入&#xff1a; client list 查看连接数&#xff0c;用于返回所有连接到服务器的客户端信息和统计数据 参数解析&#xff1a; id: 唯一的64位的客户端ID(Redis 2.8.12加入)。 addr: 客户端的地址和端口 fd: 套接字所使用的文件描述符 age…

python真的很骚可惜你不会

python基本语法 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2023年1月日3…

redis分布式缓存

文章目录一、redis持久化1.1.RDB持久化1.1.1.执行时机1.1.2.RDB原理1.1.3.小结1.2.AOF持久化1.2.1.AOF原理1.2.2.AOF配置1.2.3.AOF文件重写1.2.4.小结1.3.RDB与AOF对比二、Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试2.6.主从数据同步原理2.…

Codeforces Round #848 (Div. 2) A-E 赛时思路+正解

青大蒟蒻第一次在正式的div2div2div2中AcAcAc了五道题&#xff0c;也是小蒟蒻有史以来发挥最好的一场&#xff0c;这场过后我的cf也许可能也要变成黄了。 A. Flip Flop Sum 题意&#xff1a;给定一个a——ia——ia——i数组&#xff0c;权值仅为1或-1&#xff0c;我们选择相邻…

《死亡空间》重制回归!无法启动怎么办?

作为科幻生存恐怖系列的经典之作&#xff0c;《死亡空间》在推出15年后再次回归&#xff0c;果然引发热潮。精美震撼的科幻场景&#xff0c;强烈的视觉画面&#xff0c;加上阴森的3D 音效&#xff0c;重制版提升了身临其境之感&#xff0c;完全是沉浸式恐怖体验&#xff0c;只能…

红外遥控数码管显示

红外遥控器实物图红外遥控器接口电路数码管接口电路红外遥控数码管显示程序源代码/**************************红外遥控数码管显示************************** * 单片机&#xff1a;51单片机* 开发环境&#xff1a;keil * 名称:红外遥控数码管显示 * 功能&#xff1a;遥控器红外…

C语言常量

常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。常量可以是任何的基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量&#xff0c;或字符串字面值&#xff0c;也有枚举常量。常量就像是常规的变量&#xff0c;只不过常量的值…

OpenMMLAB AI实战营第一课笔记

计算机视觉的发展 计算机视觉是什么 计算机视觉是一门让计算机学会"看"的学科&#xff0c;研究如何自动理解图像和视频中的内容 计算机视觉的发展 早期萌芽&#xff08;1960-1980&#xff09; 统计机器学习与模式识别(1990-2000) ImageNet 大型数据库(2006) 斯坦…

ocelot+consul治理服务

consulConsul 是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比&#xff0c;Consul的方案更“一站式”&#xff0c;内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方…

程序员副业接单做私活避坑指南

这篇文章系统的分享了对接单做私活这件事情的思考&#xff0c;也给出一些干货建议。希望让大家少走一些弯路&#xff0c;不要被坑。 先说结论 不建议大家在接单这个事情上投入太大精力&#xff0c;如果你“贼心不改”&#xff0c;建议大家以比较随缘的方式对待这件事情。 再说…

Linux云主机配置

Linux云主机配置 推荐环境&#xff1a; Mac 阿里云主机Linux 阿里云主机Windows Xshell 阿里云主机&#xff08;选择使用&#xff09;Windows 虚拟机 阿里云主机 1.云主机配置 选择配置的过程中&#xff0c;请注意选择操作系统版本为Ubuntu 16.04 64位 或 Ubuntu 18.04 6…

多位大厂专家鼎力推荐,44个微服务架构设计模式pdf,程序员福利

前言 本文的目标是让架构师和程序员学会使用微服务架构成功开发应用程序。 本文不仅讨论了微服务架构的好处&#xff0c;还描述了它们的弊端。读者将掌握如何在使用单体架构和使用微服务架构之间做出正确的权衡。 谁应该阅读本文&#xff1f; 本文的重点是架构和开发&#…

前端vue2实现头部组件(自定义背景icon+抽屉式使用指南展示)

一、文章引导 #mermaid-svg-Sqlx5Ih7pUPfo8rw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-icon{fill:#552222;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-text{fill:#552222;stroke:#55222…

Python多态及用法详解

Python 是弱类型语言&#xff0c;其最明显的特征是在使用变量时&#xff0c;无需为其指定具体的数据类型。这会导致一种情况&#xff0c;即同一变量可能会被先后赋值不同的类对象&#xff0c;例如&#xff1a;class CLanguage: defsay(self): print("赋值的是 CLanguage 类…

ElasticSearch从入门到出门【下】

文章目录数据聚合聚合的种类DSL实现聚合Bucket聚合语法聚合结果排序限定聚合范围Metric聚合语法RestAPI实现聚合API语法业务需求业务实现自动补全拼音分词器自定义分词器自动补全查询实现酒店搜索框自动补全修改酒店映射结构修改HotelDoc实体重新导入自动补全查询的JavaAPI实现…

阿里云领取免费2H2G云服务器&证书分享&个税抵扣:Apsara Clouder云计算专项技能认证:云服务器ECS入门

这个证书是你领服务器一个月内要考的&#xff0c;内容也不难。下面是90分左右的答案&#xff08;粗体&#xff09;&#xff0c;仅供参考……单选1&#xff0e;云服务器ECS以服务化的方式对客户提供&#xff0c;阿里云产品售后支持的时间段是&#xff1f;A.5*8B.7*8C.7*12D.7*24…

《MySQL高级篇》十四、多版本并发控制

文章目录1. 什么是MVCC2. 快照读与当前读2.1 快照读2.2 当前读3. 复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链4. MVCC实现原理之ReadView4.1 什么是ReadView4.2 设计思路4.3 ReadView的规则4.4 MVCC整体操作流程5. 举例说明5.1 READ COMMITTED隔离级别下5.2 REPEATABLE …