基于Python编写一个宝石消消乐小游戏

 更新时间:2022年01月06日 11:19:00   作者:九叔敲代码  
快过年回家啦用,本文将为大家介绍一个用python编写的宝石消消乐游戏用来哄小朋友,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下

开发工具

python版本:3.6.4

相关模块:

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

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

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))
    # 主循环
    game = gemGame(screen, sounds, font, gem_imgs)
    while True:
        score = game.start()
        flag = False
        # 一轮游戏结束后玩家选择重玩或者退出
        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()

到此这篇关于基于Python编写一个宝石消消乐小游戏的文章就介绍到这了,更多相关Python消消乐内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch 中transforms的使用详解

    pytorch 中transforms的使用详解

    本文主要介绍了pytorch中transforms的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python模拟登录微博并爬取表情包

    Python模拟登录微博并爬取表情包

    前段时间爬取的知乎表情包用完了吗?今天再带大家去微博爬一波表情包吧.文中有非常详细的代码示例,废话不多说,让我们愉快地开始吧,需要的朋友可以参考下
    2021-06-06
  • PyQt QDoubleSpinBox控件用法示例详解

    PyQt QDoubleSpinBox控件用法示例详解

    QDoubleSpinBox 是 PyQt中用于输入浮点数的控件,支持键盘输入和上下箭头调整数值,本文给大家介绍PyQt QDoubleSpinBox控件用法,感兴趣的朋友一起看看吧
    2025-04-04
  • Python continue语句用法实例

    Python continue语句用法实例

    这篇文章主要介绍了Python continue语句的用法,并用实例来说明如何使用,需要的朋友可以参考下
    2014-03-03
  • python函数定义和调用过程详解

    python函数定义和调用过程详解

    这篇文章主要介绍了python函数定义和调用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python中SSH远程登录设备的实现方法

    python中SSH远程登录设备的实现方法

    本文主要介绍了python中SSH远程登录设备,python中支持SSH协议的模块主要有Paramiko和netmiko两种,本文主要介绍了netmiko模块,具有一定的参考价值,感兴趣的可以了解一下
    2022-04-04
  • Pandas.concat连接DataFrame,Series的示例代码

    Pandas.concat连接DataFrame,Series的示例代码

    本文主要介绍了Pandas.concat连接DataFrame,Series的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Django values()和value_list()的使用

    Django values()和value_list()的使用

    这篇文章主要介绍了Django values()和value_list()的使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Django框架请求生命周期实现原理

    Django框架请求生命周期实现原理

    这篇文章主要介绍了Django框架请求生命周期实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python中获得当前目录和上级目录的实现方法

    python中获得当前目录和上级目录的实现方法

    这篇文章主要介绍了python中获得当前目录和上级目录的实现方法,需要的朋友可以参考下
    2017-10-10

最新评论