基于python和pygame库实现刮刮乐游戏

 更新时间:2024年03月04日 10:07:50   作者:软件技术爱好者  
这篇文章主要介绍了如何基于python和pygame库实现刮刮乐游戏,文中通过代码示例和图文给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

用python和pygame库实现刮刮乐游戏

首先,确保你已经安装了pygame库。如果没有安装,可以通过以下命令安装:

pip install pygame

示例有两个。

一、简单刮刮乐游戏

准备两张图片,一张作为背景bottom_image.png,一张作为刮开的图片top_image.png:

请将bottom_image.png和top_image.png图片文件与游戏代码文件(.py文件)放在在同一目录下。

以下是简单刮刮乐游戏的代码:

import pygame
import os
 
# 初始化pygame
pygame.init()
 
# 设置游戏窗口
width, height = 356, 358
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('刮刮乐游戏')
 
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
 
# 确保图片文件存在
if not os.path.isfile('bottom_image.png') or not os.path.isfile('top_image.png'):
    raise Exception("图片文件未找到,请确保bottom_image.png和top_image.png文件在同一目录下。")
 
# 加载图片
bottom_image = pygame.image.load('bottom_image.png').convert()
top_image = pygame.image.load('top_image.png').convert_alpha()
 
# 调整图片大小以适应窗口
bottom_image = pygame.transform.scale(bottom_image, (width, height))
top_image = pygame.transform.scale(top_image, (width, height))
 
# 创建一个与顶层图片相同大小的透明表面
scratch_surface = pygame.Surface((width, height), pygame.SRCALPHA)
 
# 将顶层图片绘制到透明表面上
scratch_surface.blit(top_image, (0, 0))
 
# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
 
    # 获取鼠标位置和状态
    mouse_pos = pygame.mouse.get_pos()
    mouse_pressed = pygame.mouse.get_pressed()
 
    # 如果按下鼠标左键,则在透明表面上绘制透明圆形,模拟刮开效果
    if mouse_pressed[0]:  # 检测鼠标左键是否按下
        pygame.draw.circle(scratch_surface, (0, 0, 0, 0), mouse_pos, 20)
 
    # 绘制背景图片
    screen.blit(bottom_image, (0, 0))
 
    # 绘制刮开的透明表面
    screen.blit(scratch_surface, (0, 0))
 
    # 更新屏幕
    pygame.display.flip()
 
# 退出游戏
pygame.quit()
 

运行效果:

二、多对图片的刮刮乐游戏

使用多对图片,准备了好了多对图片,如bottom1.png和top1.png 、 bottom2.png和top2.png 、 bottom2.png和top3.png,并将它们放到了img文件夹中。用户可以选择图对游戏,游戏过程中可按下ESC 键返回到菜单页开始重玩。

项目的目录(project_directory)结构如下:

源码如下:

import pygame
import os
import sys
 
# 初始化pygame
pygame.init()
 
# 设置游戏窗口
width, height = 356, 358
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('刮刮乐游戏(可选择图片对)')
 
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
 
# 图片对列表
image_pairs = [
    ("img/bottom1.png", "img/top1.png"),
    ("img/bottom2.png", "img/top2.png"),
    ("img/bottom3.png", "img/top3.png")
]
 
# 加载图片
def load_images(pair_index):
    bottom_image_path, top_image_path = image_pairs[pair_index]
    bottom_image = pygame.image.load(bottom_image_path).convert()
    top_image = pygame.image.load(top_image_path).convert_alpha()
    bottom_image = pygame.transform.scale(bottom_image, (width, height))
    top_image = pygame.transform.scale(top_image, (width, height))
    return bottom_image, top_image
 
# 游戏主函数
def run_game(bottom_image, top_image):
    scratch_surface = pygame.Surface((width, height), pygame.SRCALPHA)
    scratch_surface.blit(top_image, (0, 0))
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            # 检测键盘事件以返回菜单
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:  # 按下ESC键
                    return  # 返回到菜单,而不是退出游戏
        mouse_pos = pygame.mouse.get_pos()
        mouse_pressed = pygame.mouse.get_pressed()
        if mouse_pressed[0]:
            pygame.draw.circle(scratch_surface, (0, 0, 0, 0), mouse_pos, 20)
        screen.blit(bottom_image, (0, 0))
        screen.blit(scratch_surface, (0, 0))
        pygame.display.flip()
 
