当前位置:首页>python>用Python写一个可视化的点球大战游戏

用Python写一个可视化的点球大战游戏

  • 2026-08-18 23:10:23
用Python写一个可视化的点球大战游戏

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

之前我用 Python 写过一个罚点球小游戏:

Python写个“点球大战”小游戏

这个游戏是在终端里通过输入数字来选择射门/扑救的方向(可选左/中/右3个方向),玩家和程序轮换进行射门,如果射门和扑救方向不同就算进球,仿照世界杯点球大战的规则进行多轮。

程序代码比较简单,可以看作是对 Python 中列表、循环、条件判断和 random 模块的练习。

今天我们再进一步,把它做成一个可视化的窗口游戏:通过点击选择方向,并通过图形化的展示让射门和扑救的方向一目了然。

1. tkinter 创建窗口应用

要实现我们想要的可视化效果,需要用到绘制界面的 GUI 库。

在 Python 中做简单的带界面程序,最省心的就是用内置的 Tkinter 库,无需安装,开箱即用。创建一个基础窗口只需要三步:

import tkinter as tkroot = tk.Tk()  # 1. 创建主窗口root.title("点球大战")  # 2. 设置标题root.geometry("300x200")  # 设置窗口大小root.mainloop()  # 3. 让窗口持续运行并监听事件

2. Canvas 绘制游戏元素

有了窗口还不够,我们需要能“画”出球场、球门、足球、守门员等游戏元素。这时候就要用到 tkinter 的 Canvas(画布)组件。

通过指定坐标,可以在 Canvas 上面画出各种几何图形:

import tkinter as tkroot = tk.Tk()# 创建一块 500x220 的绿草地画布canvas = tk.Canvas(root, width=500, height=220, bg="#228B22")canvas.pack()# 1. 画球门:用 create_rectangle(左, 上, 右, 下) 画白色矩形框canvas.create_rectangle(10030400180, outline="white", width=5)# 2. 画守门员:用蓝色矩形代表门将,放在球门中间gk = canvas.create_rectangle(235100265150, fill="#1E90FF", outline="white")# 3. 画足球:用 create_oval(...) 画一个黄色圆圈,放在罚球点ball = canvas.create_oval(240190260210, fill="#FFD700", outline="black")root.mainloop()

3. 组件布局管理

游戏窗口上除了绘制游戏元素,还需要有选择方向的按钮和提示文本。

我打算把提示文字放在上方,把6个方向按钮放在下方排成2行3列。

Tkinter 提供了 pack()(上下堆叠)和 grid()(网格矩阵)两种经典的布局管理器来控制界面上的组件摆放:

import tkinter as tkroot = tk.Tk()root.geometry()# 用 pack() 把状态标签放在最上方status_label = tk.Label(root, text="请选择你的射门方向:", font=("Arial"12))status_label.pack(pady=10)# 创建一块 500x220 的绿草地画布canvas = tk.Canvas(root, width=500, height=220, bg="#228B22")canvas.pack()canvas.create_rectangle(10030400180, outline="white", width=5)gk = canvas.create_rectangle(235100265150, fill="#1E90FF", outline="white")ball = canvas.create_oval(240190260210, fill="#FFD700", outline="black")# 创建一个容器专门放按钮btn_frame = tk.Frame(root)btn_frame.pack()# 用 grid(row, column) 把6个按钮排成 2行 * 3列directions = ["左上", "上", "右上", "左", "中", "右"]for i, name in enumerate(directions):    btn = tk.Button(btn_frame, text=name, width=8, height=2)    btn.grid(row=i // 3, column=i % 3, padx=5, pady=5)root.mainloop()

4. 按钮交互:让画面动起来

按钮排好后,还要增加点击响应。我们可以通过 command 参数为按钮绑定点击事件,并利用 canvas.coords() 动态改变画布组件的坐标,让守门员向指定方向“扑”过去:

