Pygame游戏实战七:求解迷宫

news2024/11/24 20:34:31

介绍模块

本游戏使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。通过Pygame制作一个迷宫,迷宫可以自定义,出入口,通过移动来逃离迷宫,走到出口,看看这个是你小时候玩的游戏吗?

最小开发框架

详情请看此文章:
Pygame游戏模块介绍二:最小开发框架代码_pygame最小开发框架_牧子川的博客-CSDN博客

Pygame和sys模块

import pygame # 制作游戏时要使用的模块
import sys # python的标准库,对内部各功能模块进行初始化创建,系统模块

random模块

需要在屏幕上随机生成食物的位置,通过随机一个位置来表示食物的位置

from random import randint

详情请看此文章:Pygame游戏模块介绍一:random模块简介_random 范围_牧子川的博客-CSDN博客

相关功能  

【童年游戏】求解迷宫

定义迷宫

定义玩家需要走的迷宫,其中I表示入口,O表示出口

maze = [
    "############",
    "#I         #",
    "#  ## ###  #",
    "#  #       #",
    "#  #  ## # #",
    "#    #     #",
    "# ### ## # #",
    "# ##       #",
    "#    # # # #",
    "## #   ##  #",
    "# # #O # ###",
    "############"
]

绘制迷宫

将迷宫进行显示,画出出入口和边界

def draw_maze():
    for y in range(len(maze)):
        for x in range(len(maze[y])):
            if maze[y][x] == "#":
                pygame.draw.line(win, BLACK, (x*cell_size, y*cell_size), (x*cell_size+cell_size, y*cell_size), 2)  # 上边界
                pygame.draw.line(win, BLACK, (x*cell_size, y*cell_size+cell_size), (x*cell_size+cell_size, y*cell_size+cell_size), 2)  # 下边界
                pygame.draw.line(win, BLACK, (x*cell_size, y*cell_size), (x*cell_size, y*cell_size+cell_size), 2)  # 左边界
                pygame.draw.line(win, BLACK, (x*cell_size+cell_size, y*cell_size), (x*cell_size+cell_size, y*cell_size+cell_size), 2)  # 右边界

    # 绘制入口和出口
    for y in range(len(maze)):
        for x in range(len(maze[y])):
            if maze[y][x] == "I":
                pygame.draw.rect(win, GREEN, (x*cell_size, y*cell_size, cell_size, cell_size))
                font = pygame.font.Font(None, int(cell_size*0.6))
                text = font.render('IN', True, (255, 255, 255))
                win.blit(text, (x*cell_size+int(cell_size*0.2), y*cell_size+int(cell_size*0.2)))
            elif maze[y][x] == "O":
                pygame.draw.rect(win, GREEN, (x*cell_size, y*cell_size, cell_size, cell_size))
                font = pygame.font.Font(None, int(cell_size*0.6))
                text = font.render('OUT', True, (255, 255, 255))
                win.blit(text, (x*cell_size+int(cell_size*0.1), y*cell_size+int(cell_size*0.2)))

键盘移动

使用键盘来控制移动方向

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                if maze[player_pos[1]][player_pos[0]-1] != "#":
                    player_pos[0] -= 1
            elif event.key == pygame.K_RIGHT:
                if maze[player_pos[1]][player_pos[0]+1] != "#":
                    player_pos[0] += 1
            elif event.key == pygame.K_UP:
                if maze[player_pos[1]-1][player_pos[0]] != "#":
                    player_pos[1] -= 1
            elif event.key == pygame.K_DOWN:
                if maze[player_pos[1]+1][player_pos[0]] != "#":
                    player_pos[1] += 1

图片界面

扩展可添加功能

1.修改墙壁(边界)样式

2.增加更加复杂的迷宫

3.增加关卡

4.增加音效

5.增加背景

源码获取

PyGame/求解迷宫 at main · mzc421/PyGame (github.com)

 欢迎关注我的公众号:@AI算法与电子竞赛    

​​​

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1292578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFA 2023 明日开幕,Flink 智能诊断、小红书流批一体实践精彩来袭

近年来,流批一体的技术思想势头火热,即“将批处理和流处理相结合,实现更好的数据处理能力”,已成功从理论层面走进现实世界。Flink 是一款高吞吐量、低延迟的流处理引擎,具备统一接口、高性能、低延迟、容错性和可扩展…

软著项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &#x…

@德人合科技 | 数据透明加密防泄密系统\文件文档加密\设计图纸加密|源代码加密防泄密软件系统,——防止内部办公终端核心文件数据/资料外泄!

一款专业的数据防泄密管理系统,它采用了多种加密模式,包括透明加密、半透明加密和落地加密等,可以有效地保护企业的核心数据安全。 PC端访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee …

AWR1642 boost开发板支持的TI参考设计

打开radar_toolbox_1_30_00_05\source\ti\examples\examples_overview,通过输入“1642”查找AWR1642 BOOST支持的参考设计,通过筛选,支持AWR1642 BOOST的参考设计如下: 挑选出两个参考设计上手,一个是“nonos_oob_16xx",不带OS;另一个是”short range radar“,比较…

