过年回家啦用python写一个宝石消消乐的游戏哄小朋友

相关模块:

pygame;以及一些python自带的模块。

安装python并添加到环境变量,pip安装需要的相关模块即可。

游戏规则:

玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分。玩家需要在规定时间内获取尽可能高的得分。

实现过程:

首先加载一些必要的游戏素材:

加载背景音乐:

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

接着我们就要设置一下游戏的主循环吧

主要循环:

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

我给大家讲一下原理:

逻辑其实很简单,就是不断检测是否有鼠标点击事件发生,如果有,则判断鼠标点击时的位置是否在某拼图块的位置区域内,若在,则选中该拼图块,否则不选中。

当有第二块拼图块被选中时,则判断两个拼图块是否满足拼图交换的条件,若满足,则交换拼图块,并获得奖励,否则不交换并取消选这两个拼图块的选中状态。

最后肯定就是设置游戏的结束和退出啦:

游戏倒计时结束后,进入游戏结束界面,界面显示用户当前得分。同时,若用户键入R键则重新开始游戏,键入ESC键则退出游戏。

游戏结束后玩家选择重开或退出:源码如下

        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()</esc></r>

上面就是一步一步来讲代码思路理清楚的讲解啦 下面我把源码放到下面:


import os
import pygame
from utils import *
from config import *

'''&#x6E38;&#x620F;&#x4E3B;&#x7A0B;&#x5E8F;'''
def main():
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption('Gemgem-Python&#x4EA4;&#x6D41;&#x7FA4;&#xFF1A;932574150)
    # &#x52A0;&#x8F7D;&#x80CC;&#x666F;&#x97F3;&#x4E50;
    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)
    # &#x52A0;&#x8F7D;&#x97F3;&#x6548;
    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)))
    # &#x52A0;&#x8F7D;&#x5B57;&#x4F53;
    font = pygame.font.Font(os.path.join(ROOTDIR, 'resources/font.TTF'), 25)
    # &#x56FE;&#x7247;&#x52A0;&#x8F7D;
    gem_imgs = []
    for i in range(1, 8):
        gem_imgs.append(os.path.join(ROOTDIR, 'resources/images/gem%s.png' % i))
    # &#x4E3B;&#x5FAA;&#x73AF;
    game = gemGame(screen, sounds, font, gem_imgs)
    while True:
        score = game.start()
        flag = False
        # &#x4E00;&#x8F6E;&#x6E38;&#x620F;&#x7ED3;&#x675F;&#x540E;&#x73A9;&#x5BB6;&#x9009;&#x62E9;&#x91CD;&#x73A9;&#x6216;&#x8005;&#x9000;&#x51FA;
        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()</esc></r>

希望大家能用到,喜欢的话记得给我来个三连哦。

Original: https://blog.csdn.net/weixin_46661629/article/details/122323344
Author: 九叔敲代码
Title: 过年回家啦用python写一个宝石消消乐的游戏哄小朋友

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/780307/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球