pygame8 扫雷游戏

这篇具有很好参考价值的文章主要介绍了pygame8 扫雷游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、游戏规则:

1、点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利

2、如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷

二、游戏主逻辑:

主要逻辑即调用run_game, 然后循环检测事件和更新屏幕

pygame扫雷,python教程,游戏

检测事件逻辑主要分两种,一种为是否退出,另一种是否有鼠标点击

pygame扫雷,python教程,游戏

更新屏幕主要分三部分,首先是刷白屏幕,然后是画出覆盖物,最后是将缓存更新到屏幕

pygame扫雷,python教程,游戏

至此游戏的主要逻辑就完成了

三、游戏细节

根据此主要逻辑我们可以设计一个游戏类Game,定义三个函数,

run_game()

_event_check()

_update_screen()

分别对应为运行游戏主逻辑,事件检测,更新屏幕

现在我们来看一下所谓的覆盖物是一个什么东西:

pygame扫雷,python教程,游戏

从图上可以看出是一个20*20的方格列表,我们可以定义一个类Cover 将关于怎样画这些小方格包在里面,

看起来是需要设计一个列表,其长度是20,宽度也是20,每一个方格都是一个25像素的正方形,画的时候可以用一个循环,将列表中的方格依次用draw.rect画出来

for cur in self.covers:
    pygame.draw.rect(self.screen, self.setting.cover_color, [cur[0] * 25, cur[1] * 25, 24, 24])

这儿注意的是方格是宽高都为25,但真正画的时候宽高应该少一个像素,原因是画满的话格子边界就会混在一起,看不出来了

self.covers在一开始需要定义:

    def __init__(self, setting, screen):  # 游戏参数设置和游戏主界面
        self.setting = setting
        self.screen = screen

        self.covers = []  # 存储未被点击过的方块的覆盖物的位置
        for i in range(20):
            for j in range(20):
                self.covers.append([i, j])  # 刚开始时整个界面都是被覆盖的

主程序的实现代码非常简单:

if __name__ == '__main__':
    my_game = Game()
    my_game.run_game()

Game的定义主要是为了实现前面定义的三个函数,初始化时需要将covers也一并引入:


