# Games_MOD **Repository Path**: spidermanehe/Games_MOD ## Basic Information - **Project Name**: Games_MOD - **Description**: python桌面开发学习项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-11 - **Last Updated**: 2026-08-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > 📢 **重要更新:Games_MODV3.0 已发布!** > > 您当前浏览的是项目的初始草稿版本 (`master` 分支)。 > > 我已经对项目进行了**彻底重构**,带来了代码更清晰、逻辑更简练的 **Games_MODV3.0**! > > 👉 **强烈建议您切换到 [`master2`](https://gitee.com/spidermanehe/Games_MOD/tree/master2/) 分支,体验最新的版本和文档。** # **Games_MODV2.0** ​ (游戏MOD下载管理器V2.0) **** ## **一、引言** ​ 近年来,我观察到一些知名游戏MOD平台(例如3DM)开始对原本免费的MOD资源设置**付费墙或会员门槛**。我认为,MOD是玩家基于热爱进行二次创作并**免费分享**的成果,其核心价值在于社区的**共享精神**,而**非商业变现**。为了应对这一趋势,让MOD资源回归其自由、开放的初衷,我开发了“风灵月影游戏MOD管理器”。 本程序是一个**完全免费**、**开源的桌面应用**,旨在通过技术手段,聚合和整理互联网上公开可用的MOD资源,为所有玩家提供一个无障碍、无成本的MOD管理解决方案。 ### **1.V2.0版本的核心升级** ​ 这是继我的游戏MOD下载管理器项目(项目地址:https://gitee.com/spidermanehe/download_-manager)进行更新,这一次我重构了代码,跟新了图片显示和用户MOD管理界面,现在可以在我的MOD界面进行管理MOD(打开或者卸载) ​ 的一次重要更新。作为一名**学生开发者**,我深知自身在技术实力和代码架构能力上仍有不足,但正是这份对MOD文化的热爱驱动着我不断学习与改进。本次更新中,我努力克服技术挑战,对项目进行了全面重构,并实现了以下关键升级: ### 2.**开发心路与成长** ​ 在开发过程中,我遇到了许多技术难题,从线程同步问题到内存泄漏,从UI布局适配到网络请求优化。每一次解决bug的过程都是宝贵的学习经历。虽然代码中可能还存在不完美之处,但这个项目见证了我作为学生开发者的成长轨迹。 ​ 我特别感谢开源社区提供的丰富资源,以及那些在技术论坛上无私分享经验的开发者们。正是这些开放共享的精神,让我能够站在巨人的肩膀上完成这个项目。 ### **3.项目愿景** ​ V2.0版本不仅是一个功能升级,更是对MOD自由共享理念的延续。通过技术手段打破商业壁垒,让每一位玩家都能: - **自由获取**:无需付费或会员即可访问海量MOD资源。 - **轻松管理**:从搜索、下载到本地管理,形成完整闭环。 - **参与共建**:开源代码鼓励社区贡献,共同完善工具生态。 ## 二、环境文件结构介绍 ### 1.开发环境 - Python版本要求:python版本:3.13 - 其他必要依赖库: certifi 2025.10.5 charset-normalizer 3.4.3 idna 3.10 lxml 6.0.2 pip 25.1.1 PySide6 6.10.0 PySide6_Addons 6.10.0 PySide6_Essentials 6.10.0 requests 2.32.5 shiboken6 6.10.0 urllib3 2.5.0 ### 2.项目结构 ``` Games_MOD/ ├── .venv/ # 虚拟环境目录 ├── assets/ # 资源文件夹 │ └── OIP-C.jpg # 静态资源图片 ├── data_json/ # 数据JSON文件夹 │ └── 1.json # 获取的数据文件 ├── imgs/ # 图片文件夹 ├── interface/ # 界面模块 │ ├── UiData/ # 界面数据管理 │ ├── __init__.py # 包初始化文件 │ ├── Component.py # 界面组件基类 │ ├── MainWindow.py # 主窗口类 │ └── MyMod.py # 自定义模组界面 ├── mods/ # 模组文件夹 ├── Spider/ # 爬虫工具模块 │ ├── __init__.py │ ├── AnalysisHTML.py # HTML解析器 │ ├── FileData.py # 文件数据处理 │ └── ManageURL.py # URL生成器 ├── ThraedWorker/ # 线程工作者模块 │ ├── __init__.py │ ├── DownloadWorker.py # 下载工作者 │ └── SearchWork.py # 搜索工作者 ├── user/ # 用户相关文件夹 │ ├── imgs/ # 用户下载MOD图片 │ └── json/ # 用户数据JSON ├── Games_v2.spec # PyInstaller打包配置 ├──Games_v2.zip # 程序安装包 ├── main.py # 主程序入口 └── settings.py # 配置文件 ``` #### 2.1**核心业务模块** ​ **`interface/` - 用户界面模块** ​ 这是应用程序的**图形界面**(GUI)核心,负责所有与用户交互相关的逻辑。 - **`UiData/`**: 用于存放界面相关的数据文件或资源,例如主题配置、UI布局数据等。 - **`__init__.py`**: 标志 `interface` 为一个 Python 包,允许模块化导入。 - **`Component.py`**: 定义可复用的界面组件,如自定义按钮、信息卡片、进度条等。 - **`MainWindow.py`**: 主窗口类,是整个应用的UI骨架,负责布局管理、菜单栏、状态栏以及整合所有界面组件。 - **`MyMod.py`**: “我的模组”界面模块,专门用于展示和管理用户本地已下载的 MOD,提供启用、禁用、卸载等操作。 #### **2. 2资源与数据存储** ​ 负责从互联网上抓取 MOD 资源信息,是应用的**数据来源**。 - **`__init__.py`**: 标志 `Spider` 为一个 Python 包。 - **`AnalysisHTML.py`**: HTML 解析器,使用 `lxml` 或 `BeautifulSoup` 等库解析网页内容,提取 MOD 的标题、描述、下载链接、预览图等关键信息。 - **`FileData.py`**: 文件数据处理模块,负责将爬取到的数据清洗、格式化,并保存到本地(如 `data_json/1.json`),或从本地读取缓存数据。 - **`ManageURL.py`**: URL 管理器,负责生成目标网站的请求 URL,并管理 URL 队列,避免重复爬取。 #### 2.3`ThraedWorker/` - 多线程工作模块 ​ 为确保界面流畅,所有耗时操作(如网络请求、文件下载)都在此模块定义的**独立线程**中执行。 - **`__init__.py`**: 标志 `ThraedWorker` 为一个 Python 包。 - **`DownloadWorker.py`**: 下载工作线程,负责处理 MOD 文件的下载任务,支持多线程下载。 - **`SearchWork.py`**: 搜索工作线程,负责执行用户的搜索请求,调用 `Spider` 模块获取数据,并在完成后安全地更新主界面。 ## **三、软件架构** 本项目的软件架构遵循**分层解耦**和**关注点分离**的核心设计原则,旨在构建一个结构清晰、易于维护和扩展的桌面应用程序。通过将用户界面、业务逻辑、数据访问与持久化等功能划分为独立的模块,我们降低了各部分之间的耦合度,提升了代码的健壮性和可读性。 ### **3.1 总体设计思想** 1. **模块化设计**:项目被划分为多个功能独立的模块(如界面、爬虫、多线程工作等),每个模块负责单一职责。这使得团队协作(即使是个人项目,也有助于思维整理)和后续功能扩展变得更加容易。 2. **异步与多线程**:为了提供流畅的用户体验,所有可能耗时的操作(如网络请求、文件下载、数据解析)均在后台线程中执行。这确保了主界面(UI线程)始终保持响应,不会因后台任务而卡顿。 3. **数据驱动视图**:界面的展示内容依赖于底层数据模型。当数据(如搜索结果、下载进度)发生变化时,通过信号槽机制通知界面进行更新,实现了逻辑与视图的分离。 ### **3.2 架构分层** 本项目的架构可以自上而下划分为以下四个层次: #### **1. 表现层** - **对应模块**:`interface/` - **核心职责**:负责应用程序的图形界面展示和用户交互。它接收用户的输入(如点击搜索、下载按钮),并将应用的状态和数据以直观的方式呈现给用户(如显示MOD列表、进度条)。 - 关键组件 - `MainWindow.py`:作为主窗口,是所有UI组件的容器和事件分发中心。 - `Component.py`:提供可复用的UI基础组件,保证界面风格统一。 - `MyMod.py`:专门处理本地MOD管理相关的界面逻辑。 #### **2. 业务逻辑层** - **对应模块**:`main.py`, `ThraedWorker/` - **核心职责**:作为应用的核心大脑,负责协调各层之间的工作,处理核心业务规则。它不关心数据具体如何获取或界面如何展示,只负责“指挥”。 - 关键组件 - `main.py`:应用的启动入口,负责初始化各个模块并连接它们之间的信号槽,是整个应用的“总指挥”。 - `ThraedWorker/`:封装了具体的业务任务(搜索、下载),并将它们在独立线程中执行,是业务逻辑的“执行者”。 #### **3. 数据访问层** - **对应模块**:`Spider/` - **核心职责**:专注于与外部数据源(即MOD网站)进行通信。它的唯一任务就是根据业务层的指令,从网络中抓取原始数据,并将其解析为结构化的信息。 - 关键组件 - `ManageURL.py`:管理请求目标。 - `AnalysisHTML.py`:解析网页内容。 - `FileData.py`:处理原始数据。 #### **4. 数据持久化层** - **对应模块**:`data_json/`, `user/`, `settings.py` - **核心职责**:负责数据的长期存储和读取。无论是爬取的缓存数据,还是用户的个人配置,都由这一层统一管理,实现了业务逻辑与存储方式的解耦。 - 关键组件 - `data_json/`:存储网络请求的缓存,减少重复请求。 - `user/`:存储用户相关的数据,如下载的MOD图片、个人配置等。 - `settings.py`:提供全局配置的读取接口。 ### **3.3 核心模块交互流程** #### **1. MOD搜索流程** 1. **用户操作**:用户在 `MainWindow` 的搜索框中输入关键词并点击搜索。 2. **事件触发**:`MainWindow` 发出搜索信号,并将关键词传递给业务逻辑层。 3. **任务调度**:`main.py` 接收到信号,创建并启动一个 `ThraedWorker.SearchWork` 线程。 4. **数据获取**:`SearchWork` 线程调用 `Spider` 模块的功能,`Spider` 从网络抓取并解析数据。 5. **数据返回**:`SearchWork` 将解析后的MOD数据通过信号发送回主线程(UI线程)。 6. **界面更新**:`MainWindow` 接收到数据信号,调用 `Component` 创建MOD卡片,并更新界面展示搜索结果。 #### **2. MOD下载与管理流程** 1. **用户操作**:用户在MOD列表或“我的模组”(`MyMod`)界面中点击下载或管理按钮。 2. **事件触发**:对应的UI组件发出下载或管理指令。 3. 任务执行 - **下载**:业务逻辑层启动 `ThraedWorker.DownloadWorker` 线程,该线程从数据访问层获取真实下载链接,并将文件保存到 `user/` 指定目录。 - **管理**:业务逻辑层直接调用操作系统接口(如文件删除、移动),或修改 `user/json/` 中的配置文件来实现MOD的启用/禁用。 4. **状态反馈**:下载线程会实时发送进度信号,管理操作完成后会发送结果信号。 5. **界面更新**:`MainWindow` 或 `MyMod` 接收信号,更新下载进度条或刷新本地MOD列表,完成整个闭环。 ### **3.4 关键技术选型与考量** - **PySide6框架**:选择PySide6(Qt for Python)是因为其提供了成熟、跨平台的GUI解决方案,拥有丰富的UI组件和强大的信号槽机制,非常适合构建复杂的桌面应用。 - **多线程模型**:采用Python的`threading`或PySide6的`QThread`模型,将网络I/O和文件I/O等阻塞操作移至后台,是保证桌面应用响应性的关键技术。 - **JSON数据格式**:使用JSON作为数据缓存和配置存储的主要格式,因为它轻量、易于人类阅读,并且与Python的`dict`和`list`类型可以无缝转换,处理起来非常方便。 - **模块化文件结构**:清晰的目录结构本身就是架构的一部分,它强制开发者进行逻辑分离,使得项目随着功能增加依然保持清晰和可控。 ## **四、软件的安装与运行** 本软件为**绿色便携版**,无需复杂的安装过程,解压即可运行。请遵循以下步骤进行操作。 ### **4.1 系统要求** - **操作系统**:Windows 10 或更高版本。 - **硬件要求**:无特殊要求,能流畅运行Windows系统的普通电脑即可。 - **网络要求**:需要稳定的互联网连接以搜索和下载MOD。 ### **4.2 下载与安装** 1. **下载安装包** 请从项目发布页面(或提供的链接)下载名为 `Games_v2.zip` 的压缩包文件。 2. **解压文件** - 找到下载完成的 `Games_v2.zip` 文件。 - 右键点击该文件,在弹出的菜单中选择“**全部解压…**”。 - 选择一个您希望存放程序的路径(例如 `D:\Programs\`),然后点击“解压”。建议解压到一个非系统盘且路径不包含中文或特殊字符的文件夹,以避免潜在的权限问题。 3. **定位主程序** 解压完成后,进入您刚刚解压的文件夹。按照以下路径找到主程序: ``` \Games.v2.0\dist\Games_v2\ 在此文件夹中,您会看到名为 **`Games_v2.exe`** 的应用程序文件。 ![定位程序文件示意图](https://sfile.chatglm.cn/chatglm4/406d64fc-53e8-4535-802a-c5b988781a89.png) *(注:此处可配一张截图,清晰展示文件夹结构和exe文件)* ``` ### **4.3 启动程序** - **直接启动**:双击 `Games_v2.exe` 文件即可启动“风灵月影游戏MOD管理器”。 - **创建快捷方式(推荐)**:为了方便日后使用,您可以右键点击 `Games_v2.exe`,选择“**发送到**” -> “**桌面快捷方式**”。之后便可以直接在桌面上双击快捷方式启动程序。 ### **4.4 常见问题与解决** #### **问题1:杀毒软件报毒或阻止运行** - **现象**:部分杀毒软件(如360、腾讯电脑管家、Windows Defender等)可能会误报 `Games_v2.exe` 为病毒或未知威胁,并将其删除或隔离。 - **原因**:本程序由PyInstaller打包,其生成的可执行文件特征容易被杀毒软件的启发式扫描误判。**我们保证本程序完全开源、无任何恶意代码。** - 解决方案: 1. 在杀毒软件的“隔离区”或“病毒查杀历史”中找到被处理的 `Games_v2.exe`。 2. 选择“**恢复**”或“**信任**”。 3. 在杀毒软件设置中,将程序所在的整个文件夹(例如 `D:\Programs\Games.v2.0`)添加到“**信任区**”或“**白名单**”中,以避免后续误报。 #### **问题2:提示缺少DLL文件或运行时错误** - **现象**:双击运行时,弹出窗口提示缺少 `.dll` 文件或发生应用程序错误。 - **原因**:可能是解压不完整,或系统缺少必要的运行库。 - 解决方案: 1. **重新解压**:首先尝试删除原文件夹,重新下载并解压一次 `Games_v2.zip`,确保所有文件都已正确生成。 2. **安装运行库**:如果问题依旧,请尝试安装微软的常用运行库,如 [Visual C++ Redistributable for Visual Studio](https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist),安装完成后重启电脑再试。 #### **问题3:程序无法保存配置或下载文件** - **现象**:程序启动正常,但无法保存设置,或下载MOD时提示权限不足。 - **原因**:程序所在的文件夹没有写入权限。 - 解决方案: 1. **以管理员身份运行**:右键点击 `Games_v2.exe`,选择“**以管理员身份运行**”。 2. **修改文件夹权限**:右键点击程序所在的文件夹(例如 `Games_v2`),选择“属性” -> “安全”,编辑用户权限,确保您的用户账户拥有“完全控制”权限。 ### **4.5 卸载软件** 由于本软件是绿色便携版,卸载过程非常简单: 1. 确保程序已完全关闭。 2. 直接删除您之前解压的整个 `Games.v2.0` 文件夹即可。 3. 如果您创建了桌面快捷方式,也请一并删除。 程序不会在您的系统注册表或系统文件夹中留下任何残余文件。 ## **五、现存问题与未来展望** 作为一个由学生开发者主导的项目,`Games_MODV2.0` 在实现核心功能的同时,也必然存在一些因经验和技术力限制所导致的局限性。本节将坦诚地分析当前版本存在的问题,并展望未来的升级方向。 ### **5.1 现存问题与局限性** 1. **健壮性与稳定性不足** - **异常处理缺失**:当前程序并未进行大规模的异常捕获和处理。例如,网络请求超时、目标网站结构变更、文件读写权限不足等意外情况,都可能导致程序直接崩溃,而不是给出友好的错误提示。 - **测试覆盖率低**:由于个人开发精力有限,项目缺少系统的单元测试和集成测试。这导致在边缘场景或特定用户环境下,可能出现未知的Bug。 2. **功能完整度有待提升** - **界面功能不完整**:软件的导航栏虽然设计了“首页”和“设置”按钮,但对应的功能页面尚未开发。目前用户只能使用“搜索”和“我的MOD”两个核心功能,整体体验不够完整。 - **核心功能单一**:软件目前仅聚焦于MOD的“搜索-下载-管理”这一核心闭环,缺少如MOD分类筛选、版本管理、依赖检查等高级功能。 3. **用户配置不友好** - **配置方式原始**:当前所有软件配置(如下载路径、线程数等)都需要用户手动修改 `settings.py` 文件。这种方式对非技术用户极不友好,不仅操作繁琐,还容易因修改错误导致程序无法启动。 ### **5.2 未来升级路线图** 针对以上问题,并结合项目愿景,我规划了以下清晰的升级路线图: #### **第一阶段:体验优化与功能补全** 1. **构建图形化设置界面** - **目标**:彻底解决配置不友好的问题。 - **计划**:开发一个完整的“设置”页面,将 `settings.py` 中的配置项全部图形化。用户将可以通过下拉菜单、输入框和开关来配置下载目录、并发线程数、界面主题等,配置将自动保存到 `user/json/` 目录下的配置文件中,无需重启程序即可生效。 2. **完善首页与信息展示** - **目标**:打造一个真正有用的“首页”。 - **计划**:在首页展示最近下载的MOD、热门MOD推荐、快速搜索入口以及软件的更新日志,让用户打开软件后能快速获取关键信息。 #### **第二阶段:架构重构与能力增强** 1. **引入Scrapy爬虫框架** - **目标**:提升爬虫的效率、稳定性和可扩展性。 - **计划**:将当前基于 `requests` 和 `lxml` 的简单爬虫逻辑,重构为基于 **Scrapy** 框架的分布式爬虫。 - 优势: - **异步处理**:Scrapy 基于Twisted,天生支持异步网络请求,爬取效率远超同步请求。 - **强大的调度器**:内置完善的请求调度、去重和优先级管理机制。 - **可扩展性**:通过中间件和管道可以轻松实现代理池、User-Agent轮换、数据清洗和持久化等高级功能,为未来支持更多MOD网站打下坚实基础。 2. **加强健壮性与测试** - **目标**:打造一个稳定可靠的软件。 - 计划: - **全面异常处理**:为所有网络请求、文件操作和用户交互添加 `try...except` 块,确保程序在任何情况下都能优雅地处理错误,并向用户反馈清晰的问题信息。 - **引入自动化测试**:使用 `pytest` 等测试框架,为核心模块(如HTML解析、URL管理)编写单元测试,为关键流程(如搜索下载)编写集成测试,确保每次代码修改都不会引入新的Bug。 #### **第三阶段:生态扩展与社区建设** 1. 功能生态扩展 - **目标**:从一个下载工具升级为综合性的MOD管理平台。 - 计划: - **多源支持**:基于Scrapy框架,集成更多MOD网站(如Nexus Mods、Mod DB等)的数据源。 - **智能管理**:实现MOD版本控制、依赖关系分析与冲突检测。 - **社区功能**:探索添加用户评论、MOD评分和分享功能,促进社区交流。 ## **结语** `Games_MODV2.0` 是一个起点,而非终点。它承载着我对MOD文化的热爱和对开源精神的践行。虽然当前版本尚有不足,但我坚信,通过持续的学习、迭代和社区的共同努力,它终将成长为一个功能强大、体验优秀的MOD管理解决方案,为所有热爱游戏的玩家带来真正的便利与自由。