import turtle
import random
import time
width = 600
height = 500
window = turtle.Screen()
window.setup(width, height)
window.bgcolor("sky blue")
window.title("Merry Christmas")
snowball_rate = 1, 3
snowball_size = 5, 15
wind_change = 1, 5
max_wind = 3
# Create all circle-shaped objects
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)
# Create new snowballs and store in list
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: body
snowman = turtle.Turtle()
x_position = 0
y_positions = 75, 0, -100
size = 75
for y in y_positions:
make_circle(snowman, x_position, y, size, "white")
size = size * 1.5
# Snowman: buttons
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")
# Snowman: eyes
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: nose
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)
# Ground
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("Merry Christmas", font=(
"Apple Chancery", 30, "bold"), align="center")
text.setposition(130, 140)
text.color("dark green")
text.write("Dao", font=("Avenir", 30, "bold"), align="right")
text.color("black")
text.write("Bi", font=("Avenir", 30, "normal"), align="left")
text.setx(50)
text.write("from", 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()
这段Python代码使用Turtle图形库创建了一个简单的动画,包括下雪、雪人和圣诞主题的风景。以下是对代码的逐步分析:
导入库:
import turtle
import random
import time
turtle
:提供对象导向和过程导向的海龟图形基元。random
:生成随机数。time
:提供各种与时间相关的函数。设置Turtle窗口:
width = 600
height = 500
window = turtle.Screen()
window.setup(width, height)
window.bgcolor("sky blue")
window.title("Merry Christmas")
定义雪球参数:
snowball_rate = 1, 3
snowball_size = 5, 15
wind_change = 1, 5
max_wind = 3
定义函数:
make_circle
:在指定位置创建一个圆形对象。make_snowball
:创建一个新的雪球海龟并将其添加到列表中。move_snowball
:移动雪球海龟,根据下降速度和风力更新其位置。创建雪人:
snowman = turtle.Turtle()
x_position = 0
y_positions = 75, 0, -100
size = 75
创建地面:
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()
创建文本:
text = turtle.Turtle()
text.color("red")
text.penup()
text.setposition(-100, 170)
text.write("Merry Christmas", font=("Apple Chancery", 30, "bold"), align="center")
设置时间和风:
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图形库,创建了一个简单而有趣的圣诞主题动画。以下是我的一些心得:
Turtle图形库: Turtle是一个很好的用于学习编程和图形设计的工具。它提供了简单易懂的API,适合初学者入门,同时也可以创建出具有趣味性的图形。
动画设计: 通过循环和时间控制,代码实现了雪球的不断下落、雪人的绘制,以及风力的随机变化。这种动态的设计增加了视觉上的趣味性。
可读性良好: 代码的结构清晰,函数的命名恰当,使得整个代码可读性很好。这对于理解代码和后续维护非常重要。
创意表达: 通过在屏幕上创建雪人、雪球和圣诞主题的背景,代码成功地表达了圣诞节的氛围,同时还添加了一些有趣的元素,比如风力的变化。
实践编程技能: 通过编写和理解这段代码,可以学到关于随机数生成、时间控制、动画设计等方面的编程技能。这对于培养实际的编程经验很有帮助。
总体而言,这段代码是一个有趣且教育性的例子,展示了如何使用Python和Turtle图形库创建简单的动画。
# -*- coding: utf-8 -*-
import turtle as T
import random
import time
# 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
t.hideturtle() # 隐藏画笔
t.getscreen().tracer(5, 0)
w.screensize(bg='maroon')
t.left(90)
t.up()
t.forward(280)
t.down()
t.pensize(3)
# 画五角星
n=100
t.color("orange","yellow")
t.begin_fill()
t.left(126)
for i in range(5):
t.forward(n/5)
t.right(144)
t.forward(n/5)
t.left(71)
t.end_fill()
t.left(60)
t.pensize(8)
t.forward(60)
t.right(20)
t.right(116)
t.pensize(6)
# 画树冠
t.color('dark green')
n=130
for i in range(6):
time.sleep(0.5)
a=1+i/2
t.begin_fill()
t.left(90)
t.forward(n*a*0.707)
t.left(135)
t.forward(n*a)
t.left(135)
t.forward(n*a*0.707)
t.end_fill()
t.up()
t.left(90)
t.forward(n*a*0.707/3)
t.left(135)
t.forward(n*a/6)
t.left(135)
t.down()
# 画树干
t.up()
t.right(135)
t.forward(30)
t.right(90)
t.forward(157)
t.down()
t.color('saddlebrown')
t.begin_fill()
t.forward(80)
t.right(90)
t.forward(45)
t.right(90)
t.forward(80)
t.right(90)
t.forward(45)
t.end_fill()
t.up()
t.backward(45)
t.right(90)
t.backward(470)
t.down()
# 画灯
def light(l,t):
t.pensize(3)
colors = ["magenta","darkorange","red","blue"]
for i in range(l):
time.sleep(0.2)
b = 70+16*i
a = b/2*random.randint(-100,100)/100
t.up()
t.forward(b)
t.left(90)
t.forward(a)
t.down()
t.color("lightyellow",colors[i%4])
t.begin_fill()
t.circle(10)
t.end_fill()
t.up()
t.backward(a)
t.right(90)
t.backward(b)
t.down()
t.pensize(1)
# 画雪花
def snow(m,t):
for i in range(m):
a = 400 - 800 * random.random()
b = 600 - 800 * random.random()
t.up()
t.forward(b)
t.left(90)
t.forward(a)
t.down()
t.color('white')
t.begin_fill()
t.circle(1)
t.end_fill()
t.up()
t.backward(a)
t.right(90)
t.backward(b)
light(24,t)
snow(600, t)
# 文字
t.goto(-200,200)
my_word = ("Merry Christmas")
t.write(my_word,font=("Edwardian Script ITC",40,"bold"))
time.sleep(0.3)
t.goto(-100,50)
my_word = ("and")
t.write(my_word,font=("Edwardian Script ITC",50,"bold"))
time.sleep(0.3)
t.goto(-150,-100)
my_word = ("Happy New Year")
t.write(my_word,font=("Edwardian Script ITC",40,"bold"))
time.sleep(0.3)
t.clear()
w.screensize(bg='black')
t.goto(-200,0)
my_word = ("Prudued by: Justine")
t.write(my_word,font=("Edwardian Script ITC",45,"bold"))
t.goto(0,-100)
my_word = ("Dec. 24th, 2019")
t.write(my_word,font=("Edwardian Script ITC",20,"bold"))
time.sleep(5)
这段代码使用Python的Turtle图形库绘制了一个圣诞树、五角星、灯光、雪花以及一些文字,并在最后展示了制作的日期和制作者信息。以下是对代码的简要分析:
设置绘图环境:
t = T.Turtle()
w = T.Screen()
t.hideturtle()
t.getscreen().tracer(5, 0)
w.screensize(bg='maroon')
绘制五角星:
n = 100
t.color("orange", "yellow")
t.begin_fill()
t.left(126)
for i in range(5):
t.forward(n / 5)
t.right(144)
t.forward(n / 5)
t.left(71)
t.end_fill()
绘制圣诞树的树冠:
t.color('dark green')
n = 130
for i in range(6):
# 逐层绘制树冠
绘制圣诞树的树干:
t.up()
t.right(135)
t.forward(30)
t.right(90)
t.forward(157)
t.down()
t.color('saddlebrown')
t.begin_fill()
t.forward(80)
t.right(90)
t.forward(45)
t.right(90)
t.forward(80)
t.right(90)
t.forward(45)
t.end_fill()
绘制灯光:
def light(l, t):
# 绘制一串灯光
绘制雪花:
def snow(m, t):
# 绘制雪花
展示文字信息:
t.goto(-200, 200)
my_word = ("Merry Christmas")
t.write(my_word, font=("Edwardian Script ITC", 40, "bold"))
展示制作信息:
t.goto(-200, 0)
my_word = ("Produced by: Justine")
t.write(my_word, font=("Edwardian Script ITC", 45, "bold"))
等待5秒后清空画布:
time.sleep(5)
t.clear()
w.screensize(bg='black')
代码注释: 代码中添加了注释,使得代码更易读、易理解。
这段代码通过Turtle图形库展示了一个简单而有趣的圣诞主题图形,并且通过文字展示了制作者信息和日期。
这段代码使用Turtle图形库绘制了一个富有圣诞氛围的图形,包括五角星、圣诞树、灯光和雪花等元素。以下是我的心得:
创意丰富: 代码展示了作者对于圣诞节的创意和想象力。通过使用Turtle绘制五角星和树形,以及添加灯光和雪花,使整个图形充满了节日的氛围。
图形效果: 通过合理选择颜色、形状和绘制顺序,成功地绘制出了富有立体感的圣诞树,五角星的设计也很有特色。同时,通过随机颜色的灯光和雪花,增加了视觉上的多样性。
动态效果: 使用Turtle的tracer
函数以及time.sleep
函数,使得图形的绘制过程呈现出一定的动态效果。例如,逐层绘制圣诞树的树冠,以及依次点亮的灯光,都使图形看起来更生动。
字体选择: 通过选择不同的字体(“Edwardian Script ITC”),成功地展示了"Merry Christmas"和"Happy New Year"等文本,使得图形更具节日氛围。
清晰结构: 代码结构相对清晰,模块化程度较高,使用函数对不同元素进行绘制,提高了代码的可读性和可维护性。
创作者信息: 最后展示了制作者信息和日期,这是一个很好的方式来为自己的作品留下标记,并向其他人展示制作者的身份。
总体而言,这段代码不仅仅是一个简单的图形绘制,更是通过细致的设计和创意,成功地表达了圣诞节的欢乐氛围。同时,展示了Turtle图形库的灵活性和简便性。
这段代码通过使用Python的Turtle图形库,成功绘制了一个富有创意和节日氛围的圣诞主题图形。以下是对整体代码的总结:
图形元素:
tracer
函数和time.sleep
函数创造了动态效果,使得图形呈现出逐步绘制的过程。色彩和形状:
函数的使用:
文本展示:
动态效果:
代码清晰度:
总的来说,这段代码成功地通过简单的图形绘制展现了圣诞节的欢快氛围,结合了创意、色彩和动态效果,展示了Turtle图形库的灵活性和便捷性。
圣诞节快乐!愿你的圣诞充满温馨和喜悦,与亲朋好友共度美好时光。愿你在新的一年里充满幸福、健康和成功。祝福你和你的家人,平安喜乐!🎄🎅🎁