当前位置:首页>python>手把手教你用Python写一个俄罗斯方块

手把手教你用Python写一个俄罗斯方块

  • 2026-06-28 09:37:32
手把手教你用Python写一个俄罗斯方块

大家好,欢迎来到 Crossin 的编程教室。

今天我们来尝试用 Python 写一个《俄罗斯方块》游戏。

底层原理

在写代码之前,我们先把这个经典游戏拆解一下。其实,俄罗斯方块在计算机眼里,根本不是什么炫酷的动画,它只是一个“Excel表格”。

游戏场景 = Excel表格:别把游戏画面想得太复杂,它本质上就是一个大的数字表格,就像你平常在 Excel 里用的那种。有固定方块的地方,格子数值就是 1;空着的地方,格子数值就是 0。 

方块下落 = 盖章:所谓的“方块下落”,其实就是程序每隔一段时间,把方块的形状(一个小范围的数字矩阵)“贴”在网格的不同位置上。

消除一行 = 删掉Excel里全是1的行:当某一行被塞满了(全都是 1 ),就把这一行删掉,并在顶部补上一行全 0 的空行,让上面的所有行往下移一格。

接下来,我们就用 Python 的游戏神器 pygame 库,把这些逻辑一步步实现出来。

代码实现

为了让大家看得更明白,我们将游戏的核心逻辑拆分成 4 个关键部分。

1. 方块与地图初始化

原版的俄罗斯方块一共有 7 种,我们用 0 和 1 的矩阵把它们全部定义出来,同时初始化一个 20 x 10 填满 0 的游戏大地图。

# 游戏网格大小COLS, ROWS = 10, 20# 补全 7 种传统方块形状SHAPES = [    [[1, 1, 1, 1]],  # I    [[1, 1, 1], [0, 1, 0]],  # T    [[1, 1], [1, 1]],  # O (田字)    [[1, 1, 0], [0, 1, 1]],  # Z    [[0, 1, 1], [1, 1, 0]],  # S    [[1, 1, 1], [1, 0, 0]],  # L    [[1, 1, 1], [0, 0, 1]]   # J]# 初始化大地图:20行10列的二维列表,初始全为0game_field = [[0 for _ in range(COLS)] for _ in range(ROWS)]

2. 方块旋转碰撞检测

方块旋转的本质就是矩阵翻转(将行变成列,并反转顺序)。

而方块在移动或旋转时,绝对不能穿墙或者穿过已经固定好的旧方块。因此,每次动作前都要进行“预判”。

# 碰撞检测函数:判断方块在指定位置是否合法def check_collision(shape, offset_x, offset_y):    for r_idx, row in enumerate(shape):        for c_idx, val in enumerate(row):            if val:                new_x = offset_x + c_idx                new_y = offset_y + r_idx                # 检查是否越界(左右边界、底部)或撞到已有方块                if new_x < 0 or new_x >= COLS or new_y >= ROWS:                    return True                if new_y >= 0 and game_field[new_y][new_x]:                    return True    return False# 顺时针旋转矩阵def rotate_shape(shape):    return [list(x) for x in zip(*shape[::-1])]

3. 消行并得分

当某一行没有 0 的时候,说明被填满了。我们将其剔除,并在大地图最前面(顶部)塞入一行全新的 0。

def clear_lines():    global game_field, score    # 过滤掉全是1的行,只保留没满的行    new_field = [row for row in game_field if any(val == 0 for val in row)]    cleared = ROWS - len(new_field)  # 删掉了几行    # 补齐上方空行    for _ in range(cleared):        new_field.insert(0, [0 for _ in range(COLS)])    game_field = new_field    score += cleared * 100  # 每消一行加100分

4. 游戏结束与重玩

当新生成的方块在刚出生的地方就发生碰撞,说明堆积的高度已经到顶,游戏结束。此时按下回车键(`K_RETURN`)可以清空分数和地图,重新开始。

