Python实现新年愿望代码雨效果
作者:Carl_奕然 发布时间:2022-08-02 00:52:35
1、引言
小丝:鱼哥,2023年了, 你有啥愿望啊?
小鱼:这, 我可以选择不告诉你吗?
小丝:可以选择不告诉我,但是,你自己憋着,不难受吗?
小鱼:… 我可以告诉别人吗?
小丝:… 还有谁能像我,认真听你的愿望。
小鱼:这2023年刚开始,你这是来给我添堵,故意的??
小丝:既然你不想告诉我,那我也不勉强了,毕竟…
小鱼:你说话,说一半,留一半,不憋得难受吗?
小丝:习惯了, 反正, 我不难受,难受的就是别人!
小鱼:你可以啊, 长大了, 翅膀硬了。
小丝:别这么说, 毕竟, 我还有求于你。
小鱼:我可以拒绝吗?
小丝:我可以说拒绝无效吗?
小鱼:…
小丝:我在某音看到一个特效,蛮好的, 想让你帮我搞一下。
小鱼:深呼吸…深呼吸… 好吧, 你说吧,啥特效。
小丝:为了看的更直观, 我再放个截个图。
小鱼:嗯,这个,我知道的。雨一直下,气氛不再融洽,在同个屋檐下 你渐渐…
小丝:停,停,停,打住。你咋还唱上了。
小鱼:哎唛呀… 入景了。
小丝:可别正没用的, 咱们要干正事了。
小鱼:好好好, 那咱,就趁着新年, 许个愿望吧。
小丝:你瞅瞅, 这立flag,还得我鱼哥。
2、代码实战
2.1 模块介绍
2.1.1 Pygame 介绍
在这里,我们要用到的第三方库是 Pygame,
我相信,关于pygame,有些同学还是很陌生的,这里,我也是简单的唠叨几句:
Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发;
Pygame 是一个高可移植性的模块可以支持多个操作系统,是跨平台Python模块,为游戏而设计的库;
Pygame是免费的库;
2.1.2 Pygame的display介绍
display模块常用函数介绍:
pygame.display.init():初始化display 模块;
pygame.display.quit():结束display 模块;
pygame.display.get_init():如果display已经初始化,则返回True;
pygame.display.set_mode():初始化一个准备显示的窗口;
pygame.display.get_surface():获取当前显示的Surface对象;
pygame.display.flip():更新整个待显示的 Surface 对象到屏幕上;
pygame.display.list_modes():获取全屏模式下可使用的分辨率;
2.1.3 Pygame的event介绍
event模块常用函数介绍:
pygame.event.pump() : 让 Pygame 内部自动处理事件 ;
pygame.event.get() : 从队列中获取事件;
pygame.event.poll() : 从队列中获取一个事件 ;
pygame.event.wait() — 等待并从队列中获取一个事件;
pygame.event.peek() : 检测某类型事件是否在队列中 ;
pygame.event.clear() :从队列中删除所有的事件 ;
pygame.event.event_name() : 通过 id 获得该事件的字符串名字;
pygame.event.set_blocked() : 控制哪些事件禁止进入队列 ;
pygame.event.set_allowed(): 控制哪些事件允许进入队列 ;
pygame.event.get_blocked() :检测某一类型的事件是否被禁止进入队列;
pygame.event.set_grab() : 控制输入设备与其他应用程序的共享 ;
pygame.event.get_grab() : 检测程序是否共享输入设备 ;
pygame.event.post() :放置一个新的事件到队列中;
pygame.event.Event(): 创建一个新的事件对象;
2.1.4 Pygame的font介绍
font模块常用函数介绍:
pygame.font.init() : 初始化字体模块;
pygame.font.quit(): 还原字体模块;
pygame.font.get_init() : 检查字体模块是否被初始化;
pygame.font.get_default_font() : 获得默认字体的文件名;
pygame.font.get_fonts() : 获取所有可使用的字体;
pygame.font.match_font() : 在系统中搜索一种特殊的字体;
pygame.font.SysFont() :从系统字体库创建一个 Font 对象 类;
2.2 代码示例
了解了Pygame的模块的基本使用方法, 我们就来代码实现。
代码示例:
# -*- coding:utf-8 -*-
# @Time : 2023-01-01
# @Author : Carl_DJ
'''
实现功能:
新年愿望代码雨
'''
import random
import pygame
# 设置窗口的尺寸
Windows_width = 1000
Windows_heigh = 800
#创建代码雨窗口
pygame.init()
winsur = pygame.display.set_mode((Windows_width,Windows_heigh))
# 设置文字间距
font_px = 18
#设置文字大小
font_a = pygame.font.SysFont('',26)
bg_suface = pygame.Surface((Windows_width,Windows_heigh),flags = pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0,0,0,26))
#填充
winsur.fill((0,0,0))
# 设置代码雨的内容
message = '2023 HappyNewYear! 2023HappyNewYear! 2023 HappyNewYear!'
#设置字体及颜色
texts = [font_a.render(message[i],True,(10,255,255)) for i in range(40)]
# 设置屏幕显示比例,防止字幕超过屏幕
colum = int(Windows_width/ font_px)
drops = [0 for i in range (colum)]
# 让字幕一直显示,避免一闪而过的尴尬
while True:
#从队列中获取
for event in pygame.event.get():
#添加判断,超过则退出
if event.type == pygame.QUIT:
exit()
elif event.type == pygame.KEYDOWN:
change = pygame.key.get_pressed()
if change[30]:
exit()
# 设置下落速度为50ms
pygame.time.delay(50)
#重新编译图像
winsur.blit(bg_suface,(0,0))
for i in range(len(drops)):
text = random.choice(texts)
#重排每个坐标点
winsur.blit(text,(i * font_px,drops[i] * font_px))
drops[i] += 1
#禁止行数超过屏幕的高
if drops[i] * 10 > Windows_heigh or random.random() > 0.95:
drops[i] = 0
pygame.display.flip()
执行效果
我再上一个截图,让你看的更直观
3、总结
看到这里, 今天的分享就要结束了。
今天主要介绍的是Pygame库的font、display、event等常用模块。
现在再回顾功能的实现逻辑, 其实也不算太难嘛。
你看, 也就 70多行代码呢。
2023,你肯定行的。
来源:https://blog.csdn.net/wuyoudeyuer/article/details/128580616


