中秋节的特别礼物—-属于程序员的专有浪漫

在这里插入图片描述

前言: 马上不就到中秋节了嘛,我看到群里很多小伙伴们在纠结如何去送出属于自己的专属浪漫,也有小伙伴私信我,说想让我出一期中秋节的表白代码或者祝福程序!好的安排~
今天就和大家分享一下我珍藏多年的中秋表白祝福神器,希望大家都可以给最爱的人送上最美的祝福💓💓💓~

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅作者简介:Python领域优质创作者🏆 CSDN年度博客之星🏆 阿里云专家博主🏆 华为云享专家🏆 51CTO专家博主🏆
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉一万次悲伤,依然会有Dream,我一直在最温暖的地方等你~🌈🌈🌈
🌟🌟🌟✨✨✨ 交流合作|粉丝福利|学习资料|抱团学习|欢迎+v:18300396393

一、背景故事

1.中秋节介绍

农历八月十五是我国传统的中秋佳节,是各族人民一年一度的重要节日。
中秋之夜,月亮最亮、最圆,月色也最美好。人们望着玉盘般的明月,自然会联想到家人的团聚,独在异乡的游子也期望借助明镜般的皓月寄托自己对故乡亲人的思念之情。因而,人们往往又把中秋节叫做“团圆节”。
在这里插入图片描述

在这个重要的日子,我们当然要把最好的祝福送给我们最好的朋友,家人和爱人们!那有什么属于我们程序员的特别礼物呐,当然有!接下来我就把2我珍藏多年的祝福神器分享给大家,希望大家都可以给最爱的人送上最美的祝福~

但愿人长久,千里共婵娟。

2.朋友们的请求

马上不就到中秋节了嘛,我看到朋友圈里很多小伙伴们在纠结如何去送出属于自己的专属浪漫,也有小伙伴私信我,说想让我出一期中秋节的表白代码或者祝福程序!
在这里插入图片描述

好的安排!于是我连肝了两个晚上,重新拾起了自己之前的知识,采用turtle库以及pygame库 为大家带来了属于我们程序员专有的浪漫!
话不多说,先给大家看成果:

二、成品展示

1.月亮山水画

首先,我们打开程序,映入眼帘的是一幅正在缓缓展开的画卷
在这里插入图片描述

伴随着轻快优美的音乐,一下子就把我们带入了中秋快乐的场景中!
在这里插入图片描述

画面上展示的内容你也可以自己修改,在下文中会教大家怎样求修改哦~

2.浪漫弹窗

在这幅画被完全展开后,就会迅速在她的桌面上展开99个小的弹窗:
在这里插入图片描述

当这些弹窗充满她的桌面,我相信没有一个女生不被你感动,亲测有效,如果她也对你感动的痛哭流涕记得回来给我点赞+收藏嗷~

在这里插入图片描述
接下来,我教大家如何一一去实现!

三、具体实现

1.环境配置及库要求

在这个工程文件中,我们使用的Python语言去实现,一般来讲我们使用Python3.7就可以基本完全可以了!不太懂的同学可以看这篇文章:手把手教你配置Python运行环境
同时我们需要安装第三方模块,直接在终端输入命令就可以安装了:

pip install 库的名称

在这里我们使用到的是:turtle time pygame random tkinter threading

import turtle
import time
import pygame
import random
import tkinter as tk
import threading

其中最主要的便是海龟画图海龟画图全解–值得你一看! (这篇文章写了很久了,是一些海龟画图最基础的操作,不太了解的小伙伴们可以拿这篇文章来快速入门海龟画图!)

画笔状态:

  1. pendown( ) 放下画笔
  2. penup( ) 提起画笔
  3. pensize(width) 设置画笔线条的粗细为指定大小
  4. pencolor( ) 设置画笔的颜色
  5. color( a,b) 同时设置画笔和填充颜色
  6. begin_fill( ) 填充图形前,调用该方法
  7. end_fill( ) 填充图形结束
  8. filling( ) 返回填充的状态,True为填充。False为未填充
  9. clear( ) 清空当前窗口,但不改变当前画笔的位置
  10. reset( ) 清空当前窗口,并重置位置等状态为默认值
  11. screensize( ) 设置画布窗口的宽度、高度和背景颜色
  12. hideturtle( ) 隐藏画笔的turtle形状
  13. showturtle( ) 显示画笔的turtle形状
  14. isvisible( ) 如果turtle可见,则返回True
  15. write(str,font=None) 输出font字体的字符串

