用Python画出圣诞树和烟花,瞧瞧我这简易版的吧

  • 序言
  • 圣诞树
    • 效果展示
    • 代码展示
  • 圣诞树上加烟花
    • 效果展示
    • 代码展示
  • 写在最后

序言

这不是圣诞节快到了,准备让让女朋友开心开心,也算是亲手做的,稍稍花了点心思。

话不多说,咱们直接来展示吧,学会了赶紧画给你的那个她吧!

本文分为两个大块,我们先来试试画圣诞树。

圣诞树

效果展示

代码展示

导入模块

import turtle as t
from turtle import *
import random as r
import time

圣诞树细节以及画布大小

画布大小,背景颜色都可以改,我之前把黑色背景换成粉色的,看着也还行。

n = 100.0speed("fastest")
screensize(bg='black')
left(90)
forward(3 * n)
color("orange", "yellow")
begin_fill()
left(126)for i in range(5):forward(n / 5)right(144)forward(n / 5)left(72)
end_fill()
right(126)def drawlight():if r.randint(0, 30) == 0:color('tomato')circle(6)elif r.randint(0, 30) == 1:color('orange')circle(3)else:color('dark green')color("dark green")
backward(n * 4.8)def tree(d, s):if d <= 0: returnforward(s)tree(d - 1, s * .8)right(120)tree(d - 3, s * .5)drawlight()  # 同时画小彩灯right(120)tree(d - 3, s * .5)right(120)backward(s)tree(15, n)
backward(n / 2)for i in range(200):a = 200 - 400 * r.random()b = 10 - 20 * r.random()up()forward(b)left(90)forward(a)down()if r.randint(0, 1) == 0:color('tomato')else:color('wheat')circle(2)up()backward(a)right(90)backward(b)

写字

这里的颜色 文字 自己都可以改哈 (这个应该不用教吧哈哈)

t.color("dark red", "red")
t.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold"))

雪花

def drawsnow():t.ht()  t.pensize(2)  for i in range(200): t.pencolor("white")  t.pu()  t.setx(r.randint(-350, 350))  t.sety(r.randint(-100, 350))  t.pd()  dens = 6  snowsize = r.randint(1, 10)  for j in range(dens):  t.fd(int(snowsize))t.backward(int(snowsize))t.right(int(360 / dens))
drawsnow()
t.done()

完整代码文末名片自取哈~

圣诞树上加烟花

效果展示



代码展示

导入模块

import turtle as t
import random
import threading
import time
import tkinter as tk
import math
from math import cos, sin, atan, sqrt
import numpy as np

背景颜色

t.screensize(bg='black')

心函数

def loving_heart(r):l = 2 * rt.left(45)t.forward(l)t.circle(r, 180)t.right(90)t.circle(r, 180)t.forward(l)

星函数

def loving_star(n):for i in range(5):t.forward(n / 5)t.right(144)t.forward(n / 5)t.left(72)

树函数(递归)

def tree(d, s):if d <= 0:returnt.width(5)t.forward(s)tree(d - 1, s * .8)t.right(120)tree(d - 3, s * .5)t.right(120)tree(d - 3, s * .5)t.right(120)t.backward(s)  # 回退函数

画爱心

t.penup()
t.goto(0, 200)  # 设置起点位置
t.pendown()
t.pencolor('red')  # 设置画笔颜色
t.color('red')
t.begin_fill()  # 对图形进行填充
loving_heart(20)  # 执行画爱心函数
t.end_fill()

画树

n = 100
t.speed(0)
# t.Turtle().screen.delay(0)
t.right(225)
t.color("dark green")
t.backward(n * 4.8)
tree(15, n)
t.backward(n / 5)

绘制落叶

for i in range(100):a = 100 - 200 * random.random()b = 10 - 20 * random.random()t.speed(0)t.up()t.forward(b)t.left(90)t.forward(a)t.down()if random.randint(1, 2) == 1:t.color('tomato')else:t.color('wheat')t.circle(4)t.up()t.backward(a)t.right(90)t.backward(b)

绘制雪花