猜你喜欢
- python列表元素去重后如何保持原来的顺序不变原列表:list1 = [1,2,1,4,9,3,5,2,6,7,3,1,6,8,4,0]去
- 这里先解释一下几个概念 - 位置参数:按位置设置的参数,隐式用元组保存对应形参.平时我们用的大多数是按位置传参.比如有函数def func(
- 为什么要修改镜像源?一般使用python安装库,会用到pip install xxx 指令或者conda install xxx指令,因为p
- 简介EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS 指定一个
- 本文实例总结了PHP常用字符串操作函数。分享给大家供大家参考,具体如下:/*常用的字符串输出函数** echo() 输出字符串* print
- 本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- 一、前言预处理建议仔细看完本文章之后在进行操作,避免失误,本环境可以用于生产环境,有利于生产环境python之间的环境隔离,互相不会产生环境
- 一,问题因为我想在我的服务器上部署两个vue项目,但是vue打包后默认的项目名是dist,这样子就跟我上一个vue项目冲突了。因此查了一下资
- matplotlib官网matplotlib库默认英文字体添加黑体(‘SimHei')为绘图字体代码:plt.rcParams[
- 一、闭包闭包的形成条件:1.函数嵌套。2.内部函数使用了外部函数的变量或者参数。3.外部函数返回了使用外 部变量的内部函数。二、一个简单的例
- 前言 其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有很多这种解释了,但是要么就
- 例如<div id="info"><span><span class='pl
- 之前在网上看到有人提问,如何在页面上同步显示服务器的时间,其实实现方法有几种,可能 一般人立马就想到可以使用Ajax每隔一秒去请求服务器,然
- 异常捕捉:try: XXXXX1 raise Exception(“xxxxx2”) except (Exception1,Excepti
- Django的权限系统很简单,它可以赋予users或groups中的users以权限。Django admin后台就使用了该权限系统,不过也
- (一)前言这几天供应商在测试环境上使用MYSQL数据库做开发时遇到一个SQL性能问题,即在他开发环境本地跑SQL速度很快就一两秒时间,但是同
- 如何在Access数据库中立即得到所插入记录的自动编号?首先,我们要保证获得记录集的方式支持bookmark属性,如在1、3插入一条有自动编
- 1,登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如
- 本文总结分析了Python装饰器简单用法。分享给大家供大家参考,具体如下:装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可
- 在学校修管理学的时候,有讲过一个管理激励的理论。管理激励是基于行为和认知科学的研究,来发现人们的需要、动机、目标和行为四者之间关系的核心理论