// packages/feature_game_sudoku/lib/models/game_level.dart import 'package:service_api/service_api.dart'; // ๐Ÿ‘ˆ [์ถ”๊ฐ€] ๊ณตํ†ต ๋ชจ๋ธ import // // [๐Ÿ”ฅ ์ˆ˜์ •] 'extends GameDifficulty' ์ถ”๊ฐ€ // class GameLevel extends GameDifficulty { final int levelIndex; // 1-11 final int blockSize; // 2, 3, 4 final int generatorLevel; // ์„œ๋ฒ„์— ์š”์ฒญํ•  ์ƒ์„ฑ๊ธฐ ๋‚œ์ด๋„ (1~5) // โŒ 'name'๊ณผ 'contextId'๋Š” GameDifficulty๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ œ๊ฑฐ // final String name; // final String contextId; final bool isSequentialNumbers; final bool isSequentialLetters; const GameLevel({ required this.levelIndex, required super.name, // ๐Ÿ‘ˆ [์ˆ˜์ •] super()๋กœ ์ „๋‹ฌ required super.contextId, // ๐Ÿ‘ˆ [์ˆ˜์ •] super()๋กœ ์ „๋‹ฌ required this.blockSize, required this.generatorLevel, this.isSequentialNumbers = false, this.isSequentialLetters = false, }); } class AppLevels { static final List allLevels = [ // --- 2x2 (blockSize = 2) --- const GameLevel( levelIndex: 1, name: "์ž…๋ฌธ (4x4)", blockSize: 2, generatorLevel: 1, contextId: "SUDOKU_4x4_L1", isSequentialNumbers: true), const GameLevel( levelIndex: 2, name: "์ดˆ๊ธ‰ (4x4)", blockSize: 2, generatorLevel: 3, contextId: "SUDOKU_4x4_L3", isSequentialLetters: true), const GameLevel( levelIndex: 3, name: "์ˆ™๋ จ (4x4)", blockSize: 2, generatorLevel: 5, contextId: "SUDOKU_4x4_L5"), // --- 3x3 (blockSize = 3) --- const GameLevel( levelIndex: 4, name: "์‰ฌ์›€ (9x9)", blockSize: 3, generatorLevel: 1, contextId: "SUDOKU_9x9_L1", isSequentialNumbers: true), const GameLevel( levelIndex: 5, name: "์ค‘๊ธ‰ (9x9)", blockSize: 3, generatorLevel: 2, contextId: "SUDOKU_9x9_L2", isSequentialLetters: true), const GameLevel( levelIndex: 6, name: "์ƒ๊ธ‰ (9x9)", blockSize: 3, generatorLevel: 3, contextId: "SUDOKU_9x9_L3"), const GameLevel( levelIndex: 7, name: "์–ด๋ ค์›€ (9x9)", blockSize: 3, generatorLevel: 4, contextId: "SUDOKU_9x9_L4"), const GameLevel( levelIndex: 8, name: "์ตœ์ƒ๊ธ‰ (9x9)", blockSize: 3, generatorLevel: 5, contextId: "SUDOKU_9x9_L5"), // --- 4x4 (blockSize = 4) --- const GameLevel( levelIndex: 9, name: "์ „๋ฌธ๊ฐ€ (16x16)", blockSize: 4, generatorLevel: 1, contextId: "SUDOKU_16x16_L1", isSequentialNumbers: true), const GameLevel( levelIndex: 10, name: "๋งˆ์Šคํ„ฐ (16x16)", blockSize: 4, generatorLevel: 3, contextId: "SUDOKU_16x16_L3", isSequentialLetters: true), const GameLevel( levelIndex: 11, name: "์ง€์˜ฅ (16x16)", blockSize: 4, generatorLevel: 5, contextId: "SUDOKU_16x16_L5"), ]; static GameLevel getLevel(int levelIndex) { if (levelIndex < 1) levelIndex = 1; if (levelIndex > allLevels.length) levelIndex = allLevels.length; return allLevels.firstWhere((level) => level.levelIndex == levelIndex, orElse: () => allLevels[0]); } static Map get contextIdToNameMap { return {for (var level in allLevels) level.contextId: level.name}; } }