def drawsnow():  # 定义画雪花的方法t.speed(0)t.ht()  # 隐藏笔头,ht=hideturtlet.pensize(2)  # 定义笔头大小for i in range(160):  # 画多少雪花t.pencolor("white")  # 定义画笔颜色为白色,其实就是雪花为白色t.pu()  # 提笔,pu=penupt.setx(random.randint(-350, 350))  # 定义x坐标,随机从-350到350之间选择t.sety(random.randint(-100, 350))  # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始t.pd()  # 落笔,pd=pendowndens = 6  # 雪花瓣数设为6snowsize = random.randint(2, 10)  # 定义雪花大小for j in range(dens):  # 就是6,那就是画5次,也就是一个雪花五角星# t.forward(int(snowsize))  #int()取整数t.fd(int(snowsize))t.backward(int(snowsize))# t.bd(int(snowsize))  #注意没有bd=backward,但有fd=forward,小bugt.right(int(360 / dens))  # 转动角度

画五角星

for i in range(-200, 200, 20):t.penup()t.goto(i, 300)  # 设置起点位置t.pendown()t.pencolor('yellow')  # 设置画笔颜色t.color('yellow')t.begin_fill()  # 对图形进行填充loving_star(30)t.end_fill()t.right(0)for i in range(-150, 150, 20):t.penup()t.goto(i, 280)  # 设置起点位置t.pendown()t.pencolor('yellow')  # 设置画笔颜色t.color('yellow')t.begin_fill()  # 对图形进行填充loving_star(30)t.end_fill()t.right(0)for i in range(-100, 100, 20):t.penup()t.goto(i, 260)  # 设置起点位置t.pendown()t.pencolor('yellow')  # 设置画笔颜色t.color('yellow')t.begin_fill()  # 对图形进行填充loving_star(30)t.end_fill()t.right(0)for i in range(-50, 50, 20):t.penup()t.goto(i, 240)  # 设置起点位置t.pendown()t.pencolor('yellow')  # 设置画笔颜色t.color('yellow')t.begin_fill()  # 对图形进行填充loving_star(30)t.end_fill()t.right(0)for i in range(-20, 21, 20):t.penup()t.goto(i, 220)  # 设置起点位置t.pendown()t.pencolor('yellow')  # 设置画笔颜色t.color('yellow')t.begin_fill()  # 对图形进行填充loving_star(30)t.end_fill()t.right(0)

署名

t.color("white")  # 填充颜色
t.up()  # 抬笔
t.goto(170, -240)
t.down()  # 落笔
t.write("圣诞节快乐!", font=("Times New Roman", 18, "normal"))
t.ht()
# t.done()
t.hideturtle()
time.sleep(2)

烟火

WIDTH = 0
HEIGHT = 0
ORI = (0, 0)
COLOR = {'0': '#070920', 'navyblue': '#000080'}
FIRE = []def setParam():global WIDTHglobal HEIGHTglobal ORIglobal FIREWIDTH = t.window_width()HEIGHT = t.window_height()ORI = (0, -HEIGHT / 2)# goldFIRE.append(['white', '#FFD700', '#DAA520', '#BDB76B', ])# redFIRE.append(['white', '#F08080', '#A0522D', '#DC143C', ])# greenFIRE.append(['white', '#7FFF00', '#32CD32', '#006400', ])# cyanFIRE.append(['white', '#40E0D0', '#00FFFF', '#008080', ])# pinkFIRE.append(['white', '#FF69B4', '#FF1493', '#8B008B', ])# buffFIRE.append(['white', '#FFE4C4', '#FFDAB9', '#F0FFF0', ])# bluishFIRE.append(['white', '#ADD8E6', '#AFEEEE', '#00BFFF', ])def dist(a, b):  # 距离return ((a - b) * (a - b)).sum()def shoot():t.tracer(4)  # 在循环中,图形将一次画出4次循环的图t.pu()target = np.array((np.random.randint(-WIDTH // 6, WIDTH // 6),HEIGHT // 6))  # 都在同一高度angle = atan((target - ORI)[1] / (target - ORI)[0])if angle < 0:angle += math.pi  # 纠正负方向unit = np.array([cos(angle), sin(angle)])  # 方向向量print('angle: ', angle)print('target: ', target)# 镜头的顺序坐标seq = np.array([ORI, ORI - 55 * unit, ORI - 105 * unit, ORI - 155 * unit])t.speed(0)  # 瞬动while dist(seq[0], target) > 120:  # 如果没有到达爆炸中心seq = seq + 30 * unitt.goto(seq[1])t.pd()t.width(3)t.pencolor('white')t.goto(seq[0])t.pu()t.goto(seq[2])t.pd()t.width(3)t.pencolor('yellow')t.goto(seq[1])t.pu()# 清除发射上去的光束尾迹t.goto(seq[3])t.pd()t.width(10)t.pencolor(COLOR['0'])t.goto(seq[2])t.pu()time.sleep(0.05)# 发射上去的光束最后清除t.pd()t.width(10)t.goto(seq[0])t.pu()time.sleep(0.1)return target  # 就在爆炸中心def explode(center):number = np.random.randint(50, 100)  # 光束数colormode = np.random.randint(0, 5)unit = np.array([])  # 方向向量spd = []  # 每个光束的速度seq = []  # 每个波束的顺序坐标if colormode <= 1:coloridx = [np.random.randint(0, len(FIRE))]elif colormode == 2:coloridx = [np.random.randint(0, len(FIRE)),np.random.randint(0, len(FIRE))]elif colormode == 3:coloridx = [np.random.randint(0, len(FIRE)),np.random.randint(0, len(FIRE)),np.random.randint(0, len(FIRE))]elif colormode == 4:coloridx = []

