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

163 lines
4.8 KiB
JavaScript
Raw Normal View History

2025-10-10 19:35:04 +08:00
/**
* 游戏数据记录器 - 为所有游戏提供统一的数据记录功能
*/
class GameDataLogger {
constructor() {
this.gameStats = {
totalClicks: 0,
correctAnswers: 0,
incorrectAnswers: 0,
totalQuestions: 0,
startTime: null,
gameType: null
};
}
/**
* 初始化游戏数据记录
*/
initGame(gameType, totalQuestions = 0) {
this.gameStats = {
totalClicks: 0,
correctAnswers: 0,
incorrectAnswers: 0,
totalQuestions: totalQuestions,
startTime: Date.now(),
gameType: gameType
};
console.log('🎮 游戏数据记录器初始化');
console.log('📊 游戏信息:', {
游戏类型: gameType,
总问题数: totalQuestions,
开始时间: new Date().toLocaleString('zh-CN')
});
}
/**
* 记录用户点击/选择
*/
logUserAction(actionType, actionData) {
this.gameStats.totalClicks++;
console.log('👆 用户操作记录');
console.log('📊 操作信息:', {
操作类型: actionType,
操作次数: this.gameStats.totalClicks,
操作时间: new Date().toLocaleString('zh-CN'),
游戏时长: this.getGameDuration() + '秒'
});
console.log('🎯 操作详情:', actionData);
}
/**
* 记录问题回答
*/
logQuestionAnswer(questionData, userAnswer, isCorrect, score = 0) {
if (isCorrect) {
this.gameStats.correctAnswers++;
} else {
this.gameStats.incorrectAnswers++;
}
console.log('❓ 问题回答记录');
console.log('📊 问题信息:', {
问题内容: questionData.question || '未知问题',
问题编号: questionData.questionNumber || '未知',
选项: questionData.options || '未知',
正确答案: questionData.correct || '未知',
用户答案: userAnswer,
是否正确: isCorrect ? '✅ 正确' : '❌ 错误',
得分: score
});
console.log('📈 游戏统计:', {
总点击次数: this.gameStats.totalClicks,
正确次数: this.gameStats.correctAnswers,
错误次数: this.gameStats.incorrectAnswers,
正确率: this.getAccuracy() + '%',
平均得分: this.getAverageScore() + '分'
});
console.log('⏰ 时间信息:', {
回答时间: new Date().toLocaleString('zh-CN'),
游戏时长: this.getGameDuration() + '秒'
});
}
/**
* 记录游戏结果
*/
logGameResult(result, finalScore, gameData) {
console.log('🏁 游戏结果记录');
console.log('📊 最终统计:', {
游戏类型: this.gameStats.gameType,
游戏结果: result,
最终得分: finalScore,
总点击次数: this.gameStats.totalClicks,
正确次数: this.gameStats.correctAnswers,
错误次数: this.gameStats.incorrectAnswers,
正确率: this.getAccuracy() + '%',
游戏时长: this.getGameDuration() + '秒',
结束时间: new Date().toLocaleString('zh-CN')
});
if (gameData) {
console.log('🎯 游戏详情:', gameData);
}
}
/**
* 获取游戏时长
*/
getGameDuration() {
if (!this.gameStats.startTime) return 0;
return Math.floor((Date.now() - this.gameStats.startTime) / 1000);
}
/**
* 获取正确率
*/
getAccuracy() {
const total = this.gameStats.correctAnswers + this.gameStats.incorrectAnswers;
if (total === 0) return 0;
return ((this.gameStats.correctAnswers / total) * 100).toFixed(1);
}
/**
* 获取平均得分
*/
getAverageScore() {
const total = this.gameStats.correctAnswers + this.gameStats.incorrectAnswers;
if (total === 0) return 0;
return (this.gameStats.correctAnswers * 10 / total).toFixed(1);
}
/**
* 获取游戏统计
*/
getStats() {
return {
...this.gameStats,
gameDuration: this.getGameDuration(),
accuracy: this.getAccuracy(),
averageScore: this.getAverageScore()
};
}
/**
* 重置统计
*/
reset() {
this.gameStats = {
totalClicks: 0,
correctAnswers: 0,
incorrectAnswers: 0,
totalQuestions: 0,
startTime: null,
gameType: null
};
}
}
// 创建全局游戏数据记录器实例
window.gameDataLogger = new GameDataLogger();