File size: 5,129 Bytes
6a517c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
 * 成就系統整合指南
 * 
 * 此文件提供如何將成就系統整合到《數學魔法王國:平方之旅》遊戲中的詳細說明
 */

// 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
 * 
 * // 這將顯示一個"模擬解鎖成就"按鈕,點擊後會隨機解鎖一個未解鎖的成就
 */