我一个朋友在某音看到了这玩意儿。它非得让我也搞一个。
反正也无聊就简单写了一个
简单设计:
1.黑色背景,绿色字体,内容为随机符号-----pygame和random
2.下落,显示,刷新
直接上代码:
'''
python 3.9
pycharm.pro.2021.3
'''
import random
import pygame
# 初始化参数设计
win_width = 1000
win_height = 800
font_px = 15
# 创建窗口及文本设计
pygame.init()
winsur = pygame.display.set_mode((win_width, win_height))
font = pygame.font.SysFont('', 23)
bg_suface = pygame.Surface((win_width, win_height), flags=pygame.SRCALPHA)
pygame.Surface.convert(bg_suface)
bg_suface.fill(pygame.Color(0, 0, 0, 28))
winsur.fill((0, 0, 0))
# 文本内容
letter = '1234567890!@#$%^&*qwertyuiopasdfghjklzxcvbnm'
texts = [font.render(letter[i], True, (0, 255, 0)) for i in range(44)]
# 显示设计
column = int(win_width / font_px)
drops = [0 for i in range(column)]
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[32]:
exit()
# 延时30
pygame.time.delay(30)
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 > win_height or random.random() > 0.95:
drops[i] = 0
#
pygame.display.flip()
效果图:
代码中使用了一些pygame里面的模块,大家可以自学( http://www.pygame.org )
这里给大家列出来了pygame里的一些模块以及一些方法
pygame.cdrom 访问光驱
pygame.cursors 加载光标
pygame.display 访问显示设备
pygame.draw 绘制形状、线和点
pygame.event 管理事件
pygame.font 使用字体
pygame.image 加载和存储图片
pygame.joystick 使用游戏手柄或者 类似的东西
pygame.key 读取键盘按键
pygame.mixer 声音
pygame.mouse 鼠标
pygame.movie 播放视频
pygame.music 播放音频
pygame.overlay 访问高级视频叠加
pygame.rect 管理矩形区域
pygame.sndarray 操作声音数据
pygame.sprite 操作移动图像
pygame.surface 管理图像和屏幕
pygame.surfarray 管理点阵图像数据
pygame.time 管理时间和帧信息
pygame.transform 缩放和移动图像
Pygame的坐标原点(0,0)点位于左上角,X轴自左向右,Y轴自上向下,单位为像素。
这里介绍一下常用的方法:
pygame.draw.line(Surface, color, start_pos, end_pos, width)此方法用于绘制一条线段
pygame.draw.aaline(Surface, color, start_pos, end_pos, blend)此方法用于绘制一条抗锯齿的线
pygame.draw.lines(Surface, color, closed, pointlist, width)此方法用于绘制一条折线
pygame.draw.rect(Surface, color, Rect)此方法用于绘制一个矩形
pygame.draw.rect(Surface, color, Rect, width)此方法用于绘制一个矩形框
pygame.draw.ellipse(Surface, color, Rect)此方法用于绘制一个椭圆
pygame.draw.ellipse(Surface, color, Rect, width)此方法用于绘制一个椭圆框
pygame.draw.polygon(Surface, color, pointlist, width)此方法用于绘制一个多边形
pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width)此方法用于绘制一条弧线
pygame.draw.circle(Surface, color, Rect, radius)此方法用于绘制一个圆
Pygame实现动画主要用到的方法:
pygame.image.load(filename)加载一张图片
pygame.Surface.blit(source, dest, area=None, special_flags = 0)将图片绘制到屏幕相应坐标上(后面两个参数默认,可以不传)
pygame.time.Clock()获得pygame的时钟
pygame.time.Clock.tick(FPS)设置pygame时钟的间隔时间
如果你想绘制文字到屏幕上,Pygame提供了很方便的方法使用.ttf字体文件,这样我们就能很轻易的将文字绘制在屏幕上了。
这里我使用了ARBERKLEY.ttf作为字体,字体文件的获取请参考1.5代码获取。
主要用到的方法:
pygame.font.Font(filename, size)
filename:字体文件的文件名;
size:字体的高height,单位为像素;
pygame.font.Font.render(text, antialias, color, background=None)
text:要显示的文字;
antialias: 是否抗锯齿;
color:字体颜色;
background:背景颜色(可选参数);
.get_rect()
获得一个对象的rect,以便于设置其坐标位置
在Pygame里播放音频有两个方法,一个用来播放特效声音,一个用来播放背景音乐:
pygame.mixer.Sound(filename)
该方法返回一个Sound对象,调用它的.play( )方法,即可播放较短的音频文件(比如玩家受到伤害、收集到金币等);
pygame.mixer.music.load(filename)
该方法用来加载背景音乐,之后调用pygame.mixer.music.play( )方法就可以播放背景音乐(Pygame只允许加载一个背景音乐在同一个时刻)
Pygame里常用的事件如下表:
事件 | 产生途径 | 参数 |
---|---|---|
QUIT | 用户按下关闭按钮 | none |
ACTIVEEVENT | Pygame被激活或者隐藏 | gain, state |
KEYDOWN | 键盘被按下 | unicode, key, mod |
KEYUP | 键盘被放开 | key, mod |
MOUSEMOTION | 鼠标移动 | pos, rel, buttons |
MOUSEBUTTONDOWN | 鼠标按下 | pos, button |
MOUSEBUTTONUP | 鼠标放开 | pos, button |
VIDEORESIZE | Pygame窗口缩放 | size, w, h |
更多的可以参考官方文档:http://www.pygame.org/docs/http://www.pygame.org/docs/