用python实现刮刮卡的交互效果
大家好,欢迎来到 Crossin的编程教室 !
我们经常在App或者游戏里看到模拟“刮刮卡”的交互效果,即:用手指来回涂抹一块遮盖的图层,然后露出下面隐藏的内容。这个是模拟现实中刮刮卡彩票的操作,所以在软件里拿来做抽奖,非常的直观和有代入感。
今天我们就来尝试用python模拟下这样的效果。让我们愉快地开始吧~
安装Python并添加到环境变量,安装 pygame 模块
pip install pygame
效果如下:
视频中的图片是网上随手下载的,所有很多清晰度不太高,看起来有点粗糙。大家可以自己修改成高清版。
原理其实很简单。首先从文件夹中随机读取一张图片:
def readImageRandomly():
filenames = os.listdir(IMAGEDIR)
filenames = [f for f in filenames if f.split('.')[-1] in SUPPORTEXTS]
imgpath = os.path.join(IMAGEDIR, random.choice(filenames))
return pygame.transform.scale(pygame.image.load(imgpath), SCREENSIZE)
然后将图片绑定到pygame的屏幕上:
screen.blit(image_used, (0, 0))
接着定义一个surface,并设置为灰色,覆盖在图片上,这样图片一开始是看不到的:
surface = pygame.Surface(SCREENSIZE).convert_alpha()
surface.fill(GRAY)
screen.blit(surface, (0, 0))
当检测到我们按下鼠标左键并在屏幕内划过时,将划过鼠标的那片surface区域设置为透明的白色,从而使得其下方的图片可见:
pygame.mouse.get_pressed() =
:
pygame.draw.circle(surface, WHITE, pygame.mouse.get_pos(), 40)
:
surface.fill(GRAY)
readImageRandomly() =
当然,为了方便切换图片,我们加了一个点击鼠标右键可以随机重新载入一张图片的功能。组织一下代码,使它可以正常运行:
def main():
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(BGMPATH)
pygame.mixer.music.play(-1, 0.0)
pygame.mouse.set_cursor(*pygame.cursors.diamond)
screen = pygame.display.set_mode(SCREENSIZE)
pygame.display.set_caption('刮刮乐——微信公众号:Charles的皮卡丘')
surface = pygame.Surface(SCREENSIZE).convert_alpha()
surface.fill(GRAY)
image_used = readImageRandomly()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit(-1)
mouse_event_flags = pygame.mouse.get_pressed()
if mouse_event_flags[0]:
pygame.draw.circle(surface, WHITE, pygame.mouse.get_pos(), 40)
elif mouse_event_flags[-1]:
surface.fill(GRAY)
image_used = readImageRandomly()
screen.blit(image_used, (0, 0))
screen.blit(surface, (0, 0))
pygame.display.update()
大功告成~
大家可以给这个功能再加一点趣味性,比如做成一个抽奖小程序,看看今晚是吃红烧牛肉还是香菇炖鸡(味的方便面)。这个就看各位的发挥啦~
提取码:t6om
作者:Charles未晞
_往期文章推荐_
评论