Maciasssss/Game-Off-Road-Hacking
GitHub: Maciasssss/Game-Off-Road-Hacking
融合ESP8266 RFID硬件节点与Flask-WebSocket服务器的沉浸式团队CTF攻防游戏平台。
Stars: 0 | Forks: 0
# 🌐 CYBER-WAR: RFID 夺旗赛
### 访问服务器
运行后,玩家连接到:`http://YOUR_IP_ADDRESS:5000`
## 📡 节点配置 (ESP8266)
对每个 ESP8266 进行编程以与游戏服务器通信。
### 1. Arduino IDE 设置
### 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** - 将当前游戏保存到排行榜历史记录并重置
## 🔧 故障排除
### 连接问题
### 硬件问题
## 📜 许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。




**一款融合实体硬件与数字 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) ```点击展开设置说明
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"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 扫描程序测试
⭐ 如果觉得有用,请给这个仓库点个 Star!
标签:ESP8266, Flask-SocketIO, HTML/CSS/JS, Python, RFID, WebSocket, 互动娱乐, 依赖分析, 团队竞技, 多模态安全, 夺旗赛, 实时对战, 嵌入式系统, 微控制器, 教育游戏, 数据可视化, 无后门, 智能卡, 物理实景游戏, 物联网游戏, 硬件黑客, 网络安全教育, 自定义脚本, 自定义脚本, 逆向工具, 黑客模拟