import tkinter as tk# 6个方向的守门员扑球坐标位置GK_POS = {    "左上": (15050),    "上": (25050),    "右上": (35050),    "左": (150130),    "中": (250130),    "右": (350130),}def move_gk(direction):    # 点击按钮后,获取对应方向的坐标    gx, gy = GK_POS[direction]    # 更新画布上守门员矩形的位置    canvas.coords(gk_marker, gx - 15, gy - 25, gx + 15, gy + 25)root = tk.Tk()canvas = tk.Canvas(root, width=500, height=200, bg="#228B22")canvas.pack()canvas.create_rectangle(10030400180, outline="white", width=4)# 创建守门员gk_marker = canvas.create_rectangle(    235100265150, fill="#FFD700", outline="white")# 创建按钮,并通过 lambda 传递各自的方向参数btn_frame = tk.Frame(root)btn_frame.pack()for i, d in enumerate(GK_POS.keys()):    # 核心:点击时触发 move_gk 函数并带上方向参数    btn = tk.Button(        btn_frame, text=d, command=lambda direction=d: move_gk(direction)    )    btn.grid(row=i // 3, column=i % 3, padx=5, pady=5)root.mainloop()

完整示例代码

把以上四个核心部分组合起来,再加上比赛计分、轮流攻防切换、10%踢飞概率以及配套的文字提示,就完成了这个可视化的点球大战游戏。

你可以直接复制到编辑器中运行体验:

