欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python編寫一個寶石消消樂小游戲

 更新時間:2022年01月06日 11:19:00   作者:九叔敲代碼  
快過年回家啦用,本文將為大家介紹一個用python編寫的寶石消消樂游戲用來哄小朋友,文中的示例代碼講解詳細,感興趣的小伙伴可以學(xué)習(xí)一下

開發(fā)工具

python版本:3.6.4

相關(guān)模塊:

pygame;以及一些python自帶的模塊。

環(huán)境搭建

安裝python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

原理簡介

游戲規(guī)則:

玩家通過鼠標交換相鄰的拼圖,若交換后水平/豎直方向存在連續(xù)三個相同的拼圖,則這些拼圖消失,玩家得分,同時生成新的拼圖以補充消失的部分,否則,交換失敗,玩家不得分。玩家需要在規(guī)定時間內(nèi)獲取盡可能高的得分。

實現(xiàn)過程:

首先加載一些必要的游戲素材:

加載背景音樂:

pygame.mixer.init()
    pygame.mixer.music.load(os.path.join(ROOTDIR, "resources/audios/bg.mp3"))
    pygame.mixer.music.set_volume(0.6)
    pygame.mixer.music.play(-1)

加載音效: 

sounds = {}
    sounds['mismatch'] = pygame.mixer.Sound(os.path.join(ROOTDIR, 'resources/audios/badswap.wav'))
    sounds['match'] = []
    for i in range(6):
        sounds['match'].append(pygame.mixer.Sound(os.path.join(ROOTDIR, 'resources/audios/match%s.wav' % i)))

加載字體:

font = pygame.font.Font(os.path.join(ROOTDIR, 'resources/font.TTF'), 25)

圖片加載:

gem_imgs = []
    for i in range(1, 8):
        gem_imgs.append(os.path.join(ROOTDIR, 'resources/images/gem%s.png' % i))

接著我們就要設(shè)置一下游戲的主循環(huán)吧

主要循環(huán):

game = gemGame(screen, sounds, font, gem_imgs)
    while True:
        score = game.start()
        flag = False

我給大家講一下原理:

邏輯其實很簡單,就是不斷檢測是否有鼠標點擊事件發(fā)生,如果有,則判斷鼠標點擊時的位置是否在某拼圖塊的位置區(qū)域內(nèi),若在,則選中該拼圖塊,否則不選中。

當(dāng)有第二塊拼圖塊被選中時,則判斷兩個拼圖塊是否滿足拼圖交換的條件,若滿足,則交換拼圖塊,并獲得獎勵,否則不交換并取消選這兩個拼圖塊的選中狀態(tài)。

最后肯定就是設(shè)置游戲的結(jié)束和退出啦:

游戲倒計時結(jié)束后,進入游戲結(jié)束界面,界面顯示用戶當(dāng)前得分。同時,若用戶鍵入R鍵則重新開始游戲,鍵入ESC鍵則退出游戲。

游戲結(jié)束后玩家選擇重開或退出:源碼如下

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.KEYUP and event.key == pygame.K_r:
                    flag = True
            if flag:
                break
            screen.fill((135, 206, 235))
            text0 = 'Final score: %s' % score
            text1 = 'Press <R> to restart the game.'
            text2 = 'Press <Esc> to quit the game.'
            y = 150
            for idx, text in enumerate([text0, text1, text2]):
                text_render = font.render(text, 1, (85, 65, 0))
                rect = text_render.get_rect()
                if idx == 0:
                    rect.left, rect.top = (212, y)
                elif idx == 1:
                    rect.left, rect.top = (122.5, y)
                else:
                    rect.left, rect.top = (126.5, y)
                y += 100
                screen.blit(text_render, rect)
            pygame.display.update()
        game.reset()
 

上面就是一步一步來講代碼思路理清楚的講解啦 下面我把源碼放到下面:

