python圣诞雪人

简介: python圣诞雪人

一、前言


🎄为了庆祝我们副山羊勒布朗詹姆斯,连续刷分6场30+,特此画一幅圣诞雪人,也祝福湖人12月26日圣诞大战,再我詹的带领下,刷分60+,圣诞之夜历史第一人。


二、创意名


Lebron James It’s for you!


三、效果展示

b669bddfd1c04cb5911dfa0d83fc4c9e.png

四、实现步骤


创建画布,设置背景,图片,设置雪球参数,风参数

创建画布中所有圆形对象

创建雪球

创建雪球移动函数

创建雪人

创建地面


五、编码实现


创建画布,设置背景,图片,设置雪球参数,风参数


import turtle
import random
import time
width = height = 500
window = turtle.Screen()
window.setup(width, height)
window.bgcolor("sky blue")
window.bgpic('jm.gif')
window.title("Happy Holidays")
snowball_rate = 1, 3
snowball_size = 5, 15
wind_change = 1, 5
max_wind = 3


turtle.bgpic函数只接受gif格式的图片


创建画布中所有圆形对象


def make_circle(turtle_name, x, y, size, colour):
    turtle_name.color(colour)
    turtle_name.penup()
    turtle_name.setposition(x, y)
    turtle_name.dot(size)


创建雪球


list_of_snowballs = []
def make_snowball():
    snowball = turtle.Turtle()
    snowball.color("white")
    snowball.penup()
    snowball.setposition(random.randint(-2*width, width/2), height/2)
    snowball.hideturtle()
    snowball.size = random.randint(*snowball_size)
    list_of_snowballs.append(snowball)


创建雪球移动函数


def move_snowball(turtle_name, falling_speed=1, wind=0):
    turtle_name.clear()
    turtle_name.sety(turtle_name.ycor() - falling_speed)
    if wind:
        turtle_name.setx(turtle_name.xcor() + wind)
    turtle_name.dot(turtle_name.size)


创建雪人


# 雪人:身体
snowman = turtle.Turtle()
x_position = 100
y_positions = 75, 0, -100
size = 75
for y in y_positions:
    make_circle(snowman, x_position, y, size, "white")
    size = size *1.5
# 雪人:按钮
button_seperation = 25
button_y_positions = [y_positions[1]-button_seperation,
                      y_positions[1],
                      y_positions[1]+button_seperation]
for y in button_y_positions:
    make_circle(snowman, x_position, y, 10, "black")
# 雪人:眼睛
y_offset = 10
x_seperation = 15
for x in x_position-x_seperation, x_position+x_seperation:
    make_circle(snowman, x, y_positions[0] + y_offset, 20, "green")
    make_circle(snowman, x, y_positions[0] + y_offset, 10, "black")
# 雪人:鼻子
snowman.color("orange")
snowman.setposition(x_position - 10, y_positions[0]-y_offset)
snowman.shape("triangle")
snowman.setheading(200)
snowman.turtlesize(0.5, 2.5)
window.tracer(0)


创建地面


grass = turtle.Turtle()
grass.fillcolor("forest green")
grass.penup()
grass.setposition(-width/2, -height/2)
grass.begin_fill()
for _ in range(2):
    grass.forward(width)
    grass.left(90)
    grass.forward(70)
    grass.left(90)
grass.end_fill()
ground = turtle.Turtle()
for x in range(int(-width/2), int(width/2), int(width/200)):
    make_circle(ground, x, -180, random.randint(5, 20), "white")


给画布添加文字


text = turtle.Turtle()
text.color("red")
text.penup()
text.setposition(-100,170)
text.write("Happy Holidays", font=("Apple Chancery", 30, "bold"), align="center")
text.setposition(130, 140)
text.color("dark green")
text.write("Lebron", font=("Avenir", 30, "normal"), align="right")
text.color("black")
text.write("James", font=("Avenir", 30, "normal"), align="left")
text.setx(50)
text.write("It's for you!", font=("Apple Chancery", 20, "bold"), align="right")
text.hideturtle()


定义画布的时间函数


time_delay = 0
start_time = time.time()
wind = 0
wind_delay = 5
wind_timer = time.time()
wind_step = 0.1
while True:
    if time.time() - start_time > time_delay:
        make_snowball()
        start_time = time.time()
        time_delay = random.randint(*snowball_rate)/10
    for snowball in list_of_snowballs:
        move_snowball(snowball, wind=wind)
        if snowball.ycor() < -height/2:
            snowball.clear()
            list_of_snowballs.remove(snowball)
    if time.time() - wind_timer > wind_delay:
        wind += wind_step
        if wind >= max_wind:
            wind_step = -wind_step
        elif wind <= 0:
            wind_step = abs(wind_step)
        wind_timer = time.time()
        wind_delay = random.randint(*wind_change)/10
    window.update()
turtle.done()
相关文章
|
存储 监控 算法
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
342 0
|
关系型数据库 流计算 PostgreSQL
关于PostgreSQL逻辑订阅中的复制状态
关于PostgreSQL逻辑订阅中的复制状态
3092 0
|
7月前
|
存储 消息中间件 Kafka
基于 Flink 的中国电信星海时空数据多引擎实时改造
本文整理自中国电信集团大数据架构师李新虎老师在Flink Forward Asia 2024的分享,围绕星海时空智能系统展开,涵盖四个核心部分:时空数据现状、实时场景多引擎化、典型应用及未来展望。系统日处理8000亿条数据,具备亚米级定位能力,通过Flink多引擎架构解决数据膨胀与响应时效等问题,优化资源利用并提升计算效率。应用场景包括运动状态识别、个体行为分析和群智感知,未来将推进湖仓一体改造与三维时空服务体系建设,助力数字化转型与智慧城市建设。
810 3
基于 Flink 的中国电信星海时空数据多引擎实时改造
|
9月前
|
数据采集 人工智能 安全
阿里云携手DeepSeek,AI应用落地五折起!
近年来,人工智能技术飞速发展,越来越多的企业希望借助AI的力量实现数字化转型,提升效率和竞争力。然而,AI应用的开发和落地并非易事,企业往往面临着技术门槛高、成本投入大、落地效果难以保障等挑战。
335 1
|
前端开发 JavaScript 容器
文字溢出隐藏及鼠标悬停显示效果
文字溢出隐藏及鼠标悬停显示效果
434 0
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
348 8
LVS+Keepalived 负载均衡
|
消息中间件 存储 负载均衡
一文总结 MetaQ/RocketMQ 原理
本文介绍的 MetaQ/RocketMQ 是侧重于维持消息一致性和高可靠性的消息队列中间件,帮助大家对队列设计的理解。
|
机器学习/深度学习 开发者 Python
OpenAI Gym高级教程——领域自适应强化学习
OpenAI Gym高级教程——领域自适应强化学习
639 0
|
存储 Java 程序员
Java中的自动类型转换(Automatic Type Conversion)
Java中的自动类型转换(Automatic Type Conversion)
589 0