不同大小烟花的步骤

steps = int((number ** 0.5) * 2)

初始化

    for i in range(number):angle = np.random.rand() * 2 * math.pi - math.piunit = np.append(unit, [cos(angle), sin(angle)]).reshape(-1, 2)seq = np.append(seq,[center,center - 10 * unit[i], center - 50 * unit[i],center - 90 * unit[i], center - 130 * unit[i],center - 135 * unit[i]])spd.append(int(15 + (np.random.rand() - 0.5) * 5))if colormode <= 1:coloridx.append(coloridx[0])elif colormode == 2:coloridx.append(coloridx[np.random.randint(0, 2)])elif colormode == 3:coloridx.append(coloridx[np.random.randint(0, 3)])elif colormode == 4:coloridx.append(np.random.randint(0, len(FIRE)))seq = seq.reshape([-1, 6, 2]).astype(np.int32)t.tracer(0x3f3f3f3f)  # 关闭自动更新,0x3f3f3f3f是一个大数字for stage in range(steps):for i in range(number):seq[i] = seq[i] + spd[i] * unit[i]seq[i][4] = centerfor cur in range(4):t.pu()t.goto(seq[i][cur + 1])t.pd()t.pencolor(FIRE[coloridx[i]][cur])t.width(4 - cur)t.goto(seq[i][cur])t.pu()if stage >= 5:  # 等待所有光束就位t.update()time.sleep(0.04)

清除每次绽放的烟花

    for cur in range(4, -1, -1):for i in range(number):t.pu()t.goto(seq[i][cur + 1])t.pd()t.pencolor(COLOR['0'])t.width(100)t.goto(seq[i][cur])t.pu()time.sleep(0.02)t.update()

写在最后

好了,今天的分享就到这里结束了,大家快去试试吧~
完整源码直接在下方名片自取~