画笔运动:

  1. fd(distance) 沿着当前方向前进指定距离
  2. bk(distance) 沿着当前相反方向后退指定距离
  3. right(angle) 向右旋转angle角度
  4. left(angle) 向左旋转angle角度
  5. goto(x,y) 移动到绝对坐标(x,y)处
  6. setx(x) 修改画笔的横坐标到x,纵坐标不变
  7. sety(y) 修改画笔的纵坐标到y,横坐标不变
  8. seth(angle) 设置当前朝向为angle角度
  9. home( ) 设置当前画笔位置为原点,朝向东
  10. circle(radius,e) 绘制一个指定半径r和角度e的圆或弧形
  11. dot(r,color) 绘制一个指定半径r和颜色color的圆点
  12. undo( ) 撤销画笔的最后一步动作
  13. speed( ) 设置画笔的绘制速度,参数为0~10之间

2.绘制月亮

我们通过控制画笔的上下移动来绘制月亮:

  • turtle.penup() :画笔拿起
  • turtle.pendown() : 画笔放下
  • turtle.fillcolor(‘yellow’) : 画笔的颜色
  • turtle.begin_fill():画笔颜色填充

在这里插入图片描述

def drawMoon():  # 绘制月亮
    turtle.penup()  # 画笔拿起
    turtle.goto(-150, 0)
    turtle.fillcolor('yellow')  # 圆月的颜色
    turtle.pendown()  # 画笔放下
    turtle.begin_fill()
    turtle.circle(112)
    turtle.end_fill()  # turtle.begin_fill()	到turtle.end_fill() 颜色填充

3.绘制云朵

我们通过控制画笔的上下移动来绘制云朵:,方法参考上文:

  • turtle.penup() :画笔拿起
  • turtle.pendown() : 画笔放下
  • turtle.fillcolor(‘yellow’) : 画笔的颜色
  • turtle.begin_fill():画笔颜色填充
    在这里插入图片描述
def drawCloud():  # 绘制云朵
    turtle.penup()
    turtle.goto(-500, 200)
    turtle.fillcolor((245, 245, 245))
    turtle.pencolor((255, 255, 255))
    turtle.pensize(5)
    turtle.pendown()
    turtle.forward(250)

    def cloud(mode='right'):
        for i in range(90):
            turtle.pensize((i + 1) * 0.2 + 5)
            turtle.right(1) if mode == 'right' else turtle.left(1)
            turtle.forward(0.5)
        for i in range(90):
            turtle.pensize(90 * 0.2 + 5 - 0.2 * (i + 1))
            turtle.right(1) if mode == 'right' else turtle.left(1)
            turtle.forward(0.5)
    cloud()
    turtle.forward(100)
    cloud('left')
    turtle.forward(600)

4.绘制山川

这里我们控制画笔来绘制山川,由于我们绘制的山川只选择了两次起起落落,我们需要分别两次对其进行颜色填充,填充的个颜色是相同的,所以重叠部分我们不需要再做进一步的分析:

在这里插入图片描述

def drawMountain():  # 绘制山川
    turtle.penup()
    turtle.goto(-500, -250)
    turtle.pensize(4)
    turtle.fillcolor((36, 36, 36))
    turtle.pencolor((31, 28, 24))
    turtle.pendown()
    turtle.begin_fill()
    turtle.left(20)
    turtle.forward(400)
    turtle.right(45)
    turtle.forward(200)
    turtle.left(60)
    turtle.forward(300)
    turtle.right(70)
    turtle.forward(300)
    turtle.goto(500, -300)
    turtle.goto(-500, -300)
    turtle.end_fill()

5.添加背景音乐

这里使用Pygame模块中的mixer来控制音乐的播放,需要导入本地音乐路径,然后就可以啦!这样会使整个的绘制过程更加浪漫有趣!
pygame.mixer.music.play()

  1. 功能:开始播放音乐流

  2. 属性:play(loops=0, start=0.0, fade_ms = 0)

参数:

