# acapp **Repository Path**: ppshux/acapp ## Basic Information - **Project Name**: acapp - **Description**: Learn acapp of acwing - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-20 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AcApp - 多人在线游戏平台 一个基于 Django 和 WebSocket 的实时多人在线游戏平台,支持 AcWing OAuth 登录。 ## 功能特性 - 🎮 **实时多人游戏**:基于 WebSocket 的实时对战系统 - 👤 **用户系统**:支持 AcWing OAuth 一键登录 - 🏆 **排行榜系统**:玩家分数排名 - 💬 **社交功能**:用户空间、关注系统 - 📱 **多端支持**:Web 端和 AcApp 端 ## 技术栈 ### 后端 - **Django 3.2.8** - Web 框架 - **Django Channels** - WebSocket 支持 - **Redis** - 缓存和 Channel Layers - **Thrift RPC** - 匹配系统通信 - **Django REST Framework** - API 接口 ### 前端 - **JavaScript (ES6 Modules)** - 游戏逻辑 - **jQuery** - DOM 操作 - **Canvas API** - 游戏渲染 - **WebSocket** - 实时通信 ## 项目结构 ``` acapp/ ├── acapp/ # Django 项目配置 ├── game/ # 主应用 │ ├── models/ # 数据模型 │ ├── views/ # 视图函数 │ ├── consumers/ # WebSocket 消费者 │ ├── static/ # 静态文件 │ └── templates/ # 模板文件 ├── match_system/ # 匹配系统(Thrift) ├── scripts/ # 部署脚本 └── docs/ # 文档 ``` ## 快速开始 ### 环境要求 - Python 3.8+ - Redis - Thrift (用于匹配系统) ### 安装步骤 1. **克隆项目** ```bash git clone cd acapp ``` 2. **安装依赖** ```bash pip install -r requirements.txt ``` 3. **配置数据库** ```bash python manage.py migrate ``` 4. **收集静态文件** ```bash python manage.py collectstatic ``` 5. **编译 JavaScript** ```bash bash scripts/compress_game_js.sh ``` 6. **启动服务** ```bash # 启动 Redis redis-server # 启动匹配系统 cd match_system/src python3 main.py # 启动 Django python manage.py runserver ``` ## 主要功能模块 ### 游戏系统 - **单人模式**:与 AI 对战 - **多人模式**:实时多人匹配对战 - **匹配系统**:基于分数的智能匹配 ### 用户系统 - **AcWing OAuth**:一键登录 - **用户注册/登录**:传统账号系统 - **头像管理**:支持 AcWing 头像(带代理服务) ### 社交功能 - **用户空间**:个人主页 - **关注系统**:用户互相关注 - **动态发布**:用户动态功能 ## 游戏玩法 ### 游戏模式 #### 单人模式 - 与 5 个 AI 机器人对战 - 适合练习操作和技能 - 不影响在线排名 #### 多人模式 - 实时匹配其他玩家 - 至少 3 人才能开始战斗 - 胜利可获得分数,提升排名 - 支持实时聊天 ### 基本操作 #### 移动 - **鼠标右键点击**:移动到目标位置 - 角色会自动移动到点击位置 #### 技能系统 **1. 火球术(Q 键)** - 冷却时间:3 秒 - 使用方法:按 `Q` 键选择技能,然后鼠标左键点击目标位置发射火球 - 效果:火球会直线飞行,击中敌人造成伤害(减少敌人半径) **2. 闪现(F 键)** - 冷却时间:5 秒 - 使用方法:按 `F` 键选择技能,然后鼠标左键点击目标位置瞬间传送 - 效果:立即传送到目标位置,可用于躲避攻击或追击 #### 聊天功能(仅多人模式) - **打开聊天框**:按 `Enter` 键 - **关闭聊天框**:按 `ESC` 键 ### 战斗机制 - **生命值系统**:每个玩家初始有一个半径(代表生命值),被火球击中后半径会减小,半径归零时玩家被淘汰 - **攻击判定**:火球击中敌人时,敌人受到伤害并被击退,火球消失 - **游戏流程**: 1. 等待阶段:等待其他玩家加入(多人模式需至少 3 人) 2. 战斗阶段:开始对战,使用技能击败对手 3. 结束阶段:最后存活的玩家获胜 ### 胜利条件 - **胜利**:成为最后存活的玩家 - **失败**:半径归零被淘汰 游戏结束后会显示胜利或失败画面,点击屏幕返回主菜单。 ### 排行榜 - 在主菜单选择"排行榜"查看前 100 名玩家 - 按分数从高到低排序 - 显示玩家头像、用户名和分数 ## API 文档 ### 游戏相关 - `GET /settings/getinfo/` - 获取用户信息 - `GET /settings/photo_proxy/?url=...` - 头像代理服务 ### 社交相关 - `GET /myspace/userlist/` - 用户列表 - `GET /myspace/getinfo/` - 获取用户详情 ## 部署说明 ### 服务器配置 - 确保 Redis 服务运行 - 配置 Nginx 反向代理 - 设置静态文件服务 - 配置 WebSocket 支持 ### 环境变量 在 `acapp/settings.py` 中配置: - `ALLOWED_HOSTS` - 允许的主机 - `SECRET_KEY` - Django 密钥 - Redis 连接配置 ## 开发文档 - [修改日志](CHANGELOG.md) - 项目更新记录 - [排行榜实现说明](docs/LEADERBOARD_IMPLEMENTATION.md) - 排行榜功能开发指南 ## 常见问题 ### 头像无法显示 - 已实现头像代理服务,自动处理 AcWing CDN 的 Referer 限制 - 如果仍有问题,检查 `/settings/photo_proxy/` 路由是否正常 ### 游戏图片无法加载 - 确保已执行 `collectstatic` 收集静态文件 - 检查图片路径是否为绝对 URL(AcApp 端需要) ### WebSocket 连接失败 - 确保 Redis 服务运行 - 检查 Channels 配置 - 验证 Nginx WebSocket 配置 ## 贡献指南 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 许可证 本项目仅供学习使用。 ## 更新日志 ### 2024 - 修复头像和图片加载问题 - ✅ 实现头像代理服务,解决 AcWing CDN Referer 限制 - ✅ 修复游戏图片在 AcApp 端的显示问题 - ✅ 优化静态资源加载路径 详细修改记录请查看 [CHANGELOG.md](CHANGELOG.md) --- **一个伟大的史诗级巨著!!** 🎮