Files
RGKT/rg-09112127/js/gameTracker.js

186 lines
5.1 KiB
JavaScript
Raw Normal View History

2025-10-10 19:35:04 +08:00
/**
* 游戏跟踪器 - 记录游戏结果
*/
class GameTracker {
constructor() {
this.currentGameId = null;
this.gameStartTime = null;
this.attemptsCount = 0;
this.gameData = null;
}
/**
* 开始游戏跟踪
*/
startGame(gameId, gameData = null) {
this.currentGameId = gameId;
this.gameStartTime = Date.now();
this.attemptsCount = 0;
this.gameData = gameData;
// 详细数据打印
console.log('🎮 游戏开始跟踪');
console.log('📊 游戏信息:', {
游戏ID: gameId,
游戏类型: gameData?.gameType || '未知',
难度: gameData?.difficulty || '未知',
开始时间: new Date().toLocaleString('zh-CN'),
总问题数: gameData?.totalQuestions || '未知'
});
console.log('🎯 开始游戏跟踪:', gameId);
}
/**
* 记录游戏尝试
*/
recordAttempt() {
this.attemptsCount++;
// 详细数据打印
console.log('🔄 游戏尝试记录');
console.log('📊 尝试信息:', {
游戏ID: this.currentGameId,
尝试次数: this.attemptsCount,
尝试时间: new Date().toLocaleString('zh-CN'),
游戏时长: this.getCurrentPlayTime() + '秒'
});
console.log('🎯 记录游戏尝试:', this.attemptsCount);
}
/**
* 记录游戏胜利
*/
async recordWin(score = 0, gameData = null) {
await this.recordGameResult('win', score, gameData);
}
/**
* 记录游戏失败
*/
async recordLose(score = 0, gameData = null) {
await this.recordGameResult('lose', score, gameData);
}
/**
* 记录正确答案
*/
async recordCorrect(score = 0, gameData = null) {
await this.recordGameResult('correct', score, gameData);
}
/**
* 记录错误答案
*/
async recordIncorrect(score = 0, gameData = null) {
await this.recordGameResult('incorrect', score, gameData);
}
/**
* 记录游戏未完成
*/
async recordIncomplete(score = 0, gameData = null) {
await this.recordGameResult('incomplete', score, gameData);
}
/**
* 记录游戏结果
*/
async recordGameResult(gameResult, score = 0, additionalGameData = null) {
if (!this.currentGameId || !this.gameStartTime) {
console.warn('游戏跟踪未开始或已结束');
return;
}
const playTimeSeconds = Math.floor((Date.now() - this.gameStartTime) / 1000);
const finalGameData = additionalGameData || this.gameData;
// 详细数据打印
console.log('📝 游戏结果记录');
console.log('📊 游戏统计:', {
游戏ID: this.currentGameId,
游戏结果: gameResult,
最终得分: score,
游戏时长: playTimeSeconds + '秒',
尝试次数: this.attemptsCount,
结束时间: new Date().toLocaleString('zh-CN')
});
if (finalGameData) {
console.log('🎯 游戏详情:', {
问题内容: finalGameData.question || '未知问题',
用户选择: finalGameData.selected || '未知选择',
正确答案: finalGameData.correct || '未知答案',
总问题数: finalGameData.totalQuestions || '未知',
正确次数: finalGameData.correctAnswers || '未知'
});
}
console.log('🎮 记录游戏结果:', {
gameId: this.currentGameId,
result: gameResult,
score: score,
playTime: playTimeSeconds,
attempts: this.attemptsCount
});
try {
await window.apiService.recordGameResult(
this.currentGameId,
gameResult,
score,
playTimeSeconds,
this.attemptsCount,
finalGameData ? JSON.stringify(finalGameData) : null
);
console.log('✅ 游戏结果已成功发送到后端');
} catch (error) {
console.error('❌ 记录游戏结果失败:', error);
}
// 重置状态
this.reset();
}
/**
* 重置跟踪状态
*/
reset() {
this.currentGameId = null;
this.gameStartTime = null;
this.attemptsCount = 0;
this.gameData = null;
}
/**
* 获取当前游戏时长
*/
getCurrentPlayTime() {
if (!this.gameStartTime) return 0;
return Math.floor((Date.now() - this.gameStartTime) / 1000);
}
/**
* 检查是否正在跟踪游戏
*/
isTracking() {
return this.currentGameId !== null && this.gameStartTime !== null;
}
/**
* 获取当前游戏ID
*/
getCurrentGameId() {
return this.currentGameId;
}
/**
* 获取尝试次数
*/
getAttemptsCount() {
return this.attemptsCount;
}
}
// 创建全局游戏跟踪器实例
window.gameTracker = new GameTracker();