<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用python實現(xiàn)刮刮卡的交互效果

          共 2562字,需瀏覽 6分鐘

           ·

          2021-03-26 15:17



          大家好,歡迎來到 Crossin的編程教室 !


          我們經(jīng)常在App或者游戲里看到模擬“刮刮卡”的交互效果,即:用手指來回涂抹一塊遮蓋的圖層,然后露出下面隱藏的內(nèi)容。這個是模擬現(xiàn)實中刮刮卡彩票的操作,所以在軟件里拿來做抽獎,非常的直觀和有代入感。


          今天我們就來嘗試用python模擬下這樣的效果。讓我們愉快地開始吧~


          開發(fā)環(huán)境

          安裝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ū)域設置為透明的白色,從而使得其下方的圖片可見:

          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()


          當然,為了方便切換圖片,我們加了一個點擊鼠標右鍵可以隨機重新載入一張圖片的功能。組織一下代碼,使它可以正常運行:

          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ā)揮啦~


          源代碼

          https://pan.baidu.com/s/1th2oYE5Q0E_0iNx20i6qhQ 

          提取碼:t6om


          如果文章對你有幫助,歡迎轉(zhuǎn)發(fā)/點贊/收藏~

          作者:Charles未晞

          來源:Charles的皮卡丘


          _往期文章推薦_

          用python模擬地球飛越火星




          如需了解付費精品課程教學答疑服務
          請在Crossin的編程教室內(nèi)回復: 666

          瀏覽 94
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜乳一区二区三区 | 蜜桃久久在线 | 国产三级高清在线 | 日韩色区 | 国外成人在线视频老鸭窝 |