class Game:
    def __init__(self):
        pygame.init()
        self.setting = setting()
        self.screen = pygame.display.set_mode(self.setting.screen_size)
        self.covers = Cover(self.setting, self.screen)  # 表面覆盖物

    def run_game(self):
        while True:
            self._event_check_()  # 检测事件
            self._update_screen_()  # 更新屏幕

    def _event_check_(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # 结束游戏
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x, y = pygame.mouse.get_pos()  # 检测到单击鼠标事件,将鼠标的位置传入
                self.covers.delete(x, y)  # 删除对应方块上的覆盖物

    def _update_screen_(self):
        self.screen.fill(self.setting.background_color)  # 填充背景颜色
        self.covers.show()  # 将还没有被点击过的数字展现出来
        pygame.display.flip()  # 更新屏幕显示,将上面所做的工作展现在游戏界面上

最后附上本节课的全部代码:
 文章来源地址https://www.toymoban.com/news/detail-742482.html

import pygame
from settings import setting  # 游戏参数设置
from covers import Cover  # 未点击方块时表面的覆盖物
import sys


class Game:
    def __init__(self):
        pygame.init()
        self.setting = setting()
        self.screen = pygame.display.set_mode(self.setting.screen_size)
        self.covers = Cover(self.setting, self.screen)  # 表面覆盖物

    def run_game(self):
        while True:
            self._event_check_()  # 检测事件
            self._update_screen_()  # 更新屏幕

    def _event_check_(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # 结束游戏
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x, y = pygame.mouse.get_pos()  # 检测到单击鼠标事件,将鼠标的位置传入
                self.covers.delete(x, y)  # 删除对应方块上的覆盖物

    def _update_screen_(self):
        self.screen.fill(self.setting.background_color)  # 填充背景颜色
        self.covers.show()  # 将还没有被点击过的数字展现出来
        self.covers.show_frame()

        pygame.display.flip()  # 更新屏幕显示,将上面所做的工作展现在游戏界面上


if __name__ == '__main__':
    my_game = Game()
    my_game.run_game()
"""
@funcs: 覆盖们
"""
import pygame


class Cover:
    """管理游戏覆盖物的类"""

    def __init__(self, setting, screen):  # 游戏参数设置和游戏主界面
        self.setting = setting
        self.screen = screen

        self.covers = []  # 存储未被点击过的方块的覆盖物的位置
        for i in range(20):
            for j in range(20):
                self.covers.append([i, j])  # 刚开始时整个界面都是被覆盖的

    def show_frame(self):
        for i in range(20):
            pygame.draw.line(self.screen, self.setting.frame_color, [0, i*25], [500, i*25])
            pygame.draw.line(self.screen, self.setting.frame_color, [i*25, 0], [i*25, 500])

    def show(self):  # 将所有未被点击过的方块展现出来
        for cur in self.covers:
            pygame.draw.rect(self.screen, self.setting.cover_color, [cur[0] * 25, cur[1] * 25, 24, 24])

    def delete(self, posx, posy):
        x = posx // 25
        y = posy // 25
        if [x, y] in self.covers:
            self.covers.remove([x, y])
class setting:
    """管理游戏中的参数的类"""

    def __init__(self):
        self.screen_size = [500, 500]  # 屏幕大小
        self.background_color = [255, 255, 255]  # 背景色
        self.frame_width = 1  # 线条粗细
        self.cover_color = [150, 150, 150]  # 展示界面的颜色
        self.frame_color = [120, 120, 120]

到了这里,关于pygame8 扫雷游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Pygame 游戏开发基础教程与项目实践(总目录)

    原文链接:https://xiets.blog.csdn.net/article/details/131368147 版权声明:原创文章禁止转载 Pygame 是一个免费的开源的跨平台库(支持 Windows、MacOS、Linux),用于使用 Python 开发视频游戏等多媒体应用程序。 Pygame 基础教程01: Python (Pygame) 游戏开发模块简介与安装 Pygame 基础教程02: 显示

    2024年02月14日
    浏览(46)
  • pygame超详细教程!!做python小游戏必看框架!

    # 导入需要的模块 # 定义一个游戏管理总类 # 定义一个check_event 方法用于阻塞事件,并在检测到\\\"QUIT\\\"事件时关闭窗口 # run 方法则是游戏的主循环,不断调用 check_event 方法, 加上flip()  , 每次添加新功能,即可更新画布 # 调用gm实例 到这里,我们就能做出一个空白的黑窗体了,

    2024年02月07日
    浏览(47)
  • 很合适新手入门使用的Python游戏开发包pygame实例教程-01[开发环境配置与第一个界面]

    我们假定你已经安装好了我们开发python程序的sublime text,如果不知道怎么安装的可以参照我前面的博文。这里只需要解决的是配置好Pygame的问题。本篇博文主要解决开发环境配置以及第一个游戏界面的显示问题。 文章原出处: https://blog.csdn.net/haigear/article/details/130173836 没有

    2024年01月25日
    浏览(96)
  • Python小游戏——扫雷

    用Python做一个传统的扫雷游戏。 游戏界面和操作 游戏界面:一系列游戏图标 + 时间和剩余旗子数 + (背景音乐)。 操作:开始游戏 / 重新开始游戏 + 退出游戏 + 打开格子 + 标记格子 + 显示格子信息。 游戏状态转化逻辑、游戏赢输规则和游戏界面和事件检测在主程序(main.py

    2024年02月10日
    浏览(45)
  • 用python写扫雷游戏

    有图和pygame就行 图片:       运行截图:

    2024年02月04日
    浏览(30)
  • Python游戏:扫雷 (附源码)

    这次我们基于 pygame 来做一个扫雷,我所有的代码都是基于 python 3.6 的。 下面将一下我的实现逻辑 首先,如何表示雷和非雷,一开始有好多状态,后来一想,干脆就做个类吧。 布雷就很简单了,随机取99个数,从上往下顺序排   点击一个格子的时候,只要根据点击的坐标,

    2024年02月11日
    浏览(31)
  • python小游戏毕设 扫雷小游戏设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 扫雷小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 《扫雷》是一款大

    2024年02月04日
    浏览(65)
  • Pygame 教程(5):监测游戏时间

    本章,你将学习如何监测游戏时间。 上一章:图像传输和绘制文本 下一章:努力更新中…… 在游戏程序中,时常需要随着时间的流逝而做出不同的动作。例如:倒计时、动画、限制帧率……这就需要对游戏时间进行监测。 Pygame 使用 pygame.time 模块监测时间, 以毫秒( 1 10

    2024年02月10日
    浏览(36)
  • python小游戏毕设 扫雷小游戏设计与实现 (源码)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 扫雷小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: https:

    2024年02月06日
    浏览(42)
  • 带你用Python制作一个经典小游戏:扫雷

    名字:阿玥的小东东 学习:Python、C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-pythonc++高级知识,过年必备,C/C++知识讲解领域博主 目录 游戏界面尺寸 方块尺寸 雷的数量

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包