# AiDemo **Repository Path**: city-north/aiDemo ## Basic Information - **Project Name**: AiDemo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-23 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 推箱子游戏 (Sokoban) - SpringBoot Web项目 这是一个基于SpringBoot的简单推箱子游戏Web应用。 ## 项目结构 ``` AIDemo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/edu/sjtu/ai/demo/aidemo/ │ │ │ ├── AiDemoApplication.java # SpringBoot主启动类 │ │ │ ├── SokobanGame.java # 游戏核心逻辑 │ │ │ ├── SokobanController.java # REST控制器 │ │ │ └── LeaderboardService.java # 排行榜服务 │ │ └── resources/ │ │ ├── application.properties # 应用配置 │ │ ├── static/ # 静态资源 │ │ └── templates/ │ │ └── sokoban.html # 游戏前端页面 │ └── test/ ├── pom.xml # Maven配置 └── README.md # 说明文档 ``` ## 功能特性 ### 游戏功能 - 🎮 **3个预设关卡**:从简单到困难 - 🎯 **推箱子玩法**:将所有箱子推到目标位置 - ⌨️ **键盘控制**:支持方向键和WASD键移动 - 📊 **游戏统计**:显示当前关卡、步数和状态 - 🏆 **胜利检测**:自动检测通关并显示祝贺消息 - 🔄 **重新开始**:可以重新开始当前关卡 - 📋 **关卡选择**:随时切换不同关卡 - 👤 **玩家系统**:支持多玩家,记录玩家名称 - 🏆 **排行榜**:显示玩家得分排名 - 📈 **积分系统**:根据步数计算得分(基础分1000 - 步数×10) ### 技术特性 - **后端**:SpringBoot + Thymeleaf模板引擎 - **前端**:原生HTML/CSS/JavaScript - **响应式设计**:支持桌面和移动设备 - **RESTful API**:前后端分离架构 - **游戏状态管理**:服务器端维护游戏状态 - **排行榜服务**:使用ConcurrentHashMap存储玩家数据 - **积分计算**:自动计算每关得分 ## 快速启动 ### 使用启动脚本(推荐) #### macOS/Linux ```bash # 给脚本添加执行权限 chmod +x run.sh # 运行脚本 ./run.sh ``` #### Windows ```bash # 双击运行 run.bat ``` ### 使用IntelliJ IDEA #### 前提条件 - JDK 17 或更高版本 - IntelliJ IDEA (推荐Ultimate版,支持SpringBoot) #### 运行步骤 1. **打开项目** - 启动IntelliJ IDEA - 选择 "Open" 或 "Open or Import" - 选择本项目目录 `AIDemo` - 等待IDEA加载项目并索引文件 2. **配置运行配置** - 点击右上角的运行配置下拉菜单 - 选择 "Edit Configurations..." - 点击 "+" 添加新配置 - 选择 "Spring Boot" - 配置如下: - Name: `AIDemoApplication` - Main class: `cn.edu.sjtu.ai.demo.aidemo.AiDemoApplication` - Use classpath of module: `AIDemo` - 点击 "Apply" 和 "OK" 3. **运行应用** - 点击绿色的运行按钮 ▶️ (或按 Shift + F10) - 等待SpringBoot启动完成 - 在控制台看到类似输出: ``` Tomcat started on port(s): 8080 (http) Started AiDemoApplication in X.X seconds ``` 4. **访问游戏** - 打开浏览器 - 访问: `http://localhost:8080` - 或在IDEA中按住 Ctrl + 点击控制台中的URL ## 游戏玩法 ### 控制方式 - **方向键** ↑ ↓ ← →:上下左右移动 - **WASD键**:W(上)、S(下)、A(左)、D(右) ### 游戏元素 - `🧱` **墙** (#):不可通过 - `😊` **玩家** (@):你控制的角色 - `📦` **箱子** ($):需要推到目标位置 - `🎯` **目标** (.):箱子需要到达的位置 - `✅` **已完成** (*):箱子在目标位置上 - `😎` **玩家在目标上** (+):玩家站在目标位置 ### 胜利条件 将所有箱子推到绿色目标位置即可通关。 ### 关卡说明 - **关卡1**:简单入门,1个箱子 - **关卡2**:中等难度,2个箱子 - **关卡3**:较难,2个箱子,更多障碍 ## API接口 游戏通过RESTful API与前端交互: - `GET /` - 返回游戏页面 - `GET /api/game` - 获取当前游戏状态 - `POST /api/move` - 移动玩家(需要传递direction和playerName) - `POST /api/restart` - 重新开始当前关卡 - `POST /api/loadLevel` - 加载指定关卡 - `GET /api/leaderboard` - 获取排行榜数据 - `GET /api/playerStats` - 获取玩家统计信息 ## 技术实现 ### SokobanGame.java - 游戏核心逻辑类 - 处理地图解析、移动验证、胜利检测 - 支持多关卡管理 ### SokobanController.java - Spring MVC控制器 - 提供RESTful API接口 - 管理游戏会话状态 ### sokoban.html - 响应式前端界面 - 使用Fetch API与后端通信 - 支持键盘事件处理 - 动态渲染游戏地图 ## 自定义关卡 要添加新关卡,编辑 `SokobanGame.java` 中的 `LEVELS` 数组: ```java private static final String[] LEVELS = { // 关卡1 "########\n" + "# @ #\n" + "# $ #\n" + "# . #\n" + "########", // 添加新关卡... }; ``` 地图符号说明: - `#` - 墙 - `@` - 玩家 - `$` - 箱子 - `.` - 目标 - ` ` - 空地 ## 常见问题 ### 端口被占用 如果8080端口被占用,修改 `application.properties`: ```properties server.port=8081 ``` ### 页面无法访问 - 确保SpringBoot应用已成功启动 - 检查控制台是否有错误信息 - 确认浏览器访问的URL正确 ### 游戏不响应 - 检查浏览器控制台是否有JavaScript错误 - 确认网络连接正常 - 尝试刷新页面 ## 开发说明 ### 项目依赖 - Spring Boot Starter Web - Spring Boot Starter Thymeleaf - H2 Database (可选,当前未使用) ### 编译打包 ```bash mvn clean package ``` 生成的jar文件位于 `target/` 目录,可使用 `java -jar` 运行。 ## 许可证 本项目为学习目的创建,可自由使用和修改。 --- **祝您游戏愉快!** 🎮