圣诞节快到了,教大家用Python画一个简单的圣诞树和烟花,送给那个她相关推荐

  1. python写邮箱系统_教大家用Python写一个简单电子邮件发信器

    嘛~炎热的暑假大家都在家干些啥呢?up主本人每天就是摸鱼哒!为了让这个懒懒的up每天从床上早点爬起来,我可是立了不少flag呢~那就先不多说了,直接开始正文吧. 声明一下,本文内容为原创,如果引用其他 ...

  2. python自动填写小程序表单_新年好!教大家用Python写一个自动回复拜年信息的小程序!...

    原标题:新年好!教大家用Python写一个自动回复拜年信息的小程序! 过年期间,想必大家都收到很多拜年信息吧!有没有也被拜年短信(大部分是群发)搞得很焦虑?不回复似乎显得很没有礼貌,一一回复又累心劳神 ...

  3. 圣诞节到了,教大家用 Python 绘制几棵圣诞树~

    大家好,我是大飞 今天是圣诞节,先在这里祝大家圣诞节快乐~~,用英语来表达就是 Merry Christmas ~~, 为了贴合这个氛围,今天分享五种用 Python 绘制圣诞树的方法,从基础到高级, ...

  4. 国庆在家没事干?教大家用Python做一个任何视频都能看的软件, 当然,只能看正经的

    这不,国庆放假了,虽然说还在读书的同学们假期只有三天,但是咱上班的假期多鸭,哈哈~ 想当初,我大一的时候,国庆假期十五天,真爽啊~ 好了好了,话说回来,放这么久的假,三天也是假,这不是怕大家又不能出去 ...

  5. 教大家用python画皮卡丘的脸

    仅以此程序送给我的姐姐,嘻嘻~ 效果图 用到的库是python的标准库turtle. 话不多说,上程序! 1.导入turtle库 2.写皮卡丘各部位的函数 鼻子: 眼睛: 脸: 嘴巴: 配置画笔画布参 ...

  6. 玩过八音符游戏吗?今天教大家用python做一个八音符游戏

    先来看一下效果图: 需要用到的东西 Python3.6 cocos2d模块 pyaudio模块 以及一些Python自带的模块 cocos2d模块用于搭建游戏框架 pyaudio模块用于获得麦克风的声 ...

  7. 还在怕成语接龙你玩不过别人嘛!今天教大家用Python做一个成语接龙的小游戏!!!

    相关文件 关注小编,私信小编领取源码哟!!当然别忘了一键三连哟!! 开发工具 Python版本:3.6.4 相关模块: pyqt5模块: 以及一些python自带的模块. 环境搭建 安装Python并 ...

  8. 教大家用Python做一个任何视频都能看的软件

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 所以特地给大家献上如何用Python来开发一款看视频不需要VIP的软件~ 如果想发给朋友用的话,咱们在打包成exe可执行软件, ...

  9. 今天我教大家用js制作一个简单的计算器

    首先我们先打好框架 代码如图: 下面我们来看一下页面显示效果: 然后我们开始写js效果: 这样,我们一个简单的计算器就做好了,效果如图:

最新文章

  1. SpringBoot_日志-指定日志文件和日志Profile功能
  2. 秒杀多线程第三篇 原子操作 Interlocked系列函数
  3. 在windows上linux命令行,如何在Windows中通过Cygwin来使用Linux命令行
  4. 创建基于webpack打包的vue项目
  5. ubuntu1604安装tensorflow
  6. 阿里巴巴数据库分库分表的最佳实践
  7. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点
  8. pcm转换在线工具_律师必备的PDF在线转换工具,推荐5款,全免费!
  9. 1.4 多项式拟合实例
  10. SU插件|TopoShaper生成地形 免费下载及介绍(SketchUp草图大师必备)!
  11. 域名被抢注了怎么办?
  12. 计算个人所得税 (10 分)2019年个税新版规定:应纳税所得额为税前工资扣除五险一金,五险一金按工资22%比例计算。 个税起征点为5000元;
  13. 扩展spring之ext-spring-cache
  14. 2017风口之变:创业者的焦虑与希望
  15. bash下的特殊符号与通配符
  16. 移动端软件测试面试题及答案-2021年最新版
  17. 安超云生态 | 安超云与硅格半导体完成产品兼容互认证 携手打造协同生态
  18. 4G/5G协同无线网工程建设方案
  19. python学什么就业前景好_学python和人工智能就业前景怎么样?哪个薪资高?
  20. 基于ASP.NET二手商品拍卖网站

热门文章

  1. 北邮计算机学院9月推免,夏令营、预推免总结--计算机方向 (南科大、自动化所、上科大、北邮)...
  2. 西游记下界为妖的神仙坐骑
  3. 特斯拉FSD技术解析
  4. 量子密钥分发和BB84协议
  5. @高校学生开发者,为什么你一定要“上手”开源项目?
  6. 疫情时代下,普通人如何在不确定的世界活得好一点?
  7. 网络工程师必备(网线制作)
  8. sqlzoo第七关More JOIN operations
  9. cad画指定大小矩形
  10. 人事不干人事,这算个什么事?