# 每次生成新方块时检测if check_collision(current_shape, block_x, block_y):    game_over = True  # 触发游戏结束开关# 重置游戏函数def reset_game():    global game_field, score, game_over, current_shape, block_x, block_y    game_field = [[0 for _ in range(COLS)] for _ in range(ROWS)]    score = 0    game_over = False    current_shape = random.choice(SHAPES)    block_x, block_y = 30

完整游戏代码

把上面的逻辑组装起来,加上画面的绘制和键盘事件响应,就得到了下面这个完整版程序:

import pygameimport random# 初始化 pygamepygame.init()GRID_SIZE = 30COLS, ROWS = 1020SCREEN_WIDTH, SCREEN_HEIGHT = COLS * GRID_SIZE, ROWS * GRID_SIZE + 50 # 底部留白显示分数screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption("Crossin的俄罗斯方块")# 颜色定义BLACK = (000)WHITE = (255255255)GRAY = (505050)RED = (2558734)BLUE = (33150243)# 7 种经典方块SHAPES = [    [[1, 1, 1, 1]],  # I    [[1, 1, 1], [0, 1, 0]],  # T    [[1, 1], [1, 1]],  # O    [[1, 1, 0], [0, 1, 1]],  # Z    [[0, 1, 1], [1, 1, 0]],  # S    [[1, 1, 1], [1, 0, 0]],  # L    [[1, 1, 1], [0, 0, 1]]   # J]game_field = [[0 for _ in range(COLS)] for _ in range(ROWS)]score = 0game_over = Falsecurrent_shape = random.choice(SHAPES)block_x, block_y = 30clock = pygame.time.Clock()fall_time = 0fall_speed = 500  # 方块每 500 毫秒下落一格def check_collision(shape, offset_x, offset_y):    for r_idx, row in enumerate(shape):        for c_idx, val in enumerate(row):            if val:                new_x = offset_x + c_idx                new_y = offset_y + r_idx                if new_x < 0 or new_x >= COLS or new_y >= ROWS:                    return True                if new_y >= 0 and game_field[new_y][new_x]:                    return True    return Falsedef rotate_shape(shape):    return [list(x) for x in zip(*shape[::-1])]def clear_lines():    global game_field, score    new_field = [row for row in game_field if any(val == 0 for val in row)]    cleared = ROWS - len(new_field)    for _ in range(cleared):        new_field.insert(0, [0 for _ in range(COLS)])    game_field = new_field    score += cleared * 100def reset_game():    global game_field, score, game_over, current_shape, block_x, block_y    game_field = [[0 for _ in range(COLS)] for _ in range(ROWS)]    score = 0    game_over = False    current_shape = random.choice(SHAPES)    block_x, block_y = 30running = Truewhile running:    screen.fill(BLACK)    delta_time = clock.tick(60)  # 游戏主循环每秒运行60    fall_time += delta_time    # 1. 事件处理    for event in pygame.event.get():        if event.type == pygame.QUIT:            running = False        if event.type == pygame.KEYDOWN:            if game_over:                if event.key == pygame.K_RETURN:  # 游戏结束时按回车重玩                    reset_game()            else:                if event.key == pygame.K_LEFT:                    if not check_collision(current_shape, block_x - 1, block_y):                        block_x -= 1                if event.key == pygame.K_RIGHT:                    if not check_collision(current_shape, block_x + 1, block_y):                        block_x += 1                if event.key == pygame.K_DOWN:                    if not check_collision(current_shape, block_x, block_y + 1):                        block_y += 1                if event.key == pygame.K_UP:  # 上方向键旋转                    rotated = rotate_shape(current_shape)                    if not check_collision(rotated, block_x, block_y):                        current_shape = rotated    # 2. 自动下落逻辑    if not game_over:        if fall_time >= fall_speed:            fall_time = 0            if not check_collision(current_shape, block_x, block_y + 1):                block_y += 1            else:                # 触底锁定方块                for r_idx, row in enumerate(current_shape):                    for c_idx, val in enumerate(row):                        if val and block_y + r_idx >= 0:                            game_field[block_y + r_idx][block_x + c_idx] = 1                clear_lines()                # 重新生成新方块                current_shape = random.choice(SHAPES)                block_x, block_y = 30                if check_collision(current_shape, block_x, block_y):                    game_over = True    # 3. 画面渲染    # 绘制固定的地图方块    for r in range(ROWS):        for c in range(COLS):            if game_field[r][c]:                pygame.draw.rect(screen, BLUE, (c * GRID_SIZE, r * GRID_SIZE, GRID_SIZE - 1, GRID_SIZE - 1))            else:                pygame.draw.rect(screen, GRAY, (c * GRID_SIZE, r * GRID_SIZE, GRID_SIZE, GRID_SIZE), 1)    # 绘制当前下落的方块    if not game_over:        for r_idx, row in enumerate(current_shape):            for c_idx, val in enumerate(row):                if val:                    x = (block_x + c_idx) * GRID_SIZE                    y = (block_y + r_idx) * GRID_SIZE                    pygame.draw.rect(screen, RED, (x, y, GRID_SIZE - 1, GRID_SIZE - 1))    # 4. UI 文本显示    font = pygame.font.SysFont("SimHei"24)   # mac改为 "songti"    score_text = font.render(f"得分: {score}", True, WHITE)    screen.blit(score_text, (10, SCREEN_HEIGHT - 40))    if game_over:        over_text = font.render("游戏结束! 按回车重新开始", True, RED)        screen.blit(over_text, (SCREEN_WIDTH // 2 - over_text.get_width() // 2, SCREEN_HEIGHT // 2 - 20))    pygame.display.flip()pygame.quit()

