# 歌曲智能排序功能说明 ## 功能概述 为 Taiko Web 项目添加了智能歌曲排序功能,按照**数字、字母、其他符号(包括中文、日文等)**的顺序自动排列歌曲。 ✨ **重要**:该功能已**默认启用**,用户无需任何设置。 ## 排序规则 ### 1. 字符类型优先级 - **数字** (0-9) - 最优先 - **英文字母** (A-Z, a-z) - 次优先 - **其他符号** (中文、日文、特殊符号等) - 最后 ### 2. 同类型字符排序 - **数字**:按数值大小排序(例如:1, 2, 10, 100) - **字母**:按字母顺序排序,不区分大小写 - **其他符号**:按 Unicode 编码排序 ## 使用方法 ### 默认行为 **无需任何操作!** 打开游戏后,歌曲已自动按智能顺序排列。 ### 禁用排序(可选) 如果不需要排序功能: 1. 在歌曲选择界面找到 **"タイトル順で並べ替え"** 选项 2. 点击该选项 3. 输入 `false` 禁用 ### localStorage 控制 也可以通过浏览器控制台手动设置: ```javascript // 禁用排序 localStorage.setItem("titlesort", "false"); location.reload(); // 重新启用排序 localStorage.setItem("titlesort", "true"); location.reload(); ``` // 禁用排序 localStorage.setItem("titlesort", "false"); ``` ## 排序示例 假设有以下歌曲标题: ``` 未排序: - 太鼓の達人 - Zyxwv - 123 - abc - 456 - *Special* - 10 - あいうえお - 2 - ZZZ 排序后: - 2 (数字) - 10 (数字) - 123 (数字) - 456 (数字) - abc (字母) - Zyxwv (字母) - ZZZ (字母) - *Special* (符号) - あいうえお (日文) - 太鼓の達人 (日文) ``` ## 技术实现 ### 修改文件 - `public/src/js/songselect.js` ### 核心函数 ```javascript smartSort(titleA, titleB) ``` ### 实现特点 1. **字符类型识别**:通过 Unicode 编码判断字符类型 2. **自然排序**:使用 `localeCompare` 的 `numeric` 选项,确保数字按数值排序 3. **多语言支持**:支持英文、中文、日文等各种语言 4. **大小写不敏感**:字母排序时忽略大小写 ## 代码变更 ### 1. 调用智能排序 ```javascript const titlesort = localStorage.getItem("titlesort") ?? "false"; if (titlesort === "true") { this.songs.sort((a, b) => this.smartSort(a.title, b.title)); } ``` ### 2. 智能排序函数 添加了 `smartSort(titleA, titleB)` 方法到 `SongSelect` 类中,实现: - 字符类型判断(数字/字母/其他) - 按类型优先级排序 - 同类型内自然排序 ## 注意事项 1. 排序功能**默认启用**,首次使用即可看到效果 2. 排序状态会保存在浏览器的 localStorage 中 3. 刷新页面后排序设置会保持 4. 排序不会影响游戏的其他功能 5. 如需恢复原始顺序,可手动禁用排序 ## 兼容性 - ✅ 支持所有现代浏览器 - ✅ 兼容触摸设备 - ✅ 不影响现有功能 ## 未来改进方向 - [ ] 添加更多排序选项(难度、时长等) - [ ] 添加自定义排序规则 - [ ] 添加排序方向切换(升序/降序)