import randomimport tkinter as tkfrom tkinter import messagebox# 6个方向在宽画布中的坐标定义DIRECTIONS = {    "左上": (15050),    "上": (25050),    "右上": (35050),    "左": (150130),    "中": (250130),    "右": (350130),}class PenaltyGameSmooth:    def __init__(self, root):        self.root = root        self.root.title("点球大战(内嵌提示版) ⚽")        self.root.geometry("550x530")  # 稍微加高一点点,给结果文字留出空间        # 游戏状态        self.is_player_shooting = True  # True: 玩家射门, False: 电脑射门        self.round_num = 1        self.is_waiting_next = (            False  # 锁状态:防止玩家在动画展示的1.5秒内重复连续点击按钮        )        # 双方固定颜色(球衣颜色)        self.PLAYER_COLOR = "#1E90FF"  # 道奇蓝        self.COM_COLOR = "#FFD700"  # 金黄色        # 记录每轮结果 (⚽ 或 ❌)        self.player_history = []        self.com_history = []        # --- GUI 界面布局 ---        # 1. 顶部的状态与攻防提示        self.status_label = tk.Label(            root,            text="【 第 1 轮:轮到你射门了! 】",            font=("Microsoft YaHei"13"bold"),            fg="#228B22",        )        self.status_label.pack(pady=(100))        # 【新增】专门用来显示每脚球结果的醒目文字标签(初始为空)        self.result_label = tk.Label(            root, text="", font=("Microsoft YaHei"14"bold"), fg="#FF4500"        )        self.result_label.pack(pady=(55))        # 2. 实时记分牌        score_frame = tk.Frame(root, bg="#F0F0F0", bd=2, relief="groove")        score_frame.pack(fill="x", padx=40, pady=5)        # 玩家记分排 (固定蓝色)        self.p_color_lbl = tk.Label(            score_frame,            text="■",            fg=self.PLAYER_COLOR,            bg="#F0F0F0",            font=("Arial"14),        )        self.p_color_lbl.grid(row=0, column=0, padx=(102), sticky="w")        self.p_score_lbl = tk.Label(            score_frame,            text="玩家 (得分: 0) : 开始游戏...",            font=("Microsoft YaHei"11),            bg="#F0F0F0",        )        self.p_score_lbl.grid(row=0, column=1, sticky="w")        # 电脑记分排 (固定黄色)        self.c_color_lbl = tk.Label(            score_frame,            text="■",            fg=self.COM_COLOR,            bg="#F0F0F0",            font=("Arial"14),        )        self.c_color_lbl.grid(row=1, column=0, padx=(102), sticky="w")        self.c_score_lbl = tk.Label(            score_frame,            text="电脑 (得分: 0) : 开始游戏...",            font=("Microsoft YaHei"11),            bg="#F0F0F0",        )        self.c_score_lbl.grid(row=1, column=1, sticky="w")        # 3. 中间足球门画布        self.canvas = tk.Canvas(root, width=500, height=220, bg="#228B22")        self.canvas.pack(pady=10)        # 绘制球门        self.canvas.create_rectangle(            10030400180, outline="white", width=5        )        self.canvas.create_line(0180500180, fill="white", width=3)        # 初始化球和守门员物体        self.gk_marker = self.canvas.create_rectangle(            0000, outline="white", width=2        )        self.ball_marker = self.canvas.create_oval(            0000, outline="black", width=2        )        # 4. 底部操作按钮        btn_frame = tk.Frame(root)        btn_frame.pack(pady=5)        for i, direction in enumerate(DIRECTIONS.keys()):            btn = tk.Button(                btn_frame,                text=direction,                width=8,                height=2,                font=("Microsoft YaHei"10),                command=lambda d=direction: self.play_turn(d),            )            btn.grid(row=i // 3, column=i % 3, padx=8, pady=5)        # 首次刷新        self.update_score_board()        self.reset_visuals()    def reset_visuals(self):        """重置画布,清空单发文字提示"""        if self.is_player_shooting:            ball_color = self.PLAYER_COLOR            gk_color = self.COM_COLOR        else:            ball_color = self.COM_COLOR            gk_color = self.PLAYER_COLOR        self.canvas.itemconfig(self.ball_marker, fill=ball_color)        self.canvas.itemconfig(self.gk_marker, fill=gk_color)        self.canvas.coords(self.ball_marker, 240190260210)        self.canvas.coords(self.gk_marker, 235100265150)        # 清空上一次的射门文字结果,并允许下一次点击        self.result_label.config(text="")        self.is_waiting_next = False    def update_score_board(self):        """更新记分牌文字和顶部状态提示"""        p_total = self.player_history.count("⚽")        c_total = self.com_history.count("⚽")        p_bar = " ".join(self.player_history) if self.player_history else "无"        c_bar = " ".join(self.com_history) if self.com_history else "无"        if self.is_player_shooting:            self.status_label.config(                text=f"【 第 {self.round_num} 轮:轮到你射门了! 】", fg="#228B22"            )        else:            self.status_label.config(                text=f"【 第 {self.round_num} 轮:请注意防守! 】", fg="#D2691E"            )        self.p_score_lbl.config(text=f"玩家 (总分: {p_total}) 进度: {p_bar}")        self.c_score_lbl.config(text=f"电脑 (总分: {c_total}) 进度: {c_bar}")    def play_turn(self, player_choice):        # 如果当前正处于进球动画展示的冷却中,禁止再次触发点击        if self.is_waiting_next:            return        self.is_waiting_next = True        com_choice = random.choice(list(DIRECTIONS.keys()))        shoot_dir = player_choice if self.is_player_shooting else com_choice        save_dir = com_choice if self.is_player_shooting else player_choice        # 1. 移动动画        bx, by = DIRECTIONS[shoot_dir]        gx, gy = DIRECTIONS[save_dir]        self.canvas.coords(self.ball_marker, bx - 10, by - 10, bx + 10, by + 10)        self.canvas.coords(self.gk_marker, gx - 15, gy - 25, gx + 15, gy + 25)        # 2. 判定逻辑        is_missed = random.random() < 0.10        goal = False        if is_missed:            result_text = f"你选【{player_choice}】· 电脑选【{com_choice}】 ❌ 踢飞了!高出横梁!"            text_color = "#FF0000"  # 红色            self.canvas.coords(                self.ball_marker, bx - 10, by - 45, bx + 10, by - 25            )        elif shoot_dir == save_dir:            result_text = f"你选【{player_choice}】· 电脑选【{com_choice}】 🧤 被扑住了!"            text_color = "#FF4500"  # 橙红色        else:            result_text = f"你选【{player_choice}】· 电脑选【{com_choice}】 ⚽ 球进了!!"            text_color = "#008000"  # 绿色            goal = True        # 将结果直接呈现在界面上,取代弹窗        self.result_label.config(text=result_text, fg=text_color)        # 3. 记录历史        mark = "⚽" if goal else "❌"        if self.is_player_shooting:            self.player_history.append(mark)        else:            self.com_history.append(mark)        # 4. 推进回合与状态切换        if not self.is_player_shooting:            self.round_num += 1        self.is_player_shooting = not self.is_player_shooting        # 延迟1.5秒后更新记分牌并重置场地(给玩家留出时间看结果字样和动画)        self.root.after(1500self.next_turn_check)    def next_turn_check(self):        """1.5秒延迟后执行:刷新记分牌,并检查是否进入结局"""        self.update_score_board()        if self.round_num > 5 and self.is_player_shooting:            self.end_game()        else:            self.reset_visuals()    def end_game(self):        p_total = self.player_history.count("⚽")        c_total = self.com_history.count("⚽")        if p_total > c_total:            final_msg = "🏆 最终胜利属于你!太棒了!"        elif p_total < c_total:            final_msg = "💀 电脑赢得了比赛,洗洗手再来一把吧!"        else:            final_msg = "🤝 双方难解难分,最终战平!"        # 只有在游戏5轮完全结束时,才弹出一个最终结算大框        messagebox.showinfo(            "比赛结束",            f"点球大战结束!\n\n最终比分 -> 玩家 {p_total} : {c_total} 电脑\n{final_msg}",        )        # 全局重置        self.player_history.clear()        self.com_history.clear()        self.round_num = 1        self.is_player_shooting = True        self.update_score_board()        self.reset_visuals()if __name__ == "__main__":    root = tk.Tk()    game = PenaltyGameSmooth(root)    root.mainloop()

