一个基于 Web 的第一人称射击游戏 (FPS),支持多人在线对战。
- 🎮 FPS 游戏体验: 基于 Three.js 的 3D 第一人称射击
- ⚔️ 多人对战: 支持 5v5、1v1 等多种模式
- 🏠 大厅系统: 创建/加入房间、搜索房间、密码房
- 🔫 武器系统: 可配置的枪械参数 (伤害、射速、弹道等)
- 👤 玩家系统: 注册登录、战绩统计、等级系统
- 🔧 配置管理: 通过后台管理游戏参数
- 框架: React 18 + TypeScript
- 路由: React Router v6
- 状态管理: Zustand
- 构建工具: Vite
- 3D 引擎: Three.js
- HTTP 客户端: Axios
- 实时通信: Socket.io Client
- 运行时: Node.js
- 框架: Express.js
- 数据库: MongoDB + Mongoose
- 实时通信: Socket.io
- 认证: JWT + bcrypt
fire-assault/
├── client/ # React 前端
│ ├── src/
│ │ ├── components/ # React 组件
│ │ ├── pages/ # 页面组件
│ │ ├── context/ # React Context
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── services/ # API 服务
│ │ ├── types/ # TypeScript 类型
│ │ └── styles/ # CSS 样式
│ ├── public/
│ │ └── game.html # 游戏主页面 (Three.js)
│ └── package.json
│
├── server/ # Node.js 后端
│ ├── src/
│ │ ├── models/ # MongoDB 模型
│ │ ├── routes/ # API 路由
│ │ ├── middleware/ # 中间件
│ │ ├── socket/ # Socket.io 处理
│ │ └── services/ # 业务逻辑
│ └── package.json
│
├── docs/ # 文档
│ └── ARCHITECTURE.md # 架构设计
│
└── README.md
- Node.js 18+
- MongoDB 4.4+
- 克隆仓库
git clone https://github.com/yourusername/fire-assault.git
cd fire-assault- 安装后端依赖
cd server
npm install- 安装前端依赖
cd ../client
npm install- 在项目根目录复制
.env.example为.env,并按需修改(后端端口、MongoDB、JWT 等)
- 启动 MongoDB
mongod- 启动后端服务器
cd server
npm start- 启动前端开发服务器
cd client
npm run dev- 访问游戏
- 前端: http://localhost:5173
- 后端 API: http://localhost:3000/api
cd client
npm run build构建产物在 client/dist 目录。
- 注册/登录 (JWT 认证)
- 等级经验系统
- 金币系统
- 战绩统计 (击杀、死亡、胜率等)
- 公开房间列表
- 创建房间 (公开/私密)
- 加入房间 (普通/密码)
- 房间搜索
- 快速加入
- 房主权限 (踢人/开始/设置)
- 队伍分配 (CT/T)
- 准备状态
- 房间设置 (模式/地图/规则)
- 实时位置同步
- 开火/命中事件
- 伤害计算
- 回合制游戏逻辑
- 击杀/死亡事件
- 武器参数 (伤害、射速、弹道等)
- 角色参数 (移速、跳跃、重力等)
- 地图配置
- 游戏模式配置
POST /api/auth/register- 注册POST /api/auth/login- 登录GET /api/auth/verify- 验证 Token
GET /api/player/profile- 获取个人信息PUT /api/player/profile- 更新个人信息GET /api/player/stats- 获取战绩统计GET /api/player/leaderboard- 玩家排行榜
GET /api/lobby/rooms- 获取房间列表POST /api/lobby/rooms- 创建房间GET /api/lobby/room/:roomId- 获取房间信息POST /api/lobby/join/:roomId- 加入房间POST /api/lobby/leave/:roomId- 离开房间
GET /api/config- 获取游戏配置GET /api/config/weapons- 获取武器列表GET /api/config/maps- 获取地图列表PUT /api/config/weapons/:id- 更新武器配置
room:join- 加入房间room:leave- 离开房间room:ready- 准备状态room:switchTeam- 切换队伍
game:start- 开始游戏game:playerMove- 玩家移动game:shoot- 开火game:hit- 命中game:roundEnd- 回合结束
访问 /admin 使用游戏配置管理界面。
欢迎提交 Issue 和 Pull Request!
MIT License - see LICENSE for details.


