60行Python PyGame代码实现简单的迷宫游戏

 更新时间:2023年12月30日 08:42:48   作者:微小冷  
这篇文章主要为大家详细介绍如何通过了60行Python PyGame代码实现一个简单的迷宫游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

迷宫

迷宫的逻辑很简单,就是用上下左右键控制方块运动,然后定义一下墙壁,指明方块不能穿过墙壁即可。

当然,还是老规矩,在具体实现之前,先设置一些常量

import pygame
import sys

# 定义颜色
GRAY = (205, 205, 205)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
SIZE = 40

接下来设置一个按键字典,用于控制方块运动

KEY_DCT = {
    pygame.K_LEFT : [-1, 0],
    pygame.K_RIGHT : [1, 0],
    pygame.K_UP : [0, -1],
    pygame.K_DOWN : [0, 1]
}

以左键为例,当左键按左时,方块的纵坐标不变,而横坐标减去1,顾对应( − 1 , 0 ) (-1,0)(−1,0)。

迷宫表示以及初始化

考虑到更好的自定义迷宫的支持,采用字符列表作为迷宫的映射,以#, I, O分别表示墙壁、玩家位置以及出口位置。从而上面的迷宫可表示如下

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

​​​​​​​maze = [list(m) for m in maze]

之所以采用嵌套的字符列表,乃因字符串不支持类似s[1]=2这种操作。

接下来要做的,就是定义一个绘图函数,可以将迷宫和玩家统一绘制出来,实现如下。如果后续有升级的需求,在迷宫中放置一些不明物体,从而需要的字符种类更多,那么可以考虑将绘图逻辑封装成字典。

# 绘制迷宫地图
def init(strLst = maze):
    # 第i行,第j列
    for i,s in enumerate(strLst):
        for j,ch in enumerate(s):
            if ch not in "#IO":
                continue
            rect = (j*SIZE, i*SIZE, SIZE, SIZE)
            if ch == "#":
                pygame.draw.rect(win, GRAY, rect,5)
            elif ch == "I":
                player = [j, i]
                pygame.draw.rect(win, RED, rect)
            elif ch == "O":
                pExit = [j, i]
                pygame.draw.rect(win, GREEN, rect)
    return player, pExit

游戏主循环

在实现主循环之前,需要对pygame进行初始化,包括初始化窗口等

# 初始化pygame
pygame.init()
win = pygame.display.set_mode(
    (len(maze[0]) * SIZE, len(maze) * SIZE))
pygame.display.set_caption("迷宫游戏")
running = True

其中,running为游戏结束的判定变量,其主循环内容如下

到此这篇关于60行Python PyGame代码实现简单的迷宫游戏的文章就介绍到这了,更多相关Python PyGame迷宫内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt 线程类 QThread使用详解

    PyQt 线程类 QThread使用详解

    QThread是我们将要详细介绍的第一个类。它也是 Qt 线程类中最核心的底层类。由于 PyQt 的跨平台特性,QThread要隐藏掉所有平台相关的代码。
    2017-07-07
  • Python实现加密接口测试方法步骤详解

    Python实现加密接口测试方法步骤详解

    这篇文章主要介绍了Python实现加密接口测试方法步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python中的GUI实现计算器

    python中的GUI实现计算器

    这篇文章主要介绍了如何利用python中的GUI实现计算器,文章教大家用用python的GUI做界面布局,计算器代码熟悉控件的使用方法、优化计算器代码,解决获取按钮文本的方法,具有一定的参考价值,需要的朋友可以参考一下
    2021-12-12
  • Python实现Dijkstra算法

    Python实现Dijkstra算法

    今天小编就为大家分享一篇关于Python实现Dijkstra算法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 彻底搞懂python 迭代器和生成器

    彻底搞懂python 迭代器和生成器

    这篇文章主要介绍了python 迭代器和生成器的相关资料,文中讲解非常细致,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • python版本单链表实现代码

    python版本单链表实现代码

    这篇文章主要为大家详细介绍了python版本单链表实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python实现获取磁盘剩余空间的2种方法

    Python实现获取磁盘剩余空间的2种方法

    这篇文章主要介绍了Python实现获取磁盘剩余空间的2种方法,结合具体实例形式分析了Python操作计算机硬件的相关实现技巧,需要的朋友可以参考下
    2017-06-06
  • 元组列表字典(莫烦python基础)

    元组列表字典(莫烦python基础)

    这篇文章主要介绍了python元组列表字典,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 对Python多线程读写文件加锁的实例详解

    对Python多线程读写文件加锁的实例详解

    今天小编就为大家分享一篇对Python多线程读写文件加锁的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python元组的定义及使用

    Python元组的定义及使用

    这篇文章主要介绍了Python元组的定义及使用,在Python中元组是一个和列表非常类似的数据类型,不同之处就是列表中的元素可以修改,而元组之中的元素不可以修改。想具体了解的下小伙伴请参考下面文章的具体内容,希望对你有所帮助
    2021-11-11

最新评论