Files
flame_flip/lib/game/levels.dart
2026-06-10 18:23:39 +08:00

209 lines
5.9 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
class LevelConfig {
final int id;
final List<int> rowPattern;
final int poolSize;
final int? flipBackDelayMs;
final int? maxMistakes;
final int? timeSec;
const LevelConfig({
required this.id,
required this.rowPattern,
required this.poolSize,
this.flipBackDelayMs,
this.maxMistakes,
this.timeSec,
});
int get rows => rowPattern.length;
int get maxCols {
if (rowPattern.isEmpty) return 0;
int max = rowPattern.first;
for (final v in rowPattern) {
if (v > max) max = v;
}
return max;
}
int get totalCards {
int sum = 0;
for (final v in rowPattern) {
sum += v;
}
return sum;
}
}
// 15关高难度配置16张牌起步容错/时间/延迟全程递减布局多样行数≤8
const List<LevelConfig> levels = [
// 第1关16张4×4基础高难起步
LevelConfig(
id: 1,
rowPattern: [4, 4, 4, 4],
poolSize: 8,
flipBackDelayMs: 600,
maxMistakes: 50,
timeSec: 90,
),
// 第2关16张5+3+5+34行交错非对称记忆干扰提升
LevelConfig(
id: 2,
rowPattern: [5, 3, 5, 3],
poolSize: 8,
flipBackDelayMs: 580,
maxMistakes: 45,
timeSec: 85,
),
// 第3关18张3×66行紧凑布局行数增加+牌数提升
LevelConfig(
id: 3,
rowPattern: [3, 3, 3, 3, 3, 3],
poolSize: 9,
flipBackDelayMs: 550,
maxMistakes: 40,
timeSec: 80,
),
// 第4关18张6+4+4+44行非对称宽列+短列混合
LevelConfig(
id: 4,
rowPattern: [6, 4, 4, 4],
poolSize: 9,
flipBackDelayMs: 520,
maxMistakes: 38,
timeSec: 78,
),
// 第5关20张5×44行满列牌数再提升+列数增加
LevelConfig(
id: 5,
rowPattern: [5, 5, 5, 5],
poolSize: 10,
flipBackDelayMs: 500,
maxMistakes: 35,
timeSec: 75,
),
// 第6关20张4+6+4+64行交错宽列视觉复杂度升级
LevelConfig(
id: 6,
rowPattern: [4, 6, 4, 6],
poolSize: 10,
flipBackDelayMs: 480,
maxMistakes: 32,
timeSec: 70,
),
// 第7关24张4×66行满列牌数大幅提升+行数拉满6行
LevelConfig(
id: 7,
rowPattern: [4, 4, 4, 4, 4, 4],
poolSize: 12,
flipBackDelayMs: 450,
maxMistakes: 30,
timeSec: 68,
),
// 第8关24张7+5+7+54行极限交错宽列差提升记忆难度
LevelConfig(
id: 8,
rowPattern: [6, 5, 6, 5],
poolSize: 12,
flipBackDelayMs: 420,
maxMistakes: 28,
timeSec: 65,
),
// 第9关28张4×77行布局行数接近上限+牌数再提升
LevelConfig(
id: 9,
rowPattern: [4, 4, 4, 4, 4, 4, 4],
poolSize: 14,
flipBackDelayMs: 400,
maxMistakes: 25,
timeSec: 60,
),
// 第10关28张6+5+6+5+65行非对称不规则布局增加记忆压力
LevelConfig(
id: 10,
rowPattern: [6, 5, 6, 5, 6],
poolSize: 14,
flipBackDelayMs: 380,
maxMistakes: 22,
timeSec: 58,
),
// 第11关30张5×66行满列牌数达中高段峰值+列数5列
LevelConfig(
id: 11,
rowPattern: [5, 5, 5, 5, 5, 5],
poolSize: 15,
flipBackDelayMs: 350,
maxMistakes: 20,
timeSec: 55,
),
// 第12关30张7+8+7+84行超宽列列数拉满8列+极端非对称
LevelConfig(
id: 12,
rowPattern: [6, 6, 6, 6],
poolSize: 15,
flipBackDelayMs: 320,
maxMistakes: 18,
timeSec: 50,
),
// 第13关36张6×66行满列牌数大幅提升+高列数,记忆量拉满
LevelConfig(
id: 13,
rowPattern: [6, 6, 6, 6, 6, 6],
poolSize: 18,
flipBackDelayMs: 300,
maxMistakes: 15,
timeSec: 48,
),
// 第14关40张5×88行上限行数拉满+牌数峰值,布局压力拉满
LevelConfig(
id: 14,
rowPattern: [5, 5, 5, 5, 5, 5, 5, 5],
poolSize: 20,
flipBackDelayMs: 280,
maxMistakes: 10,
timeSec: 45,
),
// 第15关40张8+7+8+7+8+76行极致交错全关难度顶峰
LevelConfig(
id: 15,
rowPattern: [6, 6, 6, 6, 6, 6],
poolSize: 20,
flipBackDelayMs: 250,
maxMistakes: 5,
timeSec: 40,
),
];
const Map<String, String> faceMap = {
'dx': 'faces/96a3be3cf272e017046d1b2674a52bd3.png',
'ht': 'faces/a2ef406e2c2351e0b9e80029c909242d.png',
'hx': 'faces/e45ee7ce7e88149af8dd32b27f9512ce.png',
'hl': 'faces/7d0665438e81d8eceb98c1e31fca80c1.png',
'js': 'faces/751d31dd6b56b26b29dac2c0e1839e34.png',
'kl': 'faces/faeac4e1eef307c2ab7b0a3821e6c667.png',
'm': 'faces/d72d187df41e10ea7d9fcdc7f5909205.png',
'mf': 'faces/fad6f4e614a212e80c67249a666d2b09.png',
'mty': 'faces/0a8005f5594bd67041f88c6196192646.png',
'xg': 'faces/d3d9446802a44259755d38e6d163e820.png',
'xj': 'faces/6512bd43d9caa6e02c990b0a82652dca.png',
'xm': 'faces/c20ad4d76fe97759aa27a0c99bff6710.png',
'xt': 'faces/c51ce410c124a10e0db5e4b97fc2af39.png',
'xy': 'faces/aab3238922bcc25a6f606eb525ffdc56.png',
'xz': 'faces/9bf31c7ff062936a96d3c8bd1f8f2ff3.png',
'xz1': 'faces/c74d97b01eae257e44aa9d5bade97baf.png',
'xz2': 'faces/70efdf2ec9b086079795c442636b55fb.png',
'xz3': 'faces/6f4922f45568161a8cdf4ad2299f6d23.png',
'xz4': 'faces/1f0e3dad99908345f7439f8ffabdffc4.png',
'xz5': 'faces/98f13708210194c475687be6106a3b84.png',
'xz6': 'faces/3c59dc048e8850243be8079a5c74d079.png',
'22': 'faces/b6d767d2f8ed5d21a44b0e5886680cb9.png',
'23': 'faces/37693cfc748049e45d87b8c7d8b9aacd.png',
'24': 'faces/1ff1de774005f8da13f42943881c655f.png',
'25': 'faces/8e296a067a37563370ded05f5a3bf3ec.png',
'26': 'faces/4e732ced3463d06de0ca9a15b6153677.png',
'27': 'faces/02e74f10e0327ad868d138f2b4fdd6f0.png',
'28': 'faces/33e75ff09dd601bbe69f351039152189.png',
'29': 'faces/6ea9ab1baa0efb9e19094440c317e21b.png',
'30': 'faces/34173cb38f07f89ddbebc2ac9128303f.png',
'31': 'faces/c16a5320fa475530d9583c34fd356ef5.png',
};
final List<String> allFaceIds = faceMap.keys.toList();