35 lines
1.3 KiB
Dart
35 lines
1.3 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
import '../models/cognitive_type.dart';
|
||
|
|
|
||
|
|
class AssessmentService {
|
||
|
|
// 간단한 점수 산출 (Yes = 1점, 부족함 표시)
|
||
|
|
Map<CognitiveArea, int> calculateWeaknesses(Map<String, bool> answers) {
|
||
|
|
Map<CognitiveArea, int> scoreMap = {
|
||
|
|
CognitiveArea.memory: 0,
|
||
|
|
CognitiveArea.calculation: 0,
|
||
|
|
CognitiveArea.attention: 0,
|
||
|
|
CognitiveArea.perception: 0,
|
||
|
|
};
|
||
|
|
|
||
|
|
// 실제로는 질문 ID와 영역을 매핑해서 처리
|
||
|
|
// 예시 로직:
|
||
|
|
if (answers['q_memory_1'] == true) scoreMap[CognitiveArea.memory] = (scoreMap[CognitiveArea.memory] ?? 0) + 1;
|
||
|
|
// ...
|
||
|
|
return scoreMap;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 점수에 기반하여 오늘의 추천 게임 리스트 생성
|
||
|
|
List<BrainGameType> generateDailyCourse(Map<CognitiveArea, int> weaknesses) {
|
||
|
|
List<BrainGameType> course = [];
|
||
|
|
|
||
|
|
// 1. 가장 취약한 영역의 게임 1개 (난이도 하)
|
||
|
|
CognitiveArea weakest = weaknesses.entries.reduce((a, b) => a.value > b.value ? a : b).key;
|
||
|
|
course.add(BrainGameType.values.firstWhere((g) => g.area == weakest));
|
||
|
|
|
||
|
|
// 2. 랜덤하게 다른 영역 게임 2개 섞기 (균형 잡힌 훈련)
|
||
|
|
List<BrainGameType> others = BrainGameType.values.where((g) => g.area != weakest).toList()..shuffle();
|
||
|
|
course.addAll(others.take(2));
|
||
|
|
|
||
|
|
return course;
|
||
|
|
}
|
||
|
|
}
|