first commit

This commit is contained in:
Your Name
2026-06-10 18:23:39 +08:00
commit 790110de8e
225 changed files with 10068 additions and 0 deletions

208
lib/game/levels.dart Normal file
View File

@@ -0,0 +1,208 @@
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();