math-kingdom-game / achievement_integration_guide.js
Lashtw's picture
Upload 32 files
6a517c6 verified
/**
* 成就系統整合指南
*
* 此文件提供如何將成就系統整合到《數學魔法王國:平方之旅》遊戲中的詳細說明
*/
// 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
*
* // 這將顯示一個"模擬解鎖成就"按鈕,點擊後會隨機解鎖一個未解鎖的成就
*/