用python代码写的表白墙
最近比较无聊于是我朋友就给我推荐了这个比赛:https://marketing.csdn.net/p/c75ccc7a86b45de0fa8f1559ca8887fc?spm=1000.2115.3001.4368是一个关于情人节的比赛,于是我就想到做一个表白墙。代码如下:
# 导入相关模块
import random
import sys
import pygame
from pygame.locals import *
# 设置相关参数
WIDTH = 640
HEIGHT = 413
SPEED = [3, 50]
STRS = ['*i love python*', '*我本将心照明月*''*奈何明月照沟渠*', '*众里寻他千百度*', '*蓦然回首,那人却在灯火阑珊处*', '*最是人间留不住,朱颜辞镜花辞树*',
'*两情若是久长时*', '*又岂在朝朝暮暮*', '*山有木兮木有枝*', '*心悦君兮君不知*', '*多情自古伤离别*', '*更哪堪,冷落清秋节*',
'*花开堪折直须折*', '*莫待无花空折枝*', '*思此星晨非昨夜*', '*为谁风露立中霄*', '*落花有意随流水*', '*流水无心恋落花*']
# 随机生成多个速度
def speed():
while True:
speed_random = random.randint(SPEED[0], SPEED[1])
return speed_random
# 随机生成颜色
def colour():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
# 随机生成位移
def move():
return random.randint(0, WIDTH), -20
# 设置字符串
def str():
for i in range(len(STRS)):
return STRS[random.randint(0, len(STRS) - 1)]
# 设置随机字体大小
def size():
return random.randint(20, 40)
# 定义一个会动的图片类
class Code(pygame.sprite.Sprite):
# 初始化
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.speed = speed()
self.colour = colour()
self.move = move()
self.str = str()
self.font = pygame.font.Font('C:/Windows/Fonts/STXINWEI.TTF', size())
self.image = self.font.render(self.str, True, colour())
self.image = pygame.transform.rotate(self.image, random.randint(360, 360)) # 以垂直方式下落
# 让字体居中
self.rect = self.image.get_rect()
# 使元素真实位置等于位移
self.rect.topleft = move()
def update(self):
self.rect = self.rect.move(0, self.speed)
# 超出屏幕的宽度就销毁
if self.rect.top > HEIGHT:
self.kill()
# 初始化游戏
pygame.init()
# 设置屏幕大小
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 设置标题
pygame.display.set_caption('表白墙')
# 初始化音乐包
pygame.mixer.init()
# 加载音乐
pygame.mixer.music.load('C:/KuGou/love.mp3')
# 播放音乐
pygame.mixer.music.play()
# 设置帧数率
clock = pygame.time.Clock()
# 创建一个监听事件
codesGroup = pygame.sprite.Group()
while True:
# 每帧停止24秒
clock.tick(10)
for event in pygame.event.get():
# 监听关闭事件
if event.type == QUIT:
pygame.quit()
sys.exit(0)
# 获取图片对象
picture = pygame.image.load('./love you.png')
# 将图片对象渲染到窗口上
screen.blit(picture, (0, 0))
# 将图片展示到屏幕上
pygame.display.flip()
# 新建一个精灵
codeObject = Code()
codesGroup.add(codeObject)
# 监控并销毁.
codesGroup.update()
codesGroup.draw(screen)
pygame.display.update()
这个代码一开始是用来写代码雨的,后来被改成了这个表白墙。中途也有遇到一些问题,比如说字体只能显示英文,当字符串为中文时就会出现一些奇怪的框框,后来发现是我的字体问题,然后我就换了中文字体,然后将字体旋转了一下改成了横向,还改变了下落的速度改成了随机的,让列表中的每一个元素的下落速度都不一样,字体大小也不一样,贴了背景改了音乐。