Maciasssss/Game-Off-Road-Hacking

GitHub: Maciasssss/Game-Off-Road-Hacking

融合ESP8266 RFID硬件节点与Flask-WebSocket服务器的沉浸式团队CTF攻防游戏平台。

Stars: 0 | Forks: 0

# 🌐 CYBER-WAR: RFID 夺旗赛
![Version](https://img.shields.io/badge/version-1.0.0-green) ![Python](https://img.shields.io/badge/python-3.x-blue) ![Hardware](https://img.shields.io/badge/hardware-ESP8266-orange) ![License](https://img.shields.io/badge/license-MIT-lightgrey) **一款融合实体硬件与数字 Web 界面的沉浸式现实团队游戏** [功能特性](#-features) • [硬件](#-hardware-requirements) • [安装设置](#-server-installation-pc) • [游戏玩法](#-how-to-play) • [故障排除](#-troubleshooting)
## 🎯 功能特性 - **实体 + 数字游戏玩法** - 使用 RFID 卡触发智能手机小游戏 - **实时竞技** - 基于 WebSocket 的全设备即时更新 - **团队策略** - 协调攻击、技能使用和资源管理 - **便携硬件** - 电池供电节点,随时随地开始游戏 - **管理员控制** - 实时分数调整与比赛管理 ## 📖 目录 - [项目概览](#-project-overview) - [硬件需求](#-hardware-requirements) - [接线指南](#-wiring-guide) - [服务器安装](#-server-installation-pc) - [节点配置](#-node-configuration-esp8266) - [游戏玩法](#-how-to-play) - [故障排除](#-troubleshooting) ## 🔭 项目概览 **Cyber-War** 将物理空间转变为竞技黑客战场,玩家使用真实的硬件来夺取虚拟领地。 ### 系统架构 | 组件 | 描述 | |-----------|-------------| | **🖥️ Server** | Python Flask 应用程序,管理游戏状态、分数和实时 WebSocket 通信 | | **📡 Nodes** | 配备 RFID 读卡器的 ESP8266 微控制器,作为占领点和基地站 | | **📱 Client** | 智能手机 Web 界面,刷卡时即时推送小游戏 | ### 游戏流程 ``` graph LR A[Player Scans Card] --> B[Node Reads RFID] B --> C[Server Receives Data] C --> D[Minigame Pushed to Phone] D --> E[Player Solves Challenge] E --> F[Points & Abilities Awarded] ``` ## 🛒 硬件需求 ### 材料清单 完整设置(1 个基地站 + 3 个占领点)所需材料: | 组件 | 数量 | 备注 | |-----------|----------|-------| | **ESP8266 开发板** | 4 | 推荐 NodeMCU V3 或 Wemos D1 Mini | | **MFRC522 RFID 读卡器** | 4 | RC522 模块 (13.56MHz) | | **OLED 显示屏** | 4 | 0.96" I2C SSD1306 128×64 | | **RFID 卡/标签** | 按需 | 13.56MHz MIFARE 兼容 | | **杜邦线** | 1 套 | 母对母 & 母对公 | | **Micro USB 数据线** | 4 | 用于供电和编程 | | **充电宝** | 4 (可选) | 用于便携式部署 | ### 可选增强组件 - 3D 打印外壳以提供防尘防水保护 - LED 状态指示灯 - 蜂鸣器用于音频反馈 ## ⚡ 接线指南 按照以下图示将组件连接到 ESP8266 (NodeMCU)。 ### OLED 显示屏 (I2C 连接) ``` ┌─────────────┐ │ OLED │ │ SSD1306 │ └─────────────┘ VCC GND SCL SDA │ │ │ │ │ │ │ └──── D2 (GPIO 4) │ │ └───────── D1 (GPIO 5) │ └────────────── GND └─────────────────── 3.3V ``` | OLED 引脚 | ESP8266 引脚 | 功能 | |----------|-------------|----------| | **VCC** | 3.3V (或 5V) | 电源 | | **GND** | GND | 接地 | | **SCL** | D1 (GPIO 5) | I2C 时钟 | | **SDA** | D2 (GPIO 4) | I2C 数据 | ### RFID 读卡器 (SPI 连接) ``` ┌─────────────┐ │ RC522 │ │ RFID │ └─────────────┘ 3.3V RST GND MISO MOSI SCK SDA │ │ │ │ │ │ │ │ │ │ │ │ │ └─── D4 (GPIO 2) │ │ │ │ │ └─────── D5 (GPIO 14) │ │ │ │ └──────────── D7 (GPIO 13) │ │ │ └───────────────── D6 (GPIO 12) │ │ └───────────────────── GND │ └───────────────────────── D3 (GPIO 0) └────────────────────────────── 3.3V ⚠️ NOT 5V! ``` | RC522 引脚 | ESP8266 引脚 | 功能 | |-----------|-------------|----------| | **3.3V** | 3.3V | 电源 **⚠️ 切勿使用 5V** | | **RST** | D3 (GPIO 0) | 复位 | | **GND** | GND | 接地 | | **IRQ** | *未连接* | 中断 (未使用) | | **MISO** | D6 (GPIO 12) | 主机输入从机输出 | | **MOSI** | D7 (GPIO 13) | 主机输出从机输入 | | **SCK** | D5 (GPIO 14) | 串行时钟 | | **SDA (SS)** | D4 (GPIO 2) | 从机选择 | ### 🔌 组装提示 1. **先做原型验证** - 在面包板上组装并测试所有连接,然后再进行焊接 2. **电源稳定性** - 确保您的 USB 电源为所有组件提供稳定的电流 3. **线缆管理** - 使用较短的杜邦线以最大限度地减少信号干扰 4. **外壳保护** - 3D 打印或使用塑料项目盒来保护游戏过程中的电子元件 ## 💻 服务器安装 (PC) 在连接到与 ESP8266 节点相同 WiFi 网络的笔记本电脑或 Raspberry Pi 上部署游戏服务器。 ### 前置条件 - [Python 3.8+](https://www.python.org/downloads/) - [Git](https://git-scm.com/downloads) - 为服务器分配静态 IP 的 WiFi 网络 (推荐) ### 安装步骤
Windows ``` # 1. Clone the repository git clone https://github.com/Maciasssss/Game-Off-Road-Hacking.git cd Game-Off-Road-Hacking # 2. 创建虚拟环境 python -m venv venv venv\Scripts\activate # 3. 安装依赖 pip install flask flask-socketio eventlet # 4. 运行服务器 python app.py # 5. 查找你的 IP 地址 ipconfig # 查找 "IPv4 Address" (例如 192.168.1.15) ```
macOS / Linux ``` # 1. Clone the repository git clone https://github.com/Maciasssss/Game-Off-Road-Hacking.git cd Game-Off-Road-Hacking # 2. 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 3. 安装依赖 pip install flask flask-socketio eventlet # 4. 运行服务器 python app.py # 5. 查找你的 IP 地址 ifconfig # or: ip a # 查找你的网络接口 IP (例如 192.168.1.15) ```
### 访问服务器 运行后,玩家连接到:`http://YOUR_IP_ADDRESS:5000` ## 📡 节点配置 (ESP8266) 对每个 ESP8266 进行编程以与游戏服务器通信。 ### 1. Arduino IDE 设置
点击展开设置说明 1. 下载并安装 [Arduino IDE](https://www.arduino.cc/en/software) 2. 添加 ESP8266 开发板支持: - 转到 **File → Preferences** - 添加到 "Additional Boards Manager URLs": http://arduino.esp8266.com/stable/package_esp8266com_index.json 3. 安装 ESP8266 开发板: - 转到 **Tools → Board → Boards Manager** - 搜索 `esp8266` 并安装 4. 安装所需库: - 转到 **Tools → Manage Libraries** - 安装以下内容: - `MFRC522` by GithubCommunity v.1.4.12 - `Adafruit SSD1306` v.2.5.16 - `Adafruit GFX Library` v.1.12.14 - `ArduinoJson` v.7.4.2 - `SocketIoClient` by Vincent Wyszynski v.0.3.0
### 2. 配置节点代码 A. 打开 `/arduino` 文件夹中的 `NodeCode.ino` 并修改: ``` // WiFi credentials const char* ssid = "YOUR_WIFI_NAME"; const char* password = "YOUR_WIFI_PASSWORD"; // Server connection (use your computer's IP from Step 5 above) char host[] = "192.168.1.15"; // ← Change this! int port = 5000; // Node identifier (change for each board) String nodeId = "node_alpha"; // Options: node_alpha, node_beta, node_gamma, base_station ``` B. RFID "Nugget" 配置 (关键!) 游戏使用 4 个特定的物理 RFID 标签作为 "Nuggets" (Red 1, Red 2, Blue 1, Blue 2)。 代码中包含这些项目的硬编码 UID (变量 r1, r2, b1, b2)。您必须更新它们以匹配您的物理标签。 **如何查找您的标签 ID:** 1. 将代码上传到 ESP8266 (见下文第 3 步)。 2. 打开 Tools → Serial Monitor (将波特率设置为 115200)。 3. 逐个扫描您的 RFID 标签。 4. 串口监视器将打印扫描标签的 UID (例如 UID: 34 C5 11 A2)。 5. 复制这些 UID 并替换 app.py 中的值: ``` CARD_MAPPING = { "Place_card_UID_here": "R1", "Place_card_UID_here": "R2", "Place_card_UID_here": "B1", "Place_card_UID_here": "B2" } ``` ### 3. 上传到 ESP8266 | 节点 | nodeId 值 | 用途 | |------|--------------|---------| | Node 1 | `"base_station"` | 电池充电站 | | Node 2 | `"node_alpha"` | 占领点 | | Node 3 | `"node_beta"` | 占领点 | | Node 4 | `"node_gamma"` | 占领点 | **上传流程:** 1. 通过 USB 连接 ESP8266 2. 选择 **Tools → Port** (Windows 上为 COM 端口, macOS/Linux 上为 `/dev/tty*`) 3. 选择 **Tools → Board → NodeMCU 1.0 (ESP-12E Module)** 4. 点击 **Upload** 按钮 (→) 5. 等待 "Done uploading" 消息 6. 对所有 4 个节点使用不同的 `nodeId` 值重复此操作 ## 🎮 游戏玩法 ### 游戏目标 **两支队伍 (RED 🔴 和 BLUE 🔵) 竞争控制节点。首先达到 1000 分的队伍获胜!** ### 设置阶段 1. **启动服务器** python app.py 2. **连接玩家** - 加入同一 WiFi 网络 - 访问 `http://SERVER_IP:5000` - 输入您的卡代码 (例如 `R1`, `B2`) 3. **游戏管理员初始化** - 第一位登录的玩家成为游戏管理员 (GM) - GM 在设置中点击 **START MATCH** (⚙️ 图标) ### 游戏循环 ``` 1. CHARGE → 2. SCAN → 3. HACK → 4. EARN ``` #### 1. ⚡ 充能 (CHARGE) - 黑客攻击期间电池会耗尽 - 跑到 **基地站 (Base Station)** 节点 - 刷卡以充电 #### 2. 📡 扫描 (SCAN) - 靠近任意占领点 (Alpha, Beta, Gamma) - 将 RFID 卡轻触读卡器 - 等待确认蜂鸣声/显示 #### 3. 🎯 黑客攻击 (HACK) - 小游戏会立即出现在您的手机上 - 解谜:代码破译、接线、数学、记忆 - 速度决定奖励: | 时间 | 分数 | 护盾持续时间 | |------|--------|-----------------| | **< 3s** (快速) | 高 | 长 | | **3-8s** (普通) | 标准 | 中 | | **> 8s** (慢速) | 低 | 短 | #### 4. 💎 获取 (EARN) - 成功的黑客攻击奖励分数和能力点 (AP) - 失败的黑客攻击 = 无奖励,电池仍会消耗 ### 特殊能力 打开 **书本菜单 (Book Menu)** (📖) 消耗 AP: | 能力 | 花费 | 效果 | |---------|------|--------| | 🔋 **Instant Charge** | 3 AP | 远程充满电池 | | 💥 **EMP** | 5 AP | 摧毁敌方护盾 | | ❄️ **Jammer** | 4 AP | 冻结敌方屏幕 10 秒 | ### 游戏管理员控制 GM 可以通过 **齿轮菜单 (Gear Menu)** (⚙️) 访问额外的控制: - 重命名队伍 - 调整得分倍率 - 强制结束比赛 - **Restart Match** - 将当前游戏保存到排行榜历史记录并重置 ## 🔧 故障排除 ### 连接问题
"Connection Refused" 或网站无法加载 **检查清单:** - [ ] 服务器和设备位于同一 WiFi 网络 - [ ] 防火墙允许 `python.exe` 在公用/专用网络上通信 - Windows: Control Panel → Windows Defender Firewall → Allow an app - [ ] 服务器正在运行 (`python app.py` 未显示错误) - [ ] 使用了正确的 IP 地址 (不是 127.0.0.1 或 localhost)
节点屏幕一直显示 "WiFi Connecting..." **解决方案:** 1. 验证 `NodeCode.ino` 中的 SSID 和密码 (区分大小写!) 2. 检查节点位置的 WiFi 信号强度 3. 确保 WiFi 网络使用 2.4GHz (ESP8266 不支持 5GHz) 4. 尝试将节点移近路由器 5. 检查串口监视器 (Tools → Serial Monitor, 115200 波特率) 中的错误消息
### 硬件问题
节点显示 "Connected" 但刷卡无反应 **故障排除:** 1. 验证 `NodeCode.ino` 中的 `host[]` IP 与服务器当前 IP 匹配 2. 确认服务器正在运行 3. 检查 RFID 接线 - SDA 必须在 **D4** 上,而不是 D2 4. 使用示例程序独立测试 RFID 读卡器 5. 确保卡靠近读卡器 (< 3cm)
"Card ID Unknown" 错误 **修复方法:** 1. 在刷卡时打开串口监视器以查看 UID 2. 编辑 `app.py` 并找到 `CARD_MAPPING` 字典 3. 添加您的卡 UID: CARD_MAPPING = { "12B3C4D": "R1", # Red Team Player 1 "5E6F7G8H": "B1", # Blue Team Player 1 # Add your UIDs here } 4. 重启服务器
OLED 显示屏不工作 **常见原因:** - I2C 地址错误 (在代码中尝试 0x3C 或 0x3D) - SDA/SCL 引脚连接松动 - 电源不足 - 尝试使用外部电源 - 显示屏故障 - 使用 I2C 扫描程序测试
## 📜 许可证 本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。
⭐ 如果觉得有用,请给这个仓库点个 Star!
标签:ESP8266, Flask-SocketIO, HTML/CSS/JS, Python, RFID, WebSocket, 互动娱乐, 依赖分析, 团队竞技, 多模态安全, 夺旗赛, 实时对战, 嵌入式系统, 微控制器, 教育游戏, 数据可视化, 无后门, 智能卡, 物理实景游戏, 物联网游戏, 硬件黑客, 网络安全教育, 自定义脚本, 自定义脚本, 逆向工具, 黑客模拟