新手建议

开发过程中有一些新手常会踩到的坑,这里列一下,大家注意“避坑”:

1. 方块一晃眼就掉到底,根本反应不过来 

忘记写 clock.tick(5)。如果没有这个限速器,Python 会以极快的速度运行循环。你也可以根据实际运行的速度调节这个参数值。

2. 旋转时方块有时候会卡进墙里或者报错

没有在旋转之前做碰撞检测的预判。必须先用 check_collision 判断返回 False 后才能执行旋转操作。

3. 中文显示不正确或代码报错 SyntaxError

中文的问题包括两种,一种是游戏中的中文显示,一种是代码中的中文。

游戏中显示中文需要有相应的字体支持。Win 和 Mac 系统自带的字体不一样,要做不同设置。

而代码里的逗号、括号、引号必须是英文半角。新手经常在打完中文之后忘了切换输入法而导致输错了符号,这里尤其要注意。

看到这里,相信你已经理解了开发《俄罗斯方块》的思路。但看懂不等于学会,不如现在就打开电脑,把这段代码复制进去跑一下,然后在此基础上做一些优化吧。这样既玩到了游戏,又提升了代码水平,还收获了成就感,一举多得,何乐而不为?

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~


添加微信 crossin123 ,加入编程教室共同学习~
感谢转发点赞的各位~

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 03:49:03 HTTP/2.0 GET : https://f.mffb.com.cn/a/498640.html
  2. 运行时间 : 0.173468s [ 吞吐率:5.76req/s ] 内存消耗:5,046.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a14d91bc7d0af40d0971705d2bd4304e
  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.000594s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000838s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000341s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000320s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000547s ]
  6. SELECT * FROM `set` [ RunTime:0.000262s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000619s ]
  8. SELECT * FROM `article` WHERE `id` = 498640 LIMIT 1 [ RunTime:0.005136s ]
  9. UPDATE `article` SET `lasttime` = 1783021743 WHERE `id` = 498640 [ RunTime:0.016289s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000369s ]
  11. SELECT * FROM `article` WHERE `id` < 498640 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001409s ]
  12. SELECT * FROM `article` WHERE `id` > 498640 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002779s ]
  13. SELECT * FROM `article` WHERE `id` < 498640 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000846s ]
  14. SELECT * FROM `article` WHERE `id` < 498640 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008335s ]
  15. SELECT * FROM `article` WHERE `id` < 498640 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.063927s ]
0.174952s