用python實現(xiàn)刮刮卡的交互效果
大家好,歡迎來到 Crossin的編程教室 !
我們經(jīng)常在App或者游戲里看到模擬“刮刮卡”的交互效果,即:用手指來回涂抹一塊遮蓋的圖層,然后露出下面隱藏的內(nèi)容。這個是模擬現(xiàn)實中刮刮卡彩票的操作,所以在軟件里拿來做抽獎,非常的直觀和有代入感。
今天我們就來嘗試用python模擬下這樣的效果。讓我們愉快地開始吧~
安裝Python并添加到環(huán)境變量,安裝 pygame 模塊
pip install pygame效果如下:
視頻中的圖片是網(wǎng)上隨手下載的,所有很多清晰度不太高,看起來有點粗糙。大家可以自己修改成高清版。
原理其實很簡單。首先從文件夾中隨機讀取一張圖片:
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))
當檢測到我們按下鼠標左鍵并在屏幕內(nèi)劃過時,將劃過鼠標的那片surface區(qū)域設置為透明的白色,從而使得其下方的圖片可見:
= 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()
大功告成~
大家可以給這個功能再加一點趣味性,比如做成一個抽獎小程序,看看今晚是吃紅燒牛肉還是香菇燉雞(味的方便面
)。這個就看各位的發(fā)揮啦~
提取碼:t6om
作者:Charles未晞
_往期文章推薦_
評論
圖片
表情
