|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
复制代码
如果帮助你积攒了功德,记得评分!!!
感谢!!!
注意!附加文件在评论区!记得下载!
|
评分
-
查看全部评分
|