diff --git a/apps/app_finddiff/ios/Runner/Info.plist b/apps/app_finddiff/ios/Runner/Info.plist
index 030eb75..5dc07eb 100644
--- a/apps/app_finddiff/ios/Runner/Info.plist
+++ b/apps/app_finddiff/ios/Runner/Info.plist
@@ -45,7 +45,7 @@
UIApplicationSupportsIndirectInputEvents
- GADApplicationIdentifier
- ca-app-pub-3940256099942544~1458002511
+ GADApplicationIdentifier
+ ca-app-pub-3940256099942544~1458002511
diff --git a/packages/feature_brain_trainer/.gitignore b/packages/feature_brain_trainer/.gitignore
new file mode 100644
index 0000000..dd5eb98
--- /dev/null
+++ b/packages/feature_brain_trainer/.gitignore
@@ -0,0 +1,31 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
+/pubspec.lock
+**/doc/api/
+.dart_tool/
+.flutter-plugins-dependencies
+/build/
+/coverage/
diff --git a/packages/feature_brain_trainer/.metadata b/packages/feature_brain_trainer/.metadata
new file mode 100644
index 0000000..d7469f0
--- /dev/null
+++ b/packages/feature_brain_trainer/.metadata
@@ -0,0 +1,10 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "adc901062556672b4138e18a4dc62a4be8f4b3c2"
+ channel: "stable"
+
+project_type: package
diff --git a/packages/feature_brain_trainer/CHANGELOG.md b/packages/feature_brain_trainer/CHANGELOG.md
new file mode 100644
index 0000000..41cc7d8
--- /dev/null
+++ b/packages/feature_brain_trainer/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.0.1
+
+* TODO: Describe initial release.
diff --git a/packages/feature_brain_trainer/LICENSE b/packages/feature_brain_trainer/LICENSE
new file mode 100644
index 0000000..ba75c69
--- /dev/null
+++ b/packages/feature_brain_trainer/LICENSE
@@ -0,0 +1 @@
+TODO: Add your license here.
diff --git a/packages/feature_brain_trainer/README.md b/packages/feature_brain_trainer/README.md
new file mode 100644
index 0000000..4a260d8
--- /dev/null
+++ b/packages/feature_brain_trainer/README.md
@@ -0,0 +1,39 @@
+
+
+TODO: Put a short description of the package here that helps potential users
+know whether this package might be useful for them.
+
+## Features
+
+TODO: List what your package can do. Maybe include images, gifs, or videos.
+
+## Getting started
+
+TODO: List prerequisites and provide or point to information on how to
+start using the package.
+
+## Usage
+
+TODO: Include short and useful examples for package users. Add longer examples
+to `/example` folder.
+
+```dart
+const like = 'sample';
+```
+
+## Additional information
+
+TODO: Tell users more about the package: where to find more information, how to
+contribute to the package, how to file issues, what response they can expect
+from the package authors, and more.
diff --git a/packages/feature_brain_trainer/analysis_options.yaml b/packages/feature_brain_trainer/analysis_options.yaml
new file mode 100644
index 0000000..a5744c1
--- /dev/null
+++ b/packages/feature_brain_trainer/analysis_options.yaml
@@ -0,0 +1,4 @@
+include: package:flutter_lints/flutter.yaml
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
diff --git a/packages/feature_brain_trainer/lib/feature_brain_trainer.dart b/packages/feature_brain_trainer/lib/feature_brain_trainer.dart
new file mode 100644
index 0000000..298576d
--- /dev/null
+++ b/packages/feature_brain_trainer/lib/feature_brain_trainer.dart
@@ -0,0 +1,5 @@
+/// A Calculator.
+class Calculator {
+ /// Returns [value] plus 1.
+ int addOne(int value) => value + 1;
+}
diff --git a/packages/feature_brain_trainer/lib/models/cognitive_type.dart b/packages/feature_brain_trainer/lib/models/cognitive_type.dart
new file mode 100644
index 0000000..c83983c
--- /dev/null
+++ b/packages/feature_brain_trainer/lib/models/cognitive_type.dart
@@ -0,0 +1,21 @@
+enum CognitiveArea {
+ memory, // 기억력
+ calculation, // 계산/논리력
+ attention, // 주의집중력
+ perception, // 시지각/공간지각력
+}
+
+// 게임별 훈련 영역 매핑
+enum BrainGameType {
+ sequence(CognitiveArea.memory, '순서 기억'), // feature_game_sequence
+ cardFlip(CognitiveArea.memory, '카드 뒤집기'), // feature_game_cardflip
+ mathQuiz(CognitiveArea.calculation, '암산 퀴즈'), // feature_game_mathquiz
+ sudoku(CognitiveArea.calculation, '스도쿠'), // feature_game_sudoku
+ colorMatch(CognitiveArea.attention, '색상 매칭'), // feature_game_colormatch
+ findDiff(CognitiveArea.perception, '다른 그림 찾기'), // feature_game_finddiff
+ spider(CognitiveArea.perception, '스파이더 카드'); // feature_game_spider
+
+ final CognitiveArea area;
+ final String label;
+ const BrainGameType(this.area, this.label);
+}
\ No newline at end of file
diff --git a/packages/feature_brain_trainer/lib/screens/brain_training_home.dart b/packages/feature_brain_trainer/lib/screens/brain_training_home.dart
new file mode 100644
index 0000000..0a8b621
--- /dev/null
+++ b/packages/feature_brain_trainer/lib/screens/brain_training_home.dart
@@ -0,0 +1,116 @@
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+import 'package:feature_common/feature_common.dart';
+import 'package:service_api/service_api.dart';
+
+// 각 게임 패키지 import
+import 'package:feature_game_sudoku/feature_game_sudoku.dart';
+import 'package:feature_game_mathquiz/feature_game_mathquiz.dart';
+// ... (나머지 게임들)
+
+class BrainTrainingHome extends StatelessWidget {
+ const BrainTrainingHome({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(title: const Text('두뇌 건강 지킴이')),
+ body: SingleChildScrollView(
+ padding: const EdgeInsets.all(16),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ // 1. 상태 체크 카드
+ _buildCheckupCard(context),
+
+ const SizedBox(height: 24),
+
+ // 2. 오늘의 추천 코스 (자동 믹스 게임)
+ const Text('오늘의 추천 훈련', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
+ const SizedBox(height: 10),
+ _buildDailyTrainingButton(context),
+
+ const SizedBox(height: 24),
+
+ // 3. 게임 아케이드 (자유 선택)
+ const Text('전체 게임', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
+ const SizedBox(height: 10),
+ _buildGameGrid(context),
+ ],
+ ),
+ ),
+ );
+ }
+
+ Widget _buildCheckupCard(BuildContext context) {
+ return Card(
+ color: Colors.indigo.shade50,
+ child: ListTile(
+ leading: const Icon(Icons.health_and_safety, size: 40, color: Colors.indigo),
+ title: const Text('나의 두뇌 건강 체크'),
+ subtitle: const Text('간단한 질문으로 현재 상태를 확인하고\n맞춤형 훈련을 추천받으세요.'),
+ trailing: const Icon(Icons.arrow_forward_ios),
+ onTap: () {
+ // TODO: 체크리스트 화면으로 이동
+ // Navigator.push(context, MaterialPageRoute(builder: (_) => AssessmentScreen()));
+ },
+ ),
+ );
+ }
+
+ Widget _buildDailyTrainingButton(BuildContext context) {
+ return ElevatedButton.icon(
+ style: ElevatedButton.styleFrom(
+ padding: const EdgeInsets.all(20),
+ backgroundColor: Colors.orange,
+ foregroundColor: Colors.white,
+ ),
+ icon: const Icon(Icons.play_circle_fill, size: 32),
+ label: const Text('오늘의 코스 시작하기\n(맞춤형 3종 세트)', textAlign: TextAlign.center, style: TextStyle(fontSize: 18)),
+ onPressed: () {
+ // TODO: Assessment 결과에 따라 선정된 게임들을 순차적으로 실행하는 로직
+ // 예: Sequence -> Math -> ColorMatch 순서로 실행되는 별도 Flow 화면으로 이동
+ },
+ );
+ }
+
+ Widget _buildGameGrid(BuildContext context) {
+ // 모든 게임 리스트
+ final games = [
+ {'name': '스도쿠', 'icon': Icons.grid_3x3, 'dest': const SudokuLobbyScreen()},
+ {'name': '계산 퀴즈', 'icon': Icons.calculate, 'dest': const MathQuizLobbyScreen()},
+ {'name': '순서 기억', 'icon': Icons.onetwothree, 'dest': const SequenceLobbyScreen()},
+ // ... 나머지 게임 추가
+ ];
+
+ return GridView.builder(
+ shrinkWrap: true,
+ physics: const NeverScrollableScrollPhysics(),
+ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 2,
+ childAspectRatio: 1.5,
+ crossAxisSpacing: 10,
+ mainAxisSpacing: 10,
+ ),
+ itemCount: games.length,
+ itemBuilder: (context, index) {
+ return GestureDetector(
+ onTap: () {
+ Navigator.push(context, MaterialPageRoute(builder: (_) => games[index]['dest'] as Widget));
+ },
+ child: Card(
+ elevation: 2,
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Icon(games[index]['icon'] as IconData, size: 36, color: Colors.blueGrey),
+ const SizedBox(height: 8),
+ Text(games[index]['name'] as String, style: const TextStyle(fontWeight: FontWeight.bold)),
+ ],
+ ),
+ ),
+ );
+ },
+ );
+ }
+}
\ No newline at end of file
diff --git a/packages/feature_brain_trainer/lib/services/assessment_service.dart b/packages/feature_brain_trainer/lib/services/assessment_service.dart
new file mode 100644
index 0000000..9a1fd3e
--- /dev/null
+++ b/packages/feature_brain_trainer/lib/services/assessment_service.dart
@@ -0,0 +1,35 @@
+import 'package:flutter/material.dart';
+import '../models/cognitive_type.dart';
+
+class AssessmentService {
+ // 간단한 점수 산출 (Yes = 1점, 부족함 표시)
+ Map calculateWeaknesses(Map answers) {
+ Map 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 generateDailyCourse(Map weaknesses) {
+ List 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 others = BrainGameType.values.where((g) => g.area != weakest).toList()..shuffle();
+ course.addAll(others.take(2));
+
+ return course;
+ }
+}
\ No newline at end of file
diff --git a/packages/feature_brain_trainer/pubspec.yaml b/packages/feature_brain_trainer/pubspec.yaml
new file mode 100644
index 0000000..e65a569
--- /dev/null
+++ b/packages/feature_brain_trainer/pubspec.yaml
@@ -0,0 +1,54 @@
+name: feature_brain_trainer
+description: "A new Flutter package project."
+version: 0.0.1
+homepage:
+
+environment:
+ sdk: ^3.9.2
+ flutter: ">=1.17.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^5.0.0
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter packages.
+flutter:
+
+ # To add assets to your package, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+ #
+ # For details regarding assets in packages, see
+ # https://flutter.dev/to/asset-from-package
+ #
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/to/resolution-aware-images
+
+ # To add custom fonts to your package, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts in packages, see
+ # https://flutter.dev/to/font-from-package
diff --git a/packages/feature_brain_trainer/test/feature_brain_trainer_test.dart b/packages/feature_brain_trainer/test/feature_brain_trainer_test.dart
new file mode 100644
index 0000000..6c3b827
--- /dev/null
+++ b/packages/feature_brain_trainer/test/feature_brain_trainer_test.dart
@@ -0,0 +1,12 @@
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:feature_brain_trainer/feature_brain_trainer.dart';
+
+void main() {
+ test('adds one to input values', () {
+ final calculator = Calculator();
+ expect(calculator.addOne(2), 3);
+ expect(calculator.addOne(-7), -6);
+ expect(calculator.addOne(0), 1);
+ });
+}