# 菜单函数
def menu():
    font = pygame.font.Font(None, 26)    
    menu_running = True
    text_surfaces = []
    text_rects = []
    
    for i, pair in enumerate(image_pairs):
        text = font.render(f"[ Image {i+1} ]", True, RED)
        text_rect = text.get_rect(topleft=(10, 40 + i * 30))
        text_surfaces.append(text)
        text_rects.append(text_rect)
    
    while menu_running:
        screen.fill(WHITE)
        text = font.render(f"Press Esc to return to the menu:", True, BLACK)
        text_rect = text.get_rect(topleft=(10, 5))
        screen.blit(text, text_rect)
        
        for i, text in enumerate(text_surfaces):
            screen.blit(text, text_rects[i])
        pygame.display.flip()
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:  # Left click
                for i, rect in enumerate(text_rects):
                    if rect.collidepoint(event.pos):
                        bottom_image, top_image = load_images(i)
                        run_game(bottom_image, top_image)
                        # 在这里不需要设置menu_running = False,因为我们希望在游戏结束后自动返回菜单
 
# 运行菜单
menu()

运行效果如下图所示:

用户可以单击菜单项选择图对游戏,游戏过程中可按下ESC 键返回到菜单页开始重玩。

以上就是基于python和pygame库实现刮刮乐游戏的详细内容,更多关于python pygame刮刮乐的资料请关注脚本之家其它相关文章!

相关文章

  • Python 并行化执行详细解析

    Python 并行化执行详细解析

    这篇文章主要介绍了Python 并行化执行详细解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-07-07
  • Python库学习Tkinter制作GUI个性签名设计软件

    Python库学习Tkinter制作GUI个性签名设计软件

    Tkinter 是 Python 中的标准 GUI 库,使用 Tkinter 可以快速地创建 GUI 应用程序。今天我们打算再用一个小案例,带大家加深对Tkinter的理解
    2021-09-09
  • Python合并列表、字典、字符串、CSV文件、多文件技巧

    Python合并列表、字典、字符串、CSV文件、多文件技巧

    在 Python 中,有多种方法可以实现数据合并,无论是合并列表、合并字典、合并字符串、合并CSV文件还是合并多个文件夹中的文件,都可以使用简单而强大的Python技巧来实现,通过合并数据,可以更方便地进行数据处理和分析
    2024-03-03
  • Python中读取和加解密PDF文件的详细教程

    Python中读取和加解密PDF文件的详细教程

    在Python中读取和加密PDF文件是一项常见且实用的任务,尤其对于需要处理大量文档自动化处理的场景,本文将详细介绍如何使用Python读取PDF文件内容以及如何使用不同的库来给PDF文件加密,需要的朋友可以参考下
    2024-08-08
  • pyqt5 从本地选择图片 并显示在label上的实例

    pyqt5 从本地选择图片 并显示在label上的实例

    今天小编就为大家分享一篇pyqt5 从本地选择图片 并显示在label上的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Pygame做一期吃豆子游戏的示例代码

    Pygame做一期吃豆子游戏的示例代码

    这篇文章主要介绍了Pygame做一期吃豆子游戏的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python 带你快速上手 Apache APISIX 插件开发

    Python 带你快速上手 Apache APISIX 插件开发

    Apache APISIX Python Runner 来了,社区中的小伙伴们在开发 Apache APISIX 插件时又多了一种新选择,本文将用实列向大家介绍,需要的朋友可以参考下面文章内容
    2021-09-09
  • python如何进行基准测试

    python如何进行基准测试

    这篇文章主要介绍了python如何进行基准测试,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • 基于Python实现本地音乐播放器的制作

    基于Python实现本地音乐播放器的制作

    这篇文章主要介绍了如何利用Python实现本地音乐播放器的制作,并且可以选择需要播放的音乐的路径,选择播放方式,感兴趣的小伙伴可以了解一下
    2022-06-06
  • Python模块对Redis数据库的连接与使用讲解

    Python模块对Redis数据库的连接与使用讲解

    这篇文章主要介绍了Python模块对Redis数据库的连接与使用,通过实例代码给大家介绍了Python连接Redis数据库方法,Python使用连接池连接Redis数据库方法,感兴趣的朋友跟随小编一起看看吧
    2021-07-07

最新评论