Python刮刮乐效果.

1.这里因为生成了一个随机数,通过随机数获得不同底层图片的前缀名(如 1.jpg ,2.jpg ,3.jpg等等),达到每次刮可能获得不同底层图片。(当然也可一直生成同一底层图片,即取消随机数)

先看效果:

2.关键代码(2处关键):

第一处是如何让一张图片在另一张图片上面,这里运用到了pygame.surface.blit(),刚好可以达到此时效果。

  draw_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)
  draw_surface.blit(image_surface, (0, 0)) #  blit 将一个图像绘制到另一个图像上方
  draw_surface.blit(mask_surface, (0, 0)) 

第二处是如何在表层达到刮刮乐效果,这里比较简单,直接运用擦除即可。

for event in pygame.event.get():
            if event.type == pygame.MOUSEMOTION:
                if pygame.mouse.get_pressed()[0]:  #鼠标左键
                    # 在表层上绘制擦除线条  圆形
                    pygame.draw.circle(mask_surface, (0, 0, 0, 0), event.pos, 30)

3.全部代码:

import pygame
import random
# 初始化 Pygame
pygame.init()
 
a=random.randint(1,4)  #可通过随机数获取随机图片

mask_image = pygame.image.load("qs.jpg")  #表层图片
image = pygame.image.load(f"{a}.jpg") #底层图片

# 创建屏幕和加载图片
#屏幕大小根据实际修改 
screen = pygame.display.set_mode(image.get_size())
# 将表层图片缩放至与底层图片相同大小
mask_image = pygame.transform.scale(mask_image, image.get_size())

# 转换表层和底层图片的表面类型为 alpha 模式    其实就是改变了透明度
mask_surface = mask_image.convert_alpha()
image_surface = image.convert_alpha()
 

 
# 游戏主循环
def main_loop():
    while True:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEMOTION:
                if pygame.mouse.get_pressed()[0]:  #鼠标左键
                    # 在表层上绘制擦除线条  圆形
                    pygame.draw.circle(mask_surface, (0, 0, 0, 0), event.pos, 30)
                    
 
            if event.type == pygame.QUIT:
                pygame.quit()
                return
 
        # 将底部图片和表层图片绘制到 draw_surface 上
        draw_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)
        draw_surface.blit(image_surface, (0, 0)) #image_surface  blit 将一个图像绘制到另一个图像上方
        draw_surface.blit(mask_surface, (0, 0)) #mask_surface
 
      
 
        # 在屏幕上绘制合成后的表面
        screen.blit(draw_surface, (0, 0))
 
        pygame.display.flip()
 
if __name__ == "__main__":
    main_loop()

4.素材

底层图片:

表层图片(原表层图片太大没法压缩,就随便放了一个图):

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值