import os
import pygame
from utils import *
from config import *
 
 
'''游戲主程序'''
def main():
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption('Gemgem-Python交流群:932574150)
    # 加載背景音樂
    pygame.mixer.init()
    pygame.mixer.music.load(os.path.join(ROOTDIR, "resources/audios/bg.mp3"))
    pygame.mixer.music.set_volume(0.6)
    pygame.mixer.music.play(-1)
    # 加載音效
    sounds = {}
    sounds['mismatch'] = pygame.mixer.Sound(os.path.join(ROOTDIR, 'resources/audios/badswap.wav'))
    sounds['match'] = []
    for i in range(6):
        sounds['match'].append(pygame.mixer.Sound(os.path.join(ROOTDIR, 'resources/audios/match%s.wav' % i)))
    # 加載字體
    font = pygame.font.Font(os.path.join(ROOTDIR, 'resources/font.TTF'), 25)
    # 圖片加載
    gem_imgs = []
    for i in range(1, 8):
        gem_imgs.append(os.path.join(ROOTDIR, 'resources/images/gem%s.png' % i))
    # 主循環(huán)
    game = gemGame(screen, sounds, font, gem_imgs)
    while True:
        score = game.start()
        flag = False
        # 一輪游戲結(jié)束后玩家選擇重玩或者退出
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.KEYUP and event.key == pygame.K_r:
                    flag = True
            if flag:
                break
            screen.fill((135, 206, 235))
            text0 = 'Final score: %s' % score
            text1 = 'Press <R> to restart the game.'
            text2 = 'Press <Esc> to quit the game.'
            y = 150
            for idx, text in enumerate([text0, text1, text2]):
                text_render = font.render(text, 1, (85, 65, 0))
                rect = text_render.get_rect()
                if idx == 0:
                    rect.left, rect.top = (212, y)
                elif idx == 1:
                    rect.left, rect.top = (122.5, y)
                else:
                    rect.left, rect.top = (126.5, y)
                y += 100
                screen.blit(text_render, rect)
            pygame.display.update()
        game.reset()
 
 
'''test'''
if __name__ == '__main__':
    main()

到此這篇關(guān)于基于Python編寫一個寶石消消樂小游戲的文章就介紹到這了,更多相關(guān)Python消消樂內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pycharm新建項目時報錯解決辦法

    Pycharm新建項目時報錯解決辦法

    pycharm可以很方便的管理Python的解釋器(如果安裝了多個的話),以及第三方模塊,包,下面這篇文章主要給大家介紹了關(guān)于Pycharm新建項目時報錯解決的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Django框架創(chuàng)建mysql連接與使用示例

    Django框架創(chuàng)建mysql連接與使用示例

    這篇文章主要介紹了Django框架創(chuàng)建mysql連接與使用,簡單介紹了Linux環(huán)境下mysql的安裝,并結(jié)合實例形式分析了Django框架基于第三方庫pymysql連接mysql數(shù)據(jù)庫相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Python+Selenium實現(xiàn)網(wǎng)站滑塊拖動操作

    Python+Selenium實現(xiàn)網(wǎng)站滑塊拖動操作

    這篇文章主要為大家詳細介紹了如何利用Python+Selenium模擬實現(xiàn)登錄某網(wǎng)站的滑塊拖動操作,文中的示例代碼講解詳細,需要的可以參考一下
    2022-09-09
  • python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解

    python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解

    在本文中,我們將重點討論一個將多個預(yù)處理操作組織成單個操作的特定函數(shù):pipe。我將通過示例方式來展示如何使用它,讓我們從數(shù)據(jù)創(chuàng)建數(shù)據(jù)幀開始吧
    2021-11-11
  • Python多層裝飾器用法實例分析

    Python多層裝飾器用法實例分析

    這篇文章主要介紹了Python多層裝飾器用法,結(jié)合實例形式簡單分析了Python多層裝飾器的相關(guān)使用方法與注意事項,需要的朋友可以參考下
    2018-02-02
  • pytorch矩陣乘法的實現(xiàn)

    pytorch矩陣乘法的實現(xiàn)

    本文主要介紹了pytorch矩陣乘法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 詳解爬蟲被封的問題

    詳解爬蟲被封的問題

    這篇文章主要介紹了爬蟲被封的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python利用matplotlib實現(xiàn)制作動態(tài)條形圖

    Python利用matplotlib實現(xiàn)制作動態(tài)條形圖

    說到用 Python 制作動態(tài)圖,首先想到的肯定是一些直接拿來就用的庫,雖然我沒做過,但是我相信一定有且不止一個,搜了一圈后發(fā)現(xiàn)有個bar chart race庫看起來不錯,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • python的類class定義及其初始化方式

    python的類class定義及其初始化方式

    這篇文章主要介紹了python的類class定義及其初始化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • PyQt5實現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動條效果

    PyQt5實現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動條效果

    我想知道是否有一種方法可以在matplotlib上顯示滾動條(水平或垂直),顯示包含多個子槽(sublot2grid)的頁面(plt.show).下面就通過本文給大家分享PyQt5實現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動條效果,對PyQt5 Matplotlib圖像嵌入相關(guān)知識感興趣的的朋友一起看看吧
    2021-05-05

最新評論