利用 Tkinter 制作基础窗口交互非常方便,但如果你想追求更高级的效果——比如增加足球的运行轨迹、守门员的扑救动画、射门的音效等,Tkinter 就会显得有些吃力了。

这时候,你可以去了解 Python 的另一个游戏开发利器:Pygame。

Pygame 是专为 2D 游戏开发的第三方库,拥有完整的逐帧渲染机制、碰撞检测和音频混合器,能做出更加商业化的游戏作品。之前我们也做过不少 Pygame 的开发案例:

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

手把手带你用 Python 写《2048》

用Python写一个FlappyBird游戏

用python写一个简单的贪吃蛇游戏

如何开发一个打飞机游戏

感兴趣的同学,不妨试着把今天的逻辑用 Pygame 的框架改写一下吧。

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


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

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 19:59:37 HTTP/2.0 GET : https://f.mffb.com.cn/a/503985.html
  2. 运行时间 : 0.229581s [ 吞吐率:4.36req/s ] 内存消耗:4,547.23kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2e7abc22d20541b98e5b8258a31fba16
  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.001120s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001884s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000814s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000697s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001613s ]
  6. SELECT * FROM `set` [ RunTime:0.000643s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001603s ]
  8. SELECT * FROM `article` WHERE `id` = 503985 LIMIT 1 [ RunTime:0.008265s ]
  9. UPDATE `article` SET `lasttime` = 1787313577 WHERE `id` = 503985 [ RunTime:0.022957s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000738s ]
  11. SELECT * FROM `article` WHERE `id` < 503985 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001181s ]
  12. SELECT * FROM `article` WHERE `id` > 503985 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.012018s ]
  13. SELECT * FROM `article` WHERE `id` < 503985 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002089s ]
  14. SELECT * FROM `article` WHERE `id` < 503985 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001843s ]
  15. SELECT * FROM `article` WHERE `id` < 503985 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.021323s ]
0.233229s