圣诞节礼物

article/2025/10/4 19:34:56

        对于python小白的你,学了python没多久是不是就有了想自己动手做一个小程序的冲动呢?在这里我给大家分享一个我以前做的小程序——“圣诞节礼物”——希望能给大家带来灵感和帮助。

        话不多说,先看一下截图:

        这是一个小动画,还有背景音乐呢。

        成品我已上传到博客,可直接下载使用,名字为“圣诞节礼物”,文件名为“Merry Christmas_zhangyu_ILD"。但由于上传文件大小受限,所以使用前要先运行一下"untitled0.py”文件。

 

        以下是源代码(由于打的仓促,看起来不大好看(~_~)):

 

一、untitled0.py文件代码。因为现在的python的pygame库不支持直接导入视频播放功能,所以需要将视频按一定帧转化为图片使用。

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 22 15:07:26 2018@author: Hasee
"""
import cv2
import osvideos_src_path = r"..."  #视频地址
videos_save_path = r"..."  #图片保存地址
videos = os.listdir(videos_src_path)
videos = filter(lambda x: x.endswith('mp4'), videos)for each_video in videos:frame_count = 1each_video_name , _ = each_video.split('.')os.mkdir(videos_save_path + '/' + each_video_name)each_video_save_full_path = os.path.join(videos_save_path, each_video_name) + '/'each_video_full_path = os.path.join(videos_src_path, each_video)cap = cv2.VideoCapture(each_video_full_path)success = Truewhile success:success, frame = cap.read()print('Read a new frame: ', success)params = []params.append(1)if frame is not None and frame_count%3 == 0:cv2.imwrite(each_video_save_full_path + each_video_name + "%d.jpg" % frame_count, frame, params)frame_count = frame_count + 1cap.release()

 

二、绘制:

import pygame,sys,random
from pygame.transform import *#画雪花
def Draw_snow(start_pos):pointlist = [start_pos,[start_pos[0]+10,start_pos[1]],[start_pos[0]-10,start_pos[1]],start_pos,[start_pos[0],start_pos[1]+10],[start_pos[0],start_pos[1]-10],start_pos,[start_pos[0]+7,start_pos[1]+7],[start_pos[0]-7,start_pos[1]-7],start_pos,[start_pos[0]-7,start_pos[1]+7],[start_pos[0]+7,start_pos[1]-7]]pygame.draw.lines(screen,(255,255,255),False,pointlist,1)#定义暂停
def Pause():active = Truewhile active:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:active = Falseelif event.key == pygame.K_BACKSPACE:sys.exit()#指定图像文件名
background_image_filename = "image/Background.jpg"
cloth_image_filename = "image/Cloth.jpg"
icon_image_filename = "image/icon.jpg"
image_one_filename = "image/Santa1.jpg"
image_two_filename = "image/Santa2.jpg"
image_three_filename = "image/Santa3.jpg"
image_four_filename = "image/Santa4.jpg"
image_five_filename = "image/Santa5.jpg"
image_six_filename = "image/Santa6.jpg"
image_seven_filename = "image/Santa7.jpg"#指定音乐名
background_music_filename = "music/Feuerherz - Merry Christmas.mp3"
pygame.mixer.init()
pygame.mixer.music.load(background_music_filename)
pygame.mixer.music.play(-1,0)#输入文字
pygame.font.init()
font = pygame.font.SysFont("engravers",40)
text_surface = font.render("Merry Christmas",True,(255,0,0))font_two = pygame.font.SysFont("engravers",15)
wish_one = font_two.render("May you not be alone at Christmas",True,(255,0,0))
wish_two = font_two.render("My love and joy to you",True,(255,0,0))
wish_three = font_two.render("It is so happy to have your experience",True,(255,0,0))
wish_four = font_two.render("Wish you a Merry Christmas",True,(255,0,0))
wish_five = font_two.render("Wish you a Merry Christmas",True,(255,0,0))
text_surface_dict = {1:wish_one,2:wish_two,3:wish_three,4:wish_four,5:wish_five}#初始化init()及设置
pygame.init()#设置窗口图标
icon = pygame.image.load(icon_image_filename)
icon = scale(icon,(32,32))
pygame.display.set_icon(icon)#设置窗口大小
#Info = pygame.display.Info()
size = width, heigh = 600,400
#size = width, heigh = Info.current_w,Info.current_h
#screen = pygame.display.set_mode(size)
screen = pygame.display.set_mode(size,pygame.FULLSCREEN,32)#加载并转换图像
background_primary = pygame.image.load(background_image_filename).convert()#使用convert,blit的速度会快很多
cloth_primary = pygame.image.load(cloth_image_filename).convert()
image_one_primary = pygame.image.load(image_one_filename).convert_alpha()
image_two_primary = pygame.image.load(image_two_filename).convert_alpha()
image_three_primary = pygame.image.load(image_three_filename).convert_alpha()
image_four_primary = pygame.image.load(image_four_filename).convert_alpha()
image_five_primary = pygame.image.load(image_five_filename).convert_alpha()
image_six_primary = pygame.image.load(image_six_filename).convert_alpha()
image_seven_primary = pygame.image.load(image_seven_filename).convert_alpha()#缩放图片
background = scale(background_primary,size)
cloth = scale(cloth_primary,size)#设置Santa的刷新大小
update_size = (240,160)
image_one = scale(image_one_primary,update_size)
image_two = scale(image_two_primary,update_size)
image_three = scale(image_three_primary,update_size)
image_four = scale(image_four_primary,update_size)
image_five = scale(image_five_primary,update_size)
image_six = scale(image_six_primary,update_size)
image_seven = scale(image_seven_primary,update_size)#设置游戏名称
pygame.display.set_caption("Merry Christmas")#设置游戏运行速度
fclock = pygame.time.Clock()
fps = 10
speed = [10,10]
begin = 1
count = 1
snow = 0
snow_dis = []done = Falsewhile not done:for event in pygame.event.get():if event.type == pygame.QUIT:done = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:Pause()elif event.key == pygame.K_BACKSPACE:done = Trueif begin < 86:image_gather = {'1':image_one,'2':image_two,'3':image_three,'4':image_four,'5':image_five,'6':image_six,'0':image_seven}image_choice = image_gather[str(begin%7)]x = count*10-240x1 = count*10-240#Santa和画布移动if x < 0 :x = 0screen.blit(background,(0,0))pygame.display.update((0,0),(x,400))screen.blit(cloth,(x,0))pygame.display.update((x,0),(600-x,400))#x是rante图案左侧的位置screen.blit(image_choice,(x1,140))pygame.display.update((x1,140),update_size)else :done = Truebegin = begin + 1count = count + 1fclock.tick(fps)done = False#获得图片
file_num_list_p = [ i for i in range(1866) if i%3 == 0]
file_num_list_p.remove(0)
file_num_list = file_num_list_p
filename = []
for i in range(len(file_num_list)):file = "image/Wish/Wish" + str(file_num_list[i]) + ".jpg"filename.append(file)
obj = 0
begin = 0
while not done:for event in pygame.event.get():if event.type == pygame.QUIT:done = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:Pause()elif event.key == pygame.K_BACKSPACE:done = Truescreen.blit(background,(0,0))pygame.display.update((0,0),size)  if True:#screen.blit(background,(0,0))#pygame.display.update((0,0),size)  #画雪snow_number = random.randint(5,8)for i in range(abs(snow_number)):xlabel = random.randint(1,600)ylabel = 0Draw_snow([xlabel,ylabel])snow = snow+1snow_dis.append([xlabel,ylabel])snow = snow-1n = snowm = 0for unit in range(abs(n)):xl = snow_dis[unit][0]yl = snow_dis[unit][1] + 10Draw_snow([xl,yl])if yl == 300:m = m+1else :snow_dis[unit] = [xl,yl]if m > 0:for j in range(m-1):snow = snow-1del snow_dis[0]screen.blit(text_surface,(45,30))pygame.display.flip()#加载视频图片    if begin >= 10 and count <= len(file_num_list)-1:video = pygame.image.load(filename[obj]).convert_alpha()video_obj = scale(video,(240,120))screen.blit(video_obj,(200,260))#pygame.display.update((150,260),(100,50))pygame.display.update()count = count + 1else:if count-len(file_num_list) >= 30:screen.blit(text_surface_dict[1],(45,100))if count-len(file_num_list) >= 60:screen.blit(text_surface_dict[2],(45,160))if count-len(file_num_list) >= 90:screen.blit(text_surface_dict[3],(45,220))if count-len(file_num_list) >= 120 :screen.blit(text_surface_dict[4],(45,280))if count-len(file_num_list) >= 150:screen.blit(text_surface_dict[5],(45,340))pygame.display.flip()count = count + 1begin = begin + 1obj = obj+1fclock.tick(5)
pygame.quit()

这样就OK了。

(其中一些视频和音乐资料都在我上传“Merry Christmas_zhangyu_ILD"文件里。)

三、用pyinstaller打包成可执行程序即可。


http://chatgpt.dhexx.cn/article/8PFfg8S7.shtml

相关文章

2022圣诞代码合集(圣诞树+圣诞老人)

文章目录 前言使用方法圣诞树圣诞老人 前言 圣诞节里的喜悦&#xff0c;飘扬万里&#xff1b;圣诞树上的星星&#xff0c;璀璨耀眼&#xff1b;圣诞星空绽放的烟花&#xff0c;迎来吉祥&#xff1b;圣诞钟声奏响的旋律&#xff0c;传递欢乐&#xff1b;圣诞老人送给你的礼物&a…

圣诞老人来了嘛

Jingle bells jingle bells jingle all the way... 随着歌声的临近&#xff0c;一年一度的圣诞节也如期而至的到来了 传说啊&#xff0c;圣诞老人为奥丁神后裔。也传说称圣诞老人由尼古拉而来&#xff0c;所以圣诞老人也称St.Nicholas。据说他原是小亚细亚每拉城的主教&#xf…

算法基础部分6-贪心算法

算法部分 基础6 一、贪心算法简述 贪心算法的每一步行动总是按照某种指标选取最优的操作来进行该指标&#xff0c;只看眼前并不考虑以后可能造成的影响。证明方法通过替换法和数学归纳法实现。 二、贪心算法例子 1. 圣诞老人的礼物 问题描述&#xff1a;圣诞节来临了&#x…

python外包_python怎么找外包

很多程序员兄弟们工资不高&#xff0c;但时间还是比较充足的&#xff0c;剩下的时间想多搞点外快&#xff0c;毕竟要养家糊口。我来讲讲怎么做可以一个月轻松多赚1万多元的外快。 一、接项目 是程序员都想过接私活&#xff0c;但真正去做了的寥寥无几。可能的原因&#xff1a;…

国外最流行的几个外包接活网站 简要介绍

国外主要外包接活站点&#xff1a; No.1 Freelancer.com &#xff08;旧称GAF – GetAFreelancer&#xff09;: 国外访问人数最多&#xff0c;更新速度最快的外包平台。详细介绍 No.2 Elance : 国外比较成熟的三大业务外包平台之一&#xff0c;外包项目类型以软件和网站为主。当…

PHP学习笔记

学习笔记 PHP学习笔记部署遇到的问题一二 php在win10 64位下执行curl_init()方法报错的bugthinkphp登陆失效的问题不同的win系统上无法使用curl的问题thinkphp下调用python脚本先要有反应提示python不是内部命令以上处理后还提示no file /directory 关于json里为数组时出现的问…

PHP实现支付宝支付

支付宝付款,开发上比起微信支付要简单很多,今天就以支付宝手机网站支付为例,简单讲一下实现方法: 前期准备,当然就不多说了,当你想开发使用支付宝支付,必然需要在支付宝开放品台注册认证并且创建好应用并且具备手机网站支付功能!不明白可以查看支付宝官方文档(https://docs.op…

外包网站建设需要注意什么

外包网站建设需要注意什么 对于如今许多的公司来说&#xff0c;拥有一个属于公司的网站是非常必要的。但是并不是所有的公司都会拥有专业的人员来进行网站的建设&#xff0c;所以网站建设外包则成为了诸多公司的首选。但是外包网站建设都需要哪些问题呢&#xff1f; 外包网站…

苏州外包php,【苏州IT外包经验】Ubuntu 17.10系统下配置PHP+Apache+Mysql

发布于 2017年11月16日 星期四 01:15 点击数&#xff1a;20883 本文为Ubuntu 17.10系统下配置PHP7.1Apache2.4Mysql5.7 一、Apache2 安装apache sudo apt-get apache2 编辑apache主配置文件/etc/apache2/apache2.conf&#xff0c;修改KeepAlive设置 KeepAlive Off Apache默认的…

Linux任务之自动发邮件

Linux任务之自动发邮件 文章目录 Linux任务之自动发邮件1、虚拟机Centos7环境&#xff08;1&#xff09;先设置自己的邮箱&#xff0c;我这用qq邮箱&#xff1a;&#xff08;2&#xff09;获取到密码后&#xff0c;我们要在Linux上配置邮件文件&#xff1a;&#xff08;3&#…

Mac 定时自动发送邮件

文章目录 WhyHow1. 在automator中创建application2. 创建calender 自动定时发送email3. 自行测试 Refer Why 工作中&#xff0c;有时需要发送固定格式的email&#xff0c;每次人工做&#xff0c;比较繁琐&#xff0c;本篇博客描述了一种可以自动定时发送email的方式。 下面例…

如何利用 Python 自动发邮件,打工人福音

在工作中&#xff0c;每天或者每周结束的时候我们都会发送相应的日报或者周报给上级领导&#xff0c;来汇报你做了那些工作&#xff0c;可是汇报工作内容的时候我们始终都是打开邮箱、写入内容&#xff0c;发送和抄送给固定的人&#xff0c;那么这么繁琐并且重复的一件事&#…

用Excel和OutLook实现自动批量发邮件

转自&#xff1a;https://zhuanlan.zhihu.com/p/25283201 作者&#xff1a;闲者秋山 闲者秋山 闲者秋山 相信不少人的工作中都有这样的情况&#xff0c;需要群发通知邮件的情况。 &#xff08;比如财务付完款&#xff0c;要通知供应商&#xff0c;房东之类的&#xff09; 但如…

JAVA实现自动发送邮件

JAVA实现发送邮件 做项目时用到的小工具 做个备份&#xff08; tips: 需要导入javax.mail 我使用了maven导入X <!-- JavaMail相关依赖 --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><ver…

自动发送

自动发送 主要用于普通邮箱&#xff08;个人邮箱/企业邮箱&#xff09;群发&#xff0c;用户使用“群发单显”或“精准分发”生成邮件在“待发邮件”邮件夹中&#xff0c;开启自动发送&#xff0c;可按照设定的时间和速度进行邮件的自动发送。 最新功能&#xff08;版本&#x…

python---自动群发邮件

生活中我们经常发送邮件&#xff0c;那么我们能不能用Python写一个自动发送邮件的功能呢&#xff1f;答案是肯定的&#xff01;&#xff01;&#xff01; 开始实现功能之前我们需要开启我们邮箱的 IMAP/SMTP功能&#xff0c;我们先了解一下什么是IMAP/SMTP。 SMTP 的全称是“…

Python之邮箱自动发件

在使用python给好友发送邮件时&#xff0c;首先需要下载python中在对模块&#xff0c;以及打开邮箱IMAP/SMTP服务。接下来一步一步介绍读者如何来使用并实现发件。 1.下载python中在对模块 首先键盘点击winR键&#xff0c;输入pip search smtplib便可以看到smtplib模块下含有…

使用Python自动发送邮件

发送普通邮件 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;是简单传输协议。 python中对SMTP进行了简单的封装&#xff0c;可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下&#xff1a; email模块&#xff1a;负责构建邮件 smtplib模块&am…

通过SMTP协议自动发送邮件

通过SMTP协议实现训练结束自动发送邮件 为了更安心地摸鱼&#xff0c;想让大模型训练完之后自己发邮件给我。 开启SMTP服务与取得授权码 1.打开设置->账户->打开服务 然后会获得授权码 代码示例 #!/usr/bin/python\# -*- coding: utf-8 -*-import smtplib from e…

Java实现邮件自动发送

有时候我们会遇到自动发送邮件通知、邮件验证码、节假日祝福邮件发送、邮件自动发送广告功能&#xff0c;今天我们就谈谈邮件自动发送是怎么实现的。案例使用Java语言来编写&#xff0c;使用springBoot来搭建项目。 步骤一&#xff1a;添加邮件依赖&#xff1a;spring-boot-st…