单月创作15个10w+作品,内容创作迎来新浪潮

据11月16日腾讯发布的Q3财报显示,本季度视频号总播放量同比增长超过50%,原创内容播放量增长强劲,视频号作为微信生态内最具增长潜力的产品之一,已然成为腾讯营收新动力。 为帮助大家更好地洞察视频号平台的内容趋势及创作风向&…

矿山数字孪生-只需要这几步就能快速构建智慧矿山管理系统

在万物互联、智慧协同的技术浪潮下,矿山日常管理及运营中使用到的智慧化平台越来越丰富,而各个管理子系统间往往独立,相互为数据孤岛。智慧矿山管理平台就是将各个孤岛中的数据及功能汇集起来,形成统一的、联动的管理门户。 智慧…

负债127万美元的【后羿国际】申请1亿美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于深圳的后羿国际(HOUYI DIGITAL INTERNET INDUSTRY TECHNOLOGY CO., LTD)近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯…

LabVIEW使用单板RIO开发远程监控电源信号

LabVIEW使用单板RIO开发远程监控电源信号 设计和构建用于智能电网的本地功耗分析系统,主要服务于领先的电力监控设备设计者和制造商。随着智能电网投资的增加,对于能够有效处理替代电源(如太阳能和风能)间歇性功率水平的技术需求…

Swift 中 User Defaults 的读取和写入

文章目录 前言介绍 User Defaults共享 User DefaultsUser Defaults 存储数据类型响应更改监控 User Defaults 更改覆盖User Defaults 设置考虑的替代方案Keychain 用于安全性用于跨平台的 CloudKit 结论 前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的…

如何在 PyQt 中实现异步数据库请求

需求 开发软件的时候不可避免要和数据库发生交互,但是有些 SQL 请求非常耗时,如果在主线程中发送请求,可能会造成界面卡顿。这篇博客将会介绍一种让数据库请求变得和前端的 ajax 请求一样简单,且不会阻塞界面的异步请求方法。 实…

kepler.gl部署在线说明文档

1 概述 1.1 介绍 1、Kepler.gl 是一个强大的开源地理空间分析工具,用于大规模数据集的可视化。它由 Uber 的数据可视化团队开发,并且是基于 Web 技术构建的。Kepler.gl 涉及到以下几个主要技术领域: WebGL: Kepler.gl 通过 WebGL 进行渲染…

jetbrains 新编辑器 Fleet 修改主题颜色

当前Fleet主题只有五种 分别是 1、Dark Purple 2、Fleet Dark 3、Fleet Light 4、Gray 5、Sync with OS 其实这几种都不太好看 对眼睛不友好 可以选择一个白色主题进行自定义编辑 由于参数太多我直接全局替换把白色White换成了Yellow 70 为啥是Yellow 70? 把…

推荐一个可以记录历史进价的进销存软件?

“我是卖数码产品的,数码产品价格变动是比较大的,每次采购时候我都会多家对比价格,再决定在哪个厂家进货。所以基本上我每次进价价格都不一样,但是之前的询价情况又很难一一单独记录,让我采购的时候很被动。” “准备…

C++初学教程三

目录 一、运算符 一、自增自减运算符 二、位运算符 三、关系运算符 注意事项 四、条件运算符 注意事项 五、逻辑运算符 注意事项: 六、逗号运算符 概述 注意事项: 七、小结 运算符优先级和结合性一览表 一、运算符 一、自增自减运算符 运…

「Verilog学习笔记」根据状态转移写状态机-二段式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 和三段式相比,就是将输出块和次态切换块合并。 timescale 1ns/1nsmodule fsm2(input wire clk ,input wire rst ,input wire data ,output reg flag );//****…

Linux Component概述和高通V4l2驱动模型

1 Linux为什么要引入Component框架? 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块,内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

校园后勤数字化转型要怎么做?的修工单管理系统的功能强大吗?

2023年11月27日-29日,由中国教育后勤协会主办,广东省高校后勤协会、物业管理专业委员会、能源管理专业委员会、安全管理专业委员会、中小学后勤分会等协办的第六届中国教育后勤展览会在深圳圆满落幕。 广东工程宝科技有限公司以其创新的“的修工单管理系…

家用保险柜什么牌子好?

家用保险柜的品牌有很多,其中比较知名的有虎牌、得力、永发、思锐、迪堡、艾谱、全能、杰宝-大王、金虎、花都、飞云、威盾斯等等。这些品牌都有各自的特点和优势,例如虎牌品牌是来自于河北,每年生产60多台,质量可靠;得…

国内零代码链接器有哪些?

什么是零代码链接器? 零代码链接器,也是属于零代码集成领域,代表一种可以通过不编写代码就能让不同系统产生数据互通的技术,主要通过授权API接口暴露数据,让不同系统间的数据可以在内部互相调用,实现自动化…

【C++11并发】Atomic 笔记

简介 用atomic定义的变量,支持原子操作,即要么全部完成操作,要不全部没有完成,我们是不可能看到中间状态。一般在多线程程序中,可以用atomic来完成数据同步。 标准库为我们主要提供了四类工具 atomic类模板操作atomi…