当前位置:首页>python>Python实现复杂迷宫

Python实现复杂迷宫

  • 2026-02-05 01:08:11
Python实现复杂迷宫

如果你工作累了,可以通过小游戏缓解一下,这段迷宫游戏代码的核心知识点,并用清晰的逻辑梳理出来,最后进行总结。这段代码是基于Pygame实现的带按钮控制的复杂迷宫游戏,我们来逐个拆解其中的关键知识点,从基础到进阶逐步讲解。

一、 基础前置知识点

1. 模块导入与Pygame初始化

import pygameimport randomimport sys
  • pygame:Python的2D游戏开发库,提供了窗口创建、图形绘制、事件监听(鼠标/键盘)等核心功能,是这段代码的运行基础。
  • random:提供随机数/随机排序功能,用于迷宫生成的随机性(打乱方向、选择分支)。
  • sys:用于程序退出时的系统级收尾(sys.exit())。
# Pygame初始化流程(固定套路)pygame.init()  # 初始化Pygame所有模块(图形、声音等)screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))  # 创建游戏窗口,返回绘制画布pygame.display.set_caption("复杂路线迷宫(按钮控制)")  # 设置窗口标题clock = pygame.time.Clock()  # 创建时钟对象,用于控制游戏帧率font = pygame.font.Font(None36)  # 创建字体对象,用于绘制文字(按钮上的文字)
  • 关键说明:screen 是Pygame的「绘制画布」,所有图形/文字都要绘制在这个对象上;clock.tick(60) 表示限制游戏每秒刷新60次,避免窗口运行过卡。

2. 常量配置与字典存储颜色

# 迷宫尺寸常量(全大写命名是Python常量的约定)MAZE_WIDTH = 81MAZE_HEIGHT = 51CELL_SIZE = 15WINDOW_WIDTH = MAZE_WIDTH * CELL_SIZEWINDOW_HEIGHT = MAZE_HEIGHT * CELL_SIZE + 100# 颜色字典(键值对形式,便于管理和调用)COLORS = {"bg": (242424),"wall": (505050),    ...}
  • 知识点1:常量命名规范:全大写字母+下划线,标识这些值在程序运行中不修改(虽然Python没有真正的常量,这是一种约定俗成的编码规范)。
  • 知识点2:Pygame颜色格式:使用(R, G, B)三元组,每个值的范围是0-255,分别对应红、绿、蓝三原色的亮度。
  • 知识点3:字典的实用场景:将相关联的多个数据(这里是所有颜色)归类存储,通过「键名」调用,比单独定义多个变量更易维护(比如修改背景色,只需要改COLORS["bg"]即可)。
  • 补充:迷宫尺寸设为奇数的原因:保证迷宫的边界是完整墙壁,且通路能从左上角(1,1)延伸到右下角(height-2, width-2),避免通路断裂。

二、 核心功能知识点

1. 迷宫生成:优化DFS(深度优先搜索)算法

这是这段代码的核心难点,create_maze()函数实现了迷宫生成,基于深度优先搜索(DFS)+随机化优化

先理解基础概念

  • 迷宫的存储结构:二维列表(二维数组)

    maze = [[1for _ in range(width)] for _ in range(height)]
    • 二维列表的每个元素代表一个「格子」,用数字标识格子类型:1=墙壁0=通路2=起点3=终点
    • 初始化时,所有格子都设为1(墙壁),后续通过算法「挖通」部分格子变为0(通路)。
  • DFS算法的核心载体:栈(Stack)

    • 栈的特点是「先进后出(LIFO)」,这里用Python的列表实现栈功能:append()(压栈,添加元素到列表末尾)、pop()(弹栈,删除列表末尾元素)。
    • DFS的思路:从起点出发,一路向深处探索,直到无路可走再「回溯」,探索其他未走的分支,最终遍历所有可到达的区域。

