马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Quick_Sort 于 2024-2-5 20:14 编辑
昨天闲来无事,忽然思考以后死了进地府没有一点“功德”怎行!于是想到了电子木鱼,攒电子功德。
今天一早,坐桌前,用Python的Pygame写出一个“木鱼功德器”,现在分享给大家,望大家不要吝啬,送些评分,让我这个新鱼油换换头像吧,
球球啦!!!谢谢!!!
图片
攒功德ing...
import pygame, sys
# 初始化
pygame.init()
# 窗口大小
width, height = 500, 500
# 图标的加载和设定
icon = pygame.image.load("muyu.png")
pygame.display.set_icon(icon)
# 标题
pygame.display.set_caption("木鱼功德器")
# 窗口和它的矩形
window = pygame.display.set_mode((width, height))
window_rect = window.get_rect()
# 加载音频
muyuyin = pygame.mixer.Sound("muyu.mp3")
# 加载图片
# 木鱼图
muyu_old = pygame.image.load("muyu.png")
# 木鱼棒图
bang_old = pygame.image.load("bang.png")
# 原木鱼图太大了,缩小到原来的25%
muyu = pygame.transform.rotozoom(muyu_old, 0, 0.25)
# 设置位置
muyu_rect = muyu.get_rect()
muyu_rect.center = window_rect.center
muyu_rect.x -= 30
# 原木鱼棒也太大了,缩小
bang = pygame.transform.rotozoom(bang_old, -30, 0.25)
# 设置位置
bang_rect = bang.get_rect()
bang_rect.centerx = 350
bang_rect.centery = 180
# 加载字体
font = pygame.font.Font('ziti.ttf', 30)
# 创建文字
text = font.render("功德 +1", True, (255, 255, 255))
# 获得矩形
text_rect = text.get_rect()
# 记录按下鼠标的坐标
gongdelist = []
# 上列表的副本
new_gongdelist = []
# 木鱼棒的倾斜角度
jiaodu = -30
# 木鱼棒角度每次循环的减少数量
jian = -1
# 是否敲击
qiaoji = False
# 木鱼大小每次循环的减少数量
mujian = 0
# 木鱼与原图的同比例大小
muda = 0.25
# 临时变量
b = True
jiance = 0
while True:
pygame.time.Clock().tick(60)
# 填充
window.fill((0, 0, 0))
# 放置图片
window.blit(muyu, muyu_rect)
window.blit(bang, bang_rect)
# copy一下位置列表列表,以后有用
new_gongdelist = gongdelist.copy()
# 遍历
for i in range(len(gongdelist)):
# 设置文字的位置为鼠标按下的位置
text_rect.centerx = gongdelist[i][0]
text_rect.y = gongdelist[i][1]
# 放置
window.blit(text, text_rect)
# y坐标减5
gongdelist[i][1] -= 5
# 如果小于-30,就删除。
# 因为如果直接删除,会导致循环错误,所以用一个新列表来记录
if gongdelist[i][1] < -30:
new_gongdelist.pop(i)
# 将旧列表换为新列表
gongdelist = new_gongdelist.copy()
# 以下代码用于实现木棒的摇动效果,不再赘述
#----------------------------------------------------#
jiaodu += jian
if jiaodu <= -50 or jiaodu >= -30:
jian = -jian
bang = pygame.transform.rotozoom(bang_old, jiaodu, 0.25)
bang_rect = bang.get_rect()
bang_rect.centerx = 350
bang_rect.centery = 180
#----------------------------------------------------#
# 以下代码用于实现敲击时木鱼变小再变大的功能
# 如果大小为最大,标记一下
if muda * 100 == 25:
b = True
# 如果大小为最小,标记一下
elif muda * 100 == 20:
b = False
# 如果敲击了并且大小合适
if qiaoji and muda * 100 >= 20 and muda * 100 <= 25:
# 如果最大
if b:
# 就在循环中变小
mujian = -1
else:
# 否则在循环中变大
mujian = 1
# 以下用于停止变大变小,防止死循环
jiance = jiance + mujian
if jiance == 0:
qiaoji = False
mujian = 0
muda = (muda * 100 + 1) / 100
# 这里乘100又除以100是为了防止小数问题
muda = (muda * 100 + mujian) / 100
# 缩小并设置位置
muyu = pygame.transform.rotozoom(muyu_old, 0, muda)
muyu_rect = muyu.get_rect()
muyu_rect.center = window_rect.center
muyu_rect.x -= 30
for event in pygame.event.get():
if event.type == pygame.QUIT:
# 退出不题
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
# 只检测鼠标左键
if event.button == 1:
# 当按下了鼠标
# 将坐标放进列表里
gongdelist.append(list(event.pos))
# 播放声音
muyuyin.play()
# 是否敲击设为true
qiaoji = True
pygame.display.update()
如果帮助你积攒了功德,记得评分!!!
感谢!!!
注意!附加文件在评论区!记得下载!
|