Spaces:
Running
Running
| /** | |
| * 成就系統整合指南 | |
| * | |
| * 此文件提供如何將成就系統整合到《數學魔法王國:平方之旅》遊戲中的詳細說明 | |
| */ | |
| // 1. 在遊戲主頁添加成就按鈕 | |
| // 將以下代碼添加到遊戲主頁的適當位置,例如導航菜單或主選單中 | |
| /** | |
| * HTML 範例 - 添加成就按鈕到主頁 | |
| * | |
| * <button class="menu-button" onclick="window.location.href='achievements.html'"> | |
| * <span class="button-icon">🏆</span> | |
| * <span class="button-text">成就圖鑑</span> | |
| * </button> | |
| */ | |
| // 2. 遊戲狀態更新時檢查成就 | |
| // 在遊戲狀態更新的關鍵點調用成就檢查函數 | |
| /** | |
| * 遊戲狀態更新範例 | |
| * | |
| * // 在關卡完成時 | |
| * function onTrialCompleted(trialName, stars, errors, completionTime) { | |
| * // 更新遊戲狀態 | |
| * const gameState = { | |
| * // 基本信息 | |
| * loginCount: getLoginCount(), | |
| * prologueCompleted: isPrologueCompleted(), | |
| * | |
| * // 試煉相關 | |
| * visitedTrials: getVisitedTrials(), | |
| * completedTrials: { | |
| * '平方之泉': { completed: isTrialCompleted('平方之泉'), stars: getTrialStars('平方之泉'), noErrors: hasNoErrors('平方之泉') }, | |
| * '變換山谷': { completed: isTrialCompleted('變換山谷'), stars: getTrialStars('變換山谷'), noErrors: hasNoErrors('變換山谷') }, | |
| * '展開之塔': { completed: isTrialCompleted('展開之塔'), stars: getTrialStars('展開之塔'), noErrors: hasNoErrors('展開之塔') } | |
| * }, | |
| * | |
| * // 當前完成的試煉信息 | |
| * currentTrial: trialName, | |
| * currentStars: stars, | |
| * currentErrors: errors, | |
| * currentCompletionTime: completionTime, | |
| * | |
| * // 其他統計 | |
| * maxCorrectStreak: getMaxCorrectStreak(), | |
| * fastestTrialTime: getFastestTrialTime(), | |
| * fastestQuestionTime: getFastestQuestionTime(), | |
| * retriesAfterFailure: getRetriesAfterFailure(), | |
| * lastTrialCompletionTime: new Date(), | |
| * lastTrialStartTime: getLastTrialStartTime(), | |
| * | |
| * // 特殊條件 | |
| * allThreeStarsSameDay: checkAllThreeStarsSameDay(), | |
| * firstAttemptAllThreeStars: checkFirstAttemptAllThreeStars(), | |
| * musicEnabledAllTrials: isMusicEnabledAllTrials(), | |
| * musicDisabledAllTrials: isMusicDisabledAllTrials() | |
| * }; | |
| * | |
| * // 檢查成就 | |
| * if (window.achievementSystem) { | |
| * window.achievementSystem.checkAllAchievements(gameState); | |
| * } | |
| * } | |
| */ | |
| // 3. 初始化成就系統 | |
| // 在遊戲主頁或全局腳本中初始化成就系統 | |
| /** | |
| * 初始化範例 | |
| * | |
| * // 確保成就系統在所有頁面都可用 | |
| * function initAchievementSystem() { | |
| * // 如果成就系統尚未初始化 | |
| * if (!window.achievementSystem) { | |
| * // 動態加載成就系統腳本 | |
| * const script = document.createElement('script'); | |
| * script.src = 'achievements.js'; | |
| * script.onload = function() { | |
| * console.log('成就系統腳本加載完成'); | |
| * // 腳本會自動初始化成就系統 | |
| * }; | |
| * document.head.appendChild(script); | |
| * } | |
| * } | |
| * | |
| * // 在頁面加載時初始化 | |
| * document.addEventListener('DOMContentLoaded', initAchievementSystem); | |
| */ | |
| // 4. 手動解鎖成就 | |
| // 在特定事件或條件達成時手動解鎖成就 | |
| /** | |
| * 手動解鎖範例 | |
| * | |
| * // 例如,當玩家首次登入時 | |
| * function onFirstLogin() { | |
| * if (window.achievementSystem) { | |
| * window.achievementSystem.unlockAchievement('journey_1'); | |
| * } | |
| * } | |
| * | |
| * // 或者當玩家完成序章時 | |
| * function onPrologueCompleted() { | |
| * if (window.achievementSystem) { | |
| * window.achievementSystem.unlockAchievement('journey_2'); | |
| * } | |
| * } | |
| */ | |
| // 5. 在遊戲中顯示成就統計 | |
| // 可以在遊戲主頁或玩家資料頁面顯示成就統計 | |
| /** | |
| * 成就統計顯示範例 | |
| * | |
| * function updateAchievementStats() { | |
| * if (window.achievementSystem) { | |
| * const totalAchievements = window.achievementSystem.achievements.length; | |
| * const unlockedAchievements = Object.values(window.achievementSystem.userAchievements) | |
| * .filter(progress => progress.unlocked).length; | |
| * | |
| * // 更新UI | |
| * document.getElementById('achievement-stats').textContent = | |
| * `成就進度: ${unlockedAchievements} / ${totalAchievements}`; | |
| * } | |
| * } | |
| */ | |
| // 6. 處理成就系統更新 | |
| // 當achievements.json更新時,確保玩家已解鎖的成就不會丟失 | |
| /** | |
| * 成就系統已經內建處理更新的邏輯,會自動合併localStorage中的進度與新的成就列表 | |
| * 不需要額外的代碼來處理這個問題 | |
| */ | |
| // 7. 測試成就系統 | |
| // 在開發階段可以使用debug模式測試成就系統 | |
| /** | |
| * 測試範例 | |
| * | |
| * // 在URL中添加debug=true參數來啟用測試模式 | |
| * // 例如: achievements.html?debug=true | |
| * | |
| * // 這將顯示一個"模擬解鎖成就"按鈕,點擊後會隨機解鎖一個未解鎖的成就 | |
| */ | |