算法步骤拆解(对应代码逻辑)

  1. 初始化起点:将起点(1,1)设为通路(0),并压入栈中。
  2. 方向随机化:每次循环用random.sample()打乱上下左右四个方向,增加路线随机性。
    shuffled_directions = random.sample(base_directions, len(base_directions))
    • random.sample():从列表中抽取指定数量的元素,返回一个新的乱序列表,且不重复抽取,这里用于打乱方向列表。
  3. 边界与未访问判断:检查新坐标是否在迷宫范围内,且仍是墙壁(1,未被访问)。
    if1 <= new_x < width - 1and1 <= new_y < height - 1and maze[new_y][new_x] == 1:
  4. 挖通通路:因为每次移动2格((0,±2)(±2,0)),所以需要挖通当前格子和新格子之间的中间格子(dy//2dx//2),形成连续通路。
    maze[current_y + dy//2][current_x + dx//2] = 0# 挖通中间墙壁maze[new_y][new_x] = 0# 挖通新格子
  5. 压栈继续探索/弹栈回溯:有未访问方向则压栈新坐标,继续深度探索;无未访问方向则弹栈,回到上一个格子探索其他分支。
  6. 标记起点终点:将左上角(1,1)设为2,右下角(height-2, width-2)设为3,拉开距离增加游戏难度。

优化点说明(提升迷宫复杂度)

  • 优化1:每次循环打乱方向列表,避免固定方向探索(比如一直先向上再向右),让路线更不可预测。
  • 优化2:从可用方向中随机选择一个,而不是按固定顺序,增加分支多样性,形成更多迂回路线。

2. 图形绘制:draw_maze() 函数

核心是Pygame的矩形绘制和二维列表遍历,实现迷宫和玩家的可视化。

defdraw_maze(maze, player_pos):    screen.fill(COLORS["bg"])  # 先填充背景色,清空上一帧内容(避免残影)# 双重for循环遍历二维列表(迷宫的每个格子)for y in range(MAZE_HEIGHT):for x in range(MAZE_WIDTH):# 创建矩形对象:(x坐标, y坐标, 宽度, 高度)            rect = pygame.Rect(x*CELL_SIZE, y*CELL_SIZE, CELL_SIZE, CELL_SIZE)# 根据格子值绘制不同颜色的矩形if maze[y][x] == 1:                pygame.draw.rect(screen, COLORS["wall"], rect)            ...# 绘制玩家(矩形,带黑色边框)    pygame.draw.rect(screen, COLORS["player"], player_rect)    pygame.draw.rect(screen, (0,0,0), player_rect, 2)  # 最后一个参数是边框宽度(不填则填充)
  • 关键知识点1:Pygame绘制流程:先填充背景清空上一帧,再绘制当前帧的所有元素,最后通过pygame.display.flip()刷新窗口,显示当前帧。
  • 关键知识点2:二维列表遍历顺序:外层y(纵向),内层x(横向),对应迷宫的行列结构,避免绘制错位。
  • 关键知识点3:**pygame.Rect**:Pygame的矩形对象,用于描述图形的位置和尺寸,是绘制矩形、碰撞检测的基础。

3. 按钮实现:Button 类(面向对象编程)

这段代码使用了面向对象(OOP)的思想,定义Button类封装按钮的属性和行为,便于创建多个按钮(上、下、左、右)。

类的核心组成

  1. __init__ 构造方法:初始化按钮的属性(矩形区域、文字),创建按钮时自动调用。
    def__init__(self, x, y, w, h, text):    self.rect = pygame.Rect(x, y, w, h)  # 按钮的矩形区域(用于绘制和碰撞检测)    self.text = text  # 按钮上的文字
  2. draw() 方法:封装按钮的绘制逻辑,包括悬浮变色和文字居中。
    • self.rect.collidepoint(pygame.mouse.get_pos()):碰撞检测,判断鼠标是否在按钮矩形内,实现悬浮变色效果。
    • font.render():将文字转换为可绘制的表面(Surface)对象。
    • text_surf.get_rect(center=self.rect.center):让文字矩形的中心与按钮矩形的中心重合,实现文字居中。
    • screen.blit():将文字表面绘制到窗口画布上(blit是Pygame绘制图像/文字的核心方法)。
  3. is_clicked() 方法:封装按钮的点击判断逻辑,检测是否是鼠标左键点击,且点击位置在按钮内。

面向对象的优势

  • 封装性:按钮的属性(recttext)和行为(draw()is_clicked())都封装在类中,代码更整洁。
  • 可复用性:创建多个按钮只需调用Button()构造方法,无需重复编写绘制和点击判断的代码。

4. 移动校验:is_valid() 函数

实现玩家移动的合法性判断,防止玩家穿墙(进入墙壁格子)和越界(超出迷宫范围)。

defis_valid(maze, x, y):return0 <= x < MAZE_WIDTH and0 <= y < MAZE_HEIGHT and maze[y][x] != 1
  • 逻辑说明:返回True的条件有三个(同时满足):
    1. x坐标在0MAZE_WIDTH-1之间(横向不越界)。
    2. y坐标在0MAZE_HEIGHT-1之间(纵向不越界)。
    3. 目标格子不是墙壁(maze[y][x] != 1)。

5. 主函数:main() (游戏主循环)

游戏的核心控制流程,实现事件监听、逻辑更新、画面绘制的循环执行,这是Pygame游戏的标准架构。

主循环的核心结构

running = Truewhile running:  # 游戏主循环(只要running为True,就一直运行)    clock.tick(60)  # 控制帧率为60FPS# 1. 事件监听(处理用户输入:关闭窗口、鼠标点击、键盘按键)for event in pygame.event.get():if event.type == pygame.QUIT:  # 关闭窗口事件            running = False# 按钮点击事件处理# 键盘按键事件处理# 2. 绘制当前帧(迷宫、玩家、按钮)    draw_maze(maze, player_pos)for btn in buttons:        btn.draw()# 3. 刷新窗口,显示当前帧    pygame.display.flip()# 游戏退出,收尾工作pygame.quit()sys.exit()
  • 关键知识点1:事件队列pygame.event.get()获取所有用户输入事件(鼠标、键盘、窗口操作等),通过遍历事件队列处理对应的逻辑。
  • 关键知识点2:两种输入处理方式
    • 鼠标点击/窗口关闭:属于「一次性事件」,在event队列中处理(event.type == pygame.MOUSEBUTTONDOWN)。
    • 键盘方向键:这里用了KEYDOWN(按键按下时触发),也可以用pygame.key.get_pressed()(获取当前所有按下的按键,适合持续移动)。
  • 关键知识点3:游戏退出流程:先调用pygame.quit()关闭Pygame所有模块,再调用sys.exit()退出Python程序,避免资源泄露。

6. 程序入口:if __name__ == "__main__":

Python的标准程序入口,当直接运行该脚本时,__name__会被设为"__main__",从而执行main()函数;如果该脚本被作为模块导入到其他脚本中,main()函数不会被自动执行,提高了代码的复用性。


三、 总结

核心知识点回顾

  1. Pygame基础:窗口初始化、图形绘制(pygame.draw.rect)、文字渲染(font.render)、事件监听、帧率控制,这是2D游戏开发的基础框架。
  2. 数据结构:使用二维列表存储迷宫数据,使用栈(列表append()/pop())实现DFS算法的深度探索与回溯。
  3. 算法思想:基于深度优先搜索(DFS)的迷宫生成算法,通过随机化方向提升迷宫复杂度,核心是「探索-回溯」的循环逻辑。
  4. 面向对象编程:定义Button类封装按钮的属性和行为,实现代码的封装与复用,这是复杂程序开发的核心思想。
  5. 游戏核心流程:「事件监听-逻辑更新-画面绘制-窗口刷新」的主循环,这是所有交互式图形程序的通用架构。
  6. 辅助知识点:常量命名规范、字典管理相关数据、碰撞检测、移动合法性校验、随机数的应用。

程序整体逻辑梳理

这段代码的执行流程是:导入模块→配置常量→初始化Pygame→生成迷宫→创建按钮→进入游戏主循环(处理用户输入→更新玩家位置→绘制所有元素→刷新窗口)→退出程序,每个步骤都围绕「实现一个可交互的复杂迷宫游戏」这个核心目标,层层递进、各司其职。

完整代码

这份迷宫游戏的完整可运行代码(已确保无遗漏、可直接执行),以及对应的核心知识点总结,我整理完整代码,再进行详细知识点提炼。

一、完整可运行代码

这份代码在你原有基础上做了微小的健壮性优化,确保直接复制即可运行,无报错:

import pygameimport randomimport sys# 1. 配置(核心:增大迷宫尺寸,提升路线复杂度基础)MAZE_WIDTH = 81# 从21提升到81(奇数,保证通路完整性)MAZE_HEIGHT = 51# 从15提升到51(奇数,增加纵向分支)CELL_SIZE = 15# 适当缩小格子尺寸,避免窗口过大WINDOW_WIDTH = MAZE_WIDTH * CELL_SIZEWINDOW_HEIGHT = MAZE_HEIGHT * CELL_SIZE + 100# 底部留空间放按钮# 颜色(简洁风格,保留原有配置)COLORS = {"bg": (242424),"wall": (505050),"path": (255255255),"start": (02550),"end": (25500),"player": (00255),"button": (100100100),"button_hover": (150150150),"button_text": (255255255)}# 初始化pygame.init()screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))pygame.display.set_caption("复杂路线迷宫(按钮控制)")clock = pygame.time.Clock()font = pygame.font.Font(None36)# 2. 生成复杂路线迷宫(优化DFS算法,增加分支和迂回路线)defcreate_maze(width, height):"""    优化DFS算法生成复杂路线迷宫:    1. 更大的迷宫尺寸提供更多分支空间    2. 随机打乱方向列表,增加路线随机性    3. 保留更多未访问分支,提升迂回复杂度    """    maze = [[1for _ in range(width)] for _ in range(height)]    stack = []    start_x, start_y = 11    maze[start_y][start_x] = 0    stack.append((start_x, start_y))# 基础四个移动方向(每次移动2格,挖通中间墙壁)    base_directions = [(0-2), (02), (-20), (20)]while stack:        current_x, current_y = stack[-1]        unvisited = []# 关键优化1:每次循环随机打乱方向列表,增加路线不可预测性        shuffled_directions = random.sample(base_directions, len(base_directions))for dx, dy in shuffled_directions:            new_x = current_x + dx            new_y = current_y + dy# 边界判断:确保新坐标在迷宫范围内,且未被访问(仍为墙壁)if1 <= new_x < width - 1and1 <= new_y < height - 1and maze[new_y][new_x] == 1:                unvisited.append((dx, dy))if unvisited:# 关键优化2:随机选择未访问方向,增加分支多样性(核心提升复杂度)            dx, dy = random.choice(unvisited)            new_x = current_x + dx            new_y = current_y + dy# 挖通当前格子到新格子的中间墙壁,形成连续通路            maze[current_y + dy//2][current_x + dx//2] = 0            maze[new_y][new_x] = 0# 将新格子压入栈,继续深度探索,形成更多分支            stack.append((new_x, new_y))else:# 无未访问方向,回溯(弹出栈顶),探索其他分支            stack.pop()# 标记起点和终点(拉开距离,增加探索路径长度)    maze[1][1] = 2# 起点(左上角)    maze[height-2][width-2] = 3# 终点(右下角)return maze# 3. 绘制迷宫和玩家defdraw_maze(maze, player_pos):    screen.fill(COLORS["bg"])for y in range(MAZE_HEIGHT):for x in range(MAZE_WIDTH):            rect = pygame.Rect(x*CELL_SIZE, y*CELL_SIZE, CELL_SIZE, CELL_SIZE)if maze[y][x] == 1:                pygame.draw.rect(screen, COLORS["wall"], rect)elif maze[y][x] == 0:                pygame.draw.rect(screen, COLORS["path"], rect)elif maze[y][x] == 2:                pygame.draw.rect(screen, COLORS["start"], rect)elif maze[y][x] == 3:                pygame.draw.rect(screen, COLORS["end"], rect)# 绘制玩家    px, py = player_pos    player_rect = pygame.Rect(px*CELL_SIZE, py*CELL_SIZE, CELL_SIZE, CELL_SIZE)    pygame.draw.rect(screen, COLORS["player"], player_rect)    pygame.draw.rect(screen, (0,0,0), player_rect, 2)# 4. 按钮类(保留原有功能,支持悬浮变色和点击)classButton:def__init__(self, x, y, w, h, text):        self.rect = pygame.Rect(x, y, w, h)        self.text = textdefdraw(self):        color = COLORS["button_hover"if self.rect.collidepoint(pygame.mouse.get_pos()) else COLORS["button"]        pygame.draw.rect(screen, color, self.rect)        pygame.draw.rect(screen, (0,0,0), self.rect, 2)        text_surf = font.render(self.text, True, COLORS["button_text"])        text_rect = text_surf.get_rect(center=self.rect.center)        screen.blit(text_surf, text_rect)defis_clicked(self, event):if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:return self.rect.collidepoint(event.pos)returnFalse# 5. 移动校验(保留原有功能,防止玩家穿墙和越界)defis_valid(maze, x, y):return0 <= x < MAZE_WIDTH and0 <= y < MAZE_HEIGHT and maze[y][x] != 1# 6. 主函数(保留按钮控制和键盘控制)defmain():# 生成复杂路线迷宫    maze = create_maze(MAZE_WIDTH, MAZE_HEIGHT)    player_pos = (11)# 创建按钮    btn_w, btn_h = 8050    btn_y = MAZE_HEIGHT * CELL_SIZE + 20    btn_up = Button(WINDOW_WIDTH//2 - btn_w//2, btn_y, btn_w, btn_h, "上")    btn_down = Button(WINDOW_WIDTH//2 - btn_w//2, btn_y + 60, btn_w, btn_h, "下")    btn_left = Button(WINDOW_WIDTH//2 - btn_w - 20, btn_y + 60, btn_w, btn_h, "左")    btn_right = Button(WINDOW_WIDTH//2 + 20, btn_y + 60, btn_w, btn_h, "右")    buttons = [btn_up, btn_down, btn_left, btn_right]    running = Truewhile running:        clock.tick(60)  # 限制帧率为60FPS,防止画面闪烁for event in pygame.event.get():if event.type == pygame.QUIT:                running = False# 按钮点击控制玩家移动if btn_up.is_clicked(event):                x, y = player_posif is_valid(maze, x, y-1):                    player_pos = (x, y-1)if btn_down.is_clicked(event):                x, y = player_posif is_valid(maze, x, y+1):                    player_pos = (x, y+1)if btn_left.is_clicked(event):                x, y = player_posif is_valid(maze, x-1, y):                    player_pos = (x-1, y)if btn_right.is_clicked(event):                x, y = player_posif is_valid(maze, x+1, y):                    player_pos = (x+1, y)# 保留键盘方向键控制if event.type == pygame.KEYDOWN:                x, y = player_posif event.key == pygame.K_UP and is_valid(maze, x, y-1):                    player_pos = (x, y-1)if event.key == pygame.K_DOWN and is_valid(maze, x, y+1):                    player_pos = (x, y+1)if event.key == pygame.K_LEFT and is_valid(maze, x-1, y):                    player_pos = (x-1, y)if event.key == pygame.K_RIGHT and is_valid(maze, x+1, y):                    player_pos = (x+1, y)# 绘制迷宫、玩家和按钮        draw_maze(maze, player_pos)for btn in buttons:            btn.draw()# 更新整个屏幕显示        pygame.display.flip()# 退出游戏,释放资源    pygame.quit()    sys.exit()if __name__ == "__main__":    main()

二、前置运行条件

运行前需要安装pygame库,终端执行以下命令:

pip install pygame

三、核心知识点总结

1.  迷宫生成核心:优化版DFS(深度优先搜索)算法

  • 核心思想:“探索-回溯”,利用栈(stack)存储当前探索路径,先深度挖掘一条路径直到无路可走,再回溯寻找其他未探索分支,最终生成连通的迷宫。
  • 关键优化点:
  1. 迷宫尺寸采用奇数(81、51):保证起点/终点在通路中,且每次移动2格时,中间有可挖通的墙壁,避免通路断裂。
  2. 随机打乱方向列表(random.sample):打破固定方向探索的规律性,增加路线不可预测性。
  3. 随机选择未访问方向:生成更多分支和迂回路线,提升迷宫复杂度,而非单一的“一条路走到黑”。
  • 核心操作:每次移动2格,同时将当前格子与新格子中间的墙壁置为0(挖通),形成连续通路。

2.  Pygame核心基础用法

  • 游戏初始化与窗口创建:pygame.init() 初始化所有模块,pygame.display.set_mode() 创建游戏窗口,pygame.display.set_caption() 设置窗口标题。
  • 游戏主循环:while running 是游戏的核心循环,负责处理事件、更新逻辑、绘制画面,缺一不可。
  • 事件处理:pygame.event.get() 获取所有事件,处理窗口关闭(pygame.QUIT)、鼠标点击(pygame.MOUSEBUTTONDOWN)、键盘按键(pygame.KEYDOWN)。
  • 图形绘制:pygame.draw.rect() 绘制矩形(迷宫格子、按钮、玩家),screen.blit() 绘制文字表面(按钮上的文字),screen.fill() 清空屏幕(防止画面残留)。
  • 帧率控制:clock.tick(60) 限制帧率为60FPS,避免CPU占用过高,同时保证画面流畅不闪烁。
  • 画面更新:pygame.display.flip() 刷新整个屏幕,将绘制的内容展示给用户。

3.  面向对象基础(Button类)

  • 类的定义与实例化:class Button 定义按钮类,封装按钮的属性(rect 矩形区域、text 按钮文字)和方法(draw 绘制、is_clicked 判断是否被点击)。
  • 封装的优势:将按钮的相关逻辑集中在类中,无需重复编写代码,便于后续添加更多按钮(如“重新生成迷宫”),提升代码可维护性。
  • 核心功能实现:利用rect.collidepoint() 判断鼠标是否在按钮区域内,实现按钮悬浮变色和点击判定。

4.  游戏逻辑辅助

  • 移动合法性校验(is_valid函数):防止玩家穿墙(maze[y][x] != 1)和越界(坐标在迷宫宽高范围内),是游戏逻辑的“安全屏障”。
  • 坐标映射:将迷宫的格子坐标(x, y)通过 x*CELL_SIZEy*CELL_SIZE 映射为屏幕像素坐标,实现迷宫在窗口中的正常显示。
  • 多控制方式支持:同时支持鼠标按钮点击和键盘方向键控制,提升游戏的易用性。

5.  其他关键细节

  • 列表推导式创建迷宫:[[1 for _ in range(width)] for _ in range(height)] 快速创建二维数组(迷宫),初始值全为1(墙壁)。
  • 游戏退出:pygame.quit() 释放pygame资源,sys.exit() 退出Python程序,保证程序正常终止。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 12:04:52 HTTP/2.0 GET : https://f.mffb.com.cn/a/472241.html
  2. 运行时间 : 0.107554s [ 吞吐率:9.30req/s ] 内存消耗:4,699.13kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1199935c551c82053065ec163b0e9430
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000671s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000812s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000414s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000260s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000490s ]
  6. SELECT * FROM `set` [ RunTime:0.000233s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000630s ]
  8. SELECT * FROM `article` WHERE `id` = 472241 LIMIT 1 [ RunTime:0.000868s ]
  9. UPDATE `article` SET `lasttime` = 1770523492 WHERE `id` = 472241 [ RunTime:0.009035s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000321s ]
  11. SELECT * FROM `article` WHERE `id` < 472241 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000477s ]
  12. SELECT * FROM `article` WHERE `id` > 472241 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000395s ]
  13. SELECT * FROM `article` WHERE `id` < 472241 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006554s ]
  14. SELECT * FROM `article` WHERE `id` < 472241 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.011472s ]
  15. SELECT * FROM `article` WHERE `id` < 472241 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001575s ]
0.109426s