loops (int) – (可选) 重复音乐的次数。设置为5将播放五次音乐。设为-1可使音乐不确定地重复。
start (float) – (可选) 音乐开始播放的位置。起始位置取决于播放的音乐格式:MP3和OGG使用该位置为时间(秒)。对于MOD music,它是模式顺序号。如果无法设置起始位置,则传递起始位置将引发NotImplementedError。
fade_ms (int) – (可选) 使音乐在给定时间内开始以0音量播放并淡入到最大音量。片段可能在淡入完成之前结束。在PyGame2.0中添加。

def initTurtle():
    pygame.mixer.init()
    pygame.mixer.music.load('寂寞烟火.mp3')
    pygame.mixer.music.play(-1, 20.0)
    turtle.hideturtle()
    turtle.setup(1000, 600)
    turtle.title('中秋祝福')
    turtle.colormode(255)
    turtle.bgcolor('blue')
    turtle.speed(1)

6.写入祝福话语

使用turtle中的write 写入祝福话语
turtle.write(‘宝贝,中秋节快乐!’, align=“center”, font=(“STXingkai”, 50, “bold”))
在这里插入图片描述

def writezhufu():
    turtle.penup()
    turtle.goto(400, -150)
    turtle.pencolor((250, 240, 230))
    # 诗句
    potery = ['\n但\n愿\n人\n长\n久\n','\n千\n里\n共\n婵\n娟\n']
    # 诗句位置(可自行设计添加), 最好2/4句五言诗
    coordinates = [(300, -150), (200, -150), (100, -150)]
    for i, p in enumerate(potery):
        turtle.write(p, align="center", font=("STXingkai", 50, "bold"))
        if (i + 1) != len(potery):
            time.sleep(2)
            turtle.goto(coordinates[i])
    # 祝福话语
    turtle.penup()
    turtle.hideturtle()    #隐藏箭头显示
    turtle.goto(-110, -100)
    turtle.color('red')
    turtle.write('宝贝,中秋节快乐!', align="center", font=("STXingkai", 50, "bold"))

7.弹窗部分

这里使用了tkinter模块来进行小弹窗的绘制,最后是用for循环来实现弹窗的重复性和随机性,这也是我觉得最大的创新之处吧!惊喜重重,满满心意与浪漫,哈哈哈。
在这里插入图片描述

def dow():
    window = tk.Tk()
    width = window.winfo_screenwidth()
    height = window.winfo_screenheight()
    a = random.randrange(0, width)
    b = random.randrange(0, height)
    window.title('中秋快乐')
    window.geometry("200x50" + "+" + str(a) + "+" + str(b))
    tk.Label(window,
             text='亲爱的中秋快乐',  # 标签的文字
             bg='red',  # 背景颜色
             font=('..', 17),  # 字体和字体大小
             width=18, height=2  # 标签长宽
             ).pack()  # 固定窗口位置
    window.mainloop()

8.启动入口

最后写一个main函数入口,来进行程序的启动:if __name__ == '__main__': main()
for i in range(100): 需要的弹框数量 这里可以根据需求自己来确定

def main():
    initTurtle()
    drawMoon()  # 绘制月亮
    drawCloud()  # 绘制云朵
    drawMountain()  # 绘制山
    writezhufu()  # 写诗
    time.sleep(2)
    threads = []
    for i in range(100):  # 需要的弹框数量
        t = threading.Thread(target=dow)
        threads.append(t)
        time.sleep(0.01)
        threads[i].start()


if __name__ == '__main__':
    main()

四、源码分享

# @Time : 2022/8/23 10:38
# @Author : 是Dream呀
# @File : 中秋节.py
import turtle
import time
import pygame
import random
import tkinter as tk
import threading

def drawMoon():  # 绘制月亮
    turtle.penup()  # 画笔拿起
    turtle.goto(-150, 0)
    turtle.fillcolor('yellow')  # 圆月的颜色
    turtle.pendown()  # 画笔放下
    turtle.begin_fill()
    turtle.circle(112)
    turtle.end_fill()  # turtle.begin_fill()	到turtle.end_fill() 颜色填充


def drawCloud():  # 绘制云朵
    turtle.penup()
    turtle.goto(-500, 200)
    turtle.fillcolor((245, 245, 245))
    turtle.pencolor((255, 255, 255))
    turtle.pensize(5)
    turtle.pendown()
    turtle.forward(250)

    def cloud(mode='right'):
        for i in range(90):
            turtle.pensize((i + 1) * 0.2 + 5)
            turtle.right(1) if mode == 'right' else turtle.left(1)
            turtle.forward(0.5)
        for i in range(90):
            turtle.pensize(90 * 0.2 + 5 - 0.2 * (i + 1))
            turtle.right(1) if mode == 'right' else turtle.left(1)
            turtle.forward(0.5)

    cloud()
    turtle.forward(100)
    cloud('left')
    turtle.forward(600)


