# playair **Repository Path**: jili_lyj/playair ## Basic Information - **Project Name**: playair - **Description**: 纯AI开发的在线联机飞机小游戏,自己做着玩,感受一下ai时代的威力,太crazy了 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RAIDEN ONLINE - 多人在线雷电飞机游戏 一款经典雷电风格的在线多人合作飞机射击游戏。玩家可以创建房间邀请朋友一起合作,通过 ngrok 内网穿透让远程玩家加入游玩。 --- ## 快速开始 ### 环境要求 - Node.js 18+ (推荐 22) - 现代浏览器 (Chrome / Edge / Firefox) ### 安装与运行 ```bash # 1. 进入项目目录 cd d:\air # 2. 安装依赖(仅首次需要) npm install # 3. 启动游戏服务器 npm start ``` 启动后控制台会显示: ``` [Server] Raiden Online running at http://localhost:3000 ``` 打开浏览器访问 `http://localhost:3000` 即可进入游戏。 ### 局域网联机 同一局域网内的玩家,直接在浏览器输入你的电脑IP地址即可加入,例如: ``` http://192.168.1.100:3000 ``` 查看本机IP:在命令行运行 `ipconfig`,找到 IPv4 地址。 ### 公网联机(ngrok 内网穿透) 让不在同一局域网的朋友也能加入: ```bash # 1. 注册 ngrok 账号(免费) # 访问 https://ngrok.com 注册并获取 authtoken # 2. 设置 ngrok 认证(仅首次需要) npx ngrok config add-authtoken <你的token> # 3. 以公网模式启动 npm run public ``` 启动后控制台会额外显示: ``` [ngrok] Public URL: https://xxxx-xxxx.ngrok-free.app [ngrok] Share this URL with friends to play together! ``` 将该链接发给朋友,他们在浏览器打开即可加入游玩。 --- ## 游戏说明 ### 游戏模式 **合作模式** - 所有玩家在同一战场中并肩作战,共同消灭敌机和Boss。 ### 操作方式 | 按键 | 功能 | |------|------| | `W` / `↑` | 向上移动 | | `S` / `↓` | 向下移动 | | `A` / `←` | 向左移动 | | `D` / `→` | 向右移动 | | `J` | 射击 | | `X` | 使用炸弹(清除屏幕上所有敌方子弹并对敌机造成伤害) | ### 房间系统 1. **输入昵称** - 进入游戏后先在顶部输入框设置你的昵称 2. **创建房间** - 点击 "Create Room",设置房间名和最大人数(2-4人) 3. **加入房间** - 在房间列表中点击 "Join" 加入已有房间 4. **准备** - 进入房间后点击 "Ready" 表示准备就绪 5. **开始游戏** - 房主在所有玩家准备后点击 "Start Game" 开始 房间码为6位字母数字编码,方便口头告知朋友搜索加入。 ### 玩家飞机 - 每位玩家拥有不同颜色的飞机:P1蓝色、P2红色、P3绿色、P4黄色 - 初始 **3条命**,每条命 **3点HP** - 死亡后重生有短暂无敌时间(闪烁状态) - 死亡会重置武器等级为1级 - 初始携带 **3个炸弹** ### 武器升级 拾取 "W" 道具可升级武器,共4个等级: | 等级 | 名称 | 描述 | |------|------|------| | Lv.1 | 单发 | 单颗子弹直线向前 | | Lv.2 | 双发 | 两颗子弹平行向前 | | Lv.3 | 三发扇形 | 三颗子弹呈扇形散射 | | Lv.4 | 五向散射 | 五颗子弹大范围扇形散射 | ### 道具系统 击杀敌机有概率掉落道具(方框图标向下飘落),飞机接触即可拾取: | 图标 | 名称 | 效果 | |------|------|------| | **W** | 武器升级 | 武器等级+1(最高4级) | | **B** | 炸弹补给 | 炸弹数量+1(最多5个) | | **S** | 护盾 | 获得护盾,可抵挡3次伤害 | | **H** | 回血 | 恢复1点HP | ### 连击系统 短时间内连续击杀敌机会触发连击(Combo),连击倍率最高 x8: - 连续击杀会递增连击计数 - 1.5秒内没有击杀则连击重置 - 连击倍率直接乘以击杀得分 ### 敌机类型 | 类型 | 特征 | HP | 分数 | |------|------|-----|------| | **Scout** | 直线向下飞行,最基础的敌机 | 1 | 100 | | **Zigzag** | 左右蛇形移动向下飞行 | 2 | 200 | | **Diver** | 追踪最近的玩家飞行 | 1 | 150 | | **Tank** | 缓慢向下移动,会向玩家发射瞄准弹 | 5 | 300 | | **Formation** | 以V字编队飞行 | 1 | 100 | | **Turret** | 固定在屏幕上方,发射扇形弹幕 | 4 | 400 | ### Boss 战 每个关卡末尾会出现Boss,出现前会有 **"WARNING"** 警告提示: | 关卡 | Boss名称 | 特点 | |------|----------|------| | 第1关 | **重型轰炸机** | 宽体飞机,向下发射扇形弹幕,后期追加瞄准射击 | | 第2关 | **双子战斗机** | 两架战斗机交叉飞行,需全部击杀,后期会靠拢合体 | | 第3关 | **要塞** | 巨型飞船占据屏幕上方,带4个可破坏炮台,摧毁炮台后暴露核心 | 每个Boss有 **3个阶段**(按HP百分比切换),阶段越后期攻击越猛烈: - 阶段1:HP > 66% - 阶段2:HP 33% ~ 66% - 阶段3:HP < 33% Boss的HP条显示在屏幕顶部。 ### 关卡结构 游戏共 **3个关卡**,难度递增: | 关卡 | 名称 | 说明 | |------|------|------| | Stage 1 | Pacific Sky | 入门关卡,敌机种类少,节奏较慢 | | Stage 2 | Storm Assault | 中级关卡,敌机更密集,出现更多Tank和Turret | | Stage 3 | Final Fortress | 最终关卡,大量高难度敌机组合,最终Boss为要塞 | 通关全部3关即为胜利! ### 得分规则 - 击杀敌机获得对应分数(受连击倍率加成) - Boss击杀分数由所有存活玩家平分 - 每位玩家的分数独立计算 - 游戏结束后显示所有玩家的最终得分排行 ### HUD 界面说明 游戏画面中的信息显示: - **左下角**:SCORE(得分)、LIVES(剩余命数)、HP(血条)、WPN(武器等级)、BOMB(炸弹数量) - **右下角**:COMBO(连击倍率)、SHIELD(护盾层数)、当前关卡 - **右上角**:其他玩家的名字和分数 - **顶部**:Boss HP 条(Boss出现时显示) ### 断线与进度保存 游戏支持中途断线后保存进度并恢复: - **单人断线**:飞机进入自动驾驶模式(自动射击)持续30秒,期间重连可恢复控制 - **全员断线**:游戏自动暂停,完整保留当前进度(玩家状态、敌机、Boss、关卡进度) - **重新加入**:断线玩家刷新页面后自动回到房间,房间列表中显示 "Paused" 状态和 "Rejoin" 按钮 - **恢复游戏**:房主点击 "Resume Game" 按钮即可从暂停处继续游戏 - **超时清理**:暂停状态持续30分钟无人重连,房间自动销毁 - **身份保持**:使用浏览器本地存储的UUID标识玩家身份,刷新页面不会丢失身份 --- ## 项目结构 ``` d:\air\ ├── package.json # 项目配置与依赖 ├── server.js # 服务器入口 ├── server/ # 服务端代码 │ ├── GameServer.js # 全局房间管理与socket路由 │ ├── Room.js # 单个房间逻辑 │ ├── GameInstance.js # 服务端游戏主循环 │ ├── Player.js # 玩家实体 │ ├── EntityManager.js # 实体管理(子弹、敌机、道具) │ ├── CollisionSystem.js# 碰撞检测 │ ├── EnemyFactory.js # 敌机工厂 │ ├── BossFactory.js # Boss工厂 │ ├── PowerUpManager.js # 道具管理 │ ├── StageManager.js # 关卡管理 │ └── constants.js # 服务端常量 └── public/ # 客户端代码 ├── index.html # 页面 ├── css/style.css # 样式 └── js/ ├── main.js # 客户端入口 ├── network.js # 网络通信 ├── lobby.js # 大厅UI ├── game.js # 客户端游戏循环 ├── renderer.js # Canvas渲染 ├── input.js # 键盘输入 ├── particles.js # 粒子特效 ├── audio.js # 音效 └── constants.js # 客户端常量 ``` ## 技术栈 - **运行时**:Node.js - **HTTP服务**:Express.js - **实时通信**:Socket.IO(WebSocket) - **渲染**:HTML5 Canvas 2D - **音效**:Web Audio API(程序化生成) - **内网穿透**:ngrok