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