成果展示 ?
简单的跑了一下程序,结果如下,这个画图的速度已经是最快了 ??? :
源代码 ?
源码如下,这是最简单的实现,大佬勿喷 ?。
代码语言:javascript复制"""
@author: shoo Wang
@contact: wangsuoo@foxmail.com
@file: demo01.py
@time: 2020/4/16 0016
"""
import turtle
import random
'''
雪花位置随机
雪花个数随机[2,10]之间
雪花大小随机
'''
# 递归的画科赫曲线,控制阶数和角度
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size / 3, n - 1)
# 控制雪花的个数、位置; 此函数为核心函数!
def control_num(n):
# 一个随机函数控制随机位置和大小,参数为雪花的个数
for i in range(n):
# 隐藏画笔
turtle.hideturtle()
# 开始填充背景颜色
turtle.begin_fill()
turtle.color('white')
# 生成随机数,控制 x 轴 与 y 轴
num1 = random.randint(-100, 100)
num2 = random.randint(-100, 100)
num3 = random.randint(20, 80)
# 控制位置随机
control_locate(num1 * 3, num2 * 3)
# 控制大小和阶数
control_size(num3, 3)
turtle.end_fill()
# 设置画笔的属性
def pen_attr():
# 设置背景颜色
turtle.bgcolor('blue')
# 设置画笔的颜色和速度等属性, (吐槽一下速度真的慢,最快就是10了
turtle.pen({'pensize': 1, 'shown': True, 'resizemode': 'auto', 'outline': 1,
'pencolor': 'white', 'pendown': False, 'fillcolor': 'white',
'speed': 10})
# 控制每一阶的 大小、转向
def control_size(size, level, angle = 120):
# 画第一部分
koch(size, level)
turtle.right(angle)
# 画第二部分
koch(size, level)
turtle.right(angle)
# 画第三部分
koch(size, level)
# 控制位置随机
def control_locate(resetX, resetY):
# turtle.setup(startX, startY)
turtle.penup()
turtle.goto(resetX, resetY)
turtle.pendown()
# 主函数
def main():
"""
总体控制画布的位置,入口函数,调用其他函数
"""
# 控制个数, 这里是随机,[2,10]
num = random.randint(2, 10)
control_num(num)
turtle.done()
# 函数调用,启动!!!
main()
已知 BUG ?
- 雪花有重叠,不过我觉得这也正常,毕竟现实中下雪也会有重叠 ?;
- 有的雪花会出界,可以简单的通过控制边界的大小和雪花随机出现的位置避免,也可以在循环的时候多加一条判断,如果出界就 continue;
总结一下,练习了函数的运用以及一些算法的头脑风暴,复习了海龟绘图以及 random 库函数的调用。