113 lines
3.8 KiB
TypeScript
113 lines
3.8 KiB
TypeScript
/**
|
|
* GameDataHandler - Data Sanitizer & Scorer
|
|
*
|
|
* Game Codes:
|
|
* - G001: Quiz text-text
|
|
* - G002: Quiz audio-text (audio question, text answer)
|
|
* - G003: Quiz text-audio (text question, audio answer)
|
|
* - G004: Quiz image-text (image question, text answer)
|
|
* - G005: Quiz text-image (text question, image answer)
|
|
*
|
|
* - G110: Sequence Word - no audio
|
|
* - G111: Sequence Word - có audio, missing_letter_count từ item
|
|
* - G112: Sequence Word - có audio, missing_letter_count từ item
|
|
* - G113: Sequence Word - có audio, missing_letter_count từ item
|
|
*
|
|
* - G120: Sequence Sentence - no audio
|
|
* - G121: Sequence Sentence - có audio, missing_letter_count từ item
|
|
* - G122: Sequence Sentence - có audio, missing_letter_count từ item
|
|
* - G123: Sequence Sentence - có audio, missing_letter_count từ item
|
|
*/
|
|
export type GameCode = 'G001' | 'G002' | 'G003' | 'G004' | 'G005' | 'G110' | 'G111' | 'G112' | 'G113' | 'G120' | 'G121' | 'G122' | 'G123';
|
|
export declare const GAME_CODES: {
|
|
readonly G001: {
|
|
readonly name: "Quiz Text-Text";
|
|
readonly category: "quiz";
|
|
readonly hasAudio: false;
|
|
readonly hasImage: false;
|
|
};
|
|
readonly G002: {
|
|
readonly name: "Quiz Audio-Text";
|
|
readonly category: "quiz";
|
|
readonly hasAudio: true;
|
|
readonly hasImage: false;
|
|
};
|
|
readonly G003: {
|
|
readonly name: "Quiz Text-Audio";
|
|
readonly category: "quiz";
|
|
readonly hasAudio: true;
|
|
readonly hasImage: false;
|
|
};
|
|
readonly G004: {
|
|
readonly name: "Quiz Image-Text";
|
|
readonly category: "quiz";
|
|
readonly hasAudio: false;
|
|
readonly hasImage: true;
|
|
};
|
|
readonly G005: {
|
|
readonly name: "Quiz Text-Image";
|
|
readonly category: "quiz";
|
|
readonly hasAudio: false;
|
|
readonly hasImage: true;
|
|
};
|
|
readonly G110: {
|
|
readonly name: "Sequence Word";
|
|
readonly category: "sequence_word";
|
|
readonly hasAudio: false;
|
|
};
|
|
readonly G111: {
|
|
readonly name: "Sequence Word Audio";
|
|
readonly category: "sequence_word";
|
|
readonly hasAudio: true;
|
|
};
|
|
readonly G112: {
|
|
readonly name: "Sequence Word Audio";
|
|
readonly category: "sequence_word";
|
|
readonly hasAudio: true;
|
|
};
|
|
readonly G113: {
|
|
readonly name: "Sequence Word Audio";
|
|
readonly category: "sequence_word";
|
|
readonly hasAudio: true;
|
|
};
|
|
readonly G120: {
|
|
readonly name: "Sequence Sentence";
|
|
readonly category: "sequence_sentence";
|
|
readonly hasAudio: false;
|
|
};
|
|
readonly G121: {
|
|
readonly name: "Sequence Sentence Audio";
|
|
readonly category: "sequence_sentence";
|
|
readonly hasAudio: true;
|
|
};
|
|
readonly G122: {
|
|
readonly name: "Sequence Sentence Audio";
|
|
readonly category: "sequence_sentence";
|
|
readonly hasAudio: true;
|
|
};
|
|
readonly G123: {
|
|
readonly name: "Sequence Sentence Audio";
|
|
readonly category: "sequence_sentence";
|
|
readonly hasAudio: true;
|
|
};
|
|
};
|
|
export declare function getGameCategory(code: GameCode): string;
|
|
/**
|
|
* Sanitize game data before sending to iframe
|
|
* CRITICAL: Never send answers/correct data to client
|
|
*/
|
|
export declare function sanitizeForClient(code: GameCode, items: any[]): any[];
|
|
export interface AnswerCheckResult {
|
|
isCorrect: boolean;
|
|
score: number;
|
|
feedback?: string;
|
|
}
|
|
/**
|
|
* Check if player's answer is correct
|
|
*
|
|
* @param code - Game code (G001, G110, etc.)
|
|
* @param originalItem - Original item from server (has answer field!)
|
|
* @param playerAnswer - Player's answer (text for quiz, array for sequence)
|
|
*/
|
|
export declare function checkAnswer(code: GameCode, originalItem: any, playerAnswer: any): AnswerCheckResult;
|
|
//# sourceMappingURL=GameDataHandler.d.ts.map
|