def drawMountain():  # 绘制山川
    turtle.penup()
    turtle.goto(-500, -250)
    turtle.pensize(4)
    turtle.fillcolor((36, 36, 36))
    turtle.pencolor((31, 28, 24))
    turtle.pendown()
    turtle.begin_fill()
    turtle.left(20)
    turtle.forward(400)
    turtle.right(45)
    turtle.forward(200)
    turtle.left(60)
    turtle.forward(300)
    turtle.right(70)
    turtle.forward(300)
    turtle.goto(500, -300)
    turtle.goto(-500, -300)
    turtle.end_fill()


def initTurtle():
    pygame.mixer.init()
    pygame.mixer.music.load('寂寞烟火.mp3')
    pygame.mixer.music.play(-1, 20.0)
    turtle.hideturtle()
    turtle.setup(1000, 600)
    turtle.title('中秋祝福')
    turtle.colormode(255)
    turtle.bgcolor('blue')
    turtle.speed(1)


def writezhufu():
    turtle.penup()
    turtle.goto(400, -150)
    turtle.pencolor((250, 240, 230))
    # 诗句
    potery = ['\n但\n愿\n人\n长\n久\n','\n千\n里\n共\n婵\n娟\n']
    # 诗句位置(可自行设计添加), 最好2/4句五言诗
    coordinates = [(300, -150), (200, -150), (100, -150)]
    for i, p in enumerate(potery):
        turtle.write(p, align="center", font=("STXingkai", 50, "bold"))
        if (i + 1) != len(potery):
            time.sleep(2)
            turtle.goto(coordinates[i])
    # 祝福话语
    turtle.penup()
    turtle.hideturtle()    #隐藏箭头显示
    turtle.goto(-110, -100)
    turtle.color('red')
    turtle.write('宝贝,中秋节快乐!', align="center", font=("STXingkai", 50, "bold"))

# 弹窗设置
def dow():
    window = tk.Tk()
    width = window.winfo_screenwidth()
    height = window.winfo_screenheight()
    a = random.randrange(0, width)
    b = random.randrange(0, height)
    window.title('中秋快乐')
    window.geometry("200x50" + "+" + str(a) + "+" + str(b))
    tk.Label(window,
             text='亲爱的中秋快乐',  # 标签的文字
             bg='red',  # 背景颜色
             font=('..', 17),  # 字体和字体大小
             width=18, height=2  # 标签长宽
             ).pack()  # 固定窗口位置
    window.mainloop()

def main():
    initTurtle()
    drawMoon()  # 绘制月亮
    drawCloud()  # 绘制云朵
    drawMountain()  # 绘制山
    writezhufu()  # 写诗
    time.sleep(2)
    threads = []
    for i in range(100):  # 需要的弹框数量
        t = threading.Thread(target=dow)
        threads.append(t)
        time.sleep(0.01)
        threads[i].start()


if __name__ == '__main__':
    main()

五、原工程文件分享

最后想获取本项目的所有文件源码以及配置环境,或者实在是对Python不懂,有问题的的同学欢迎在最下方添加我的个人VX(18300396393),获取原工程文件以及一键运行程序,同时想要学习Python的话:
欢迎订阅本专栏: 零基础学Python 系列课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘

美好祝愿:

何处楼高,想清光先得。

阴晴圆缺白玉盘,聚散离合盼团圆。月明思念亲人切,朋友之义碧云天。归心似箭南归雁,合家团聚乐无边。中秋佳节传祝愿,福临万家俱欢颜。秋风送来清爽,秋雨浇灌希望,秋思充满梦想,秋情收获美满,中秋到来,花好月圆,美梦缠绵,天涯情牵,有情人终成眷属,祝中秋快乐,幸福美满。
祝福每个人中秋节快乐!

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述
⬇️⬇️ ⬇️ 商务合作|交流学习|粉丝福利|Python全套资料⬇️ ⬇️ ⬇️ 欢迎联系~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月6日 上午9:48
下一篇 2023年3月6日 上午9:49

相关推荐