import turtle
import random
import time
def init_screen():
'''初始化窗口/屏幕。'''
turtle.setup(1.0, 1.0)
turtle.bgcolor('black') #设置画布颜色
turtle.title("雪 花 飞 舞")
def init_pen():
'''初始化画笔'''
pen = turtle.Pen()
pen.ht() #隐藏画笔
return pen
class Snow(): #
'''雪花类'''
def __init__(self):
self.colors = ['white', 'black','red', 'yellow', 'green', 'blue', 'orange', 'pink'] #雪花的颜色列表
self.r = random.uniform(1,5) #雪花的半径
self.x = random.randint(-1000,1000) #雪花的横坐标
self.y = random.randint(500,1000) #雪花的纵坐标
self.speed = random.randint(5,20) #雪花的下落速度
self.color = random.choice(self.colors) #雪花的轮廓颜色
self.outline = 2 #雪花的轮廓粗细
def move(self):
'''雪花移动函数'''
if self.y >= -550: #当雪花还在画布中时
self.y -= self.speed #新的y坐标
else: #当雪花漂出了画布时,重新初始化雪花
self.r = random.uniform(1,5)
self.x = random.randint(-1000,1000)
self.y = random.randint(500,600)
self.speed = random.randint(5,20)
self.color = random.choice(self.colors)
self.outline = 2
def init_snows(counts):
'''初始化雪花列表'''
snows = []
for i in range(counts):
snows.append( Snow() )
return snows
def update_snows(pen, snows):
'''更新雪花'''
pen.clear() #清除原位置所有雪花的显示
for i in range(len(snows)): #重新绘制新位置下的所有雪花
snows[i-1].move()
pen.pensize(snows[i-1].outline) #雪花的大小
pen.penup() #提笔
pen.goto(snows[i-1].x,snows[i-1].y) #移动画笔到新位置
pen.pendown() #落笔
pen.color(snows[i-1].color) #雪花外廓颜色
pen.begin_fill()
pen.fillcolor("white") #雪花内部填充色
pen.circle(snows[i-1].r) #绘制新雪花
pen.end_fill()
turtle.update() #更新显示新位置下的所有雪花
def show_head(pen,color):
pen.color(color)
pen.write(arg="下 雪 了", move=False, align="center",font=("Comic Sans MS", 66, "bold"))
def main():
'''主函数'''
init_screen()
pen=init_pen()
turtle.colormode(255)
show_head(pen, (255, 250, 250) )
turtle.colormode(1.0)
time.sleep(3)
turtle.tracer(0) # 取消掉画笔的各个动作函数在屏幕上画画的过程,改为在后台画。之后调用update()函数将所画的画统一显示出来。
counts =random.randint(150,300)
snows = init_snows(counts)
print(len(snows))
while True: #开始绘制
turtle.ontimer(update_snows(pen, snows),30)
return 0
if __name__=='__main__':
print('Main Program Startup.\n')
main()
else:
print('Python_main_program is started as a module.\n')