| 12 | // 黑方半场: row 0-4; 红方半场: row 5-9 |
| 13 | |
| 14 | QVector<PuzzleConfig> getBuiltinPuzzles() |
| 15 | { |
| 16 | QVector<PuzzleConfig> puzzles; |
| 17 | |
| 18 | // ============================================================ |
| 19 | // 残局1: 双车错 (红先胜) |
| 20 | // 红双车配合,逼将入绝路 |
| 21 | // 布局: 黑将d10, 黑士e10; 红车a9, 红车h3, 红帅e1 |
| 22 | // 思路: 双车交替将军,逐步逼杀 |
| 23 | // ============================================================ |
| 24 | { |
| 25 | PuzzleConfig p; |
| 26 | p.name = "双车错"; |
| 27 | p.description = "红先胜,双车交替将军"; |
| 28 | p.redFirst = true; |
| 29 | p.playerIsRed = true; |
| 30 | p.pieces = { |
| 31 | {4, 0, 3}, // 黑将 d10 (row=0,col=3) 九宫内✓ |
| 32 | {5, 0, 4}, // 黑士 e10 (row=0,col=4) 九宫内✓ |
| 33 | {16, 8, 0}, // 红车 a2 (row=8,col=0) |
| 34 | {24, 6, 7}, // 红车 h4 (row=6,col=7) |
| 35 | {20, 9, 4}, // 红帅 e1 (row=9,col=4) 九宫内✓ |
| 36 | }; |
| 37 | puzzles.append(p); |
| 38 | } |
| 39 | |
| 40 | // ============================================================ |
| 41 | // 残局2: 马后炮 (红先胜) |
| 42 | // 经典马后炮杀法:马控制将的退路,炮借马为架将军 |
| 43 | // 布局: 黑将e10, 黑士d9, 黑卒e8; |
| 44 | // 红马d8, 红炮e3, 红帅d1 |
| 45 | // 思路: 马跳到关键位置后炮将军,形成马后炮绝杀 |
| 46 | // ============================================================ |
| 47 | { |
| 48 | PuzzleConfig p; |
| 49 | p.name = "马后炮"; |
| 50 | p.description = "红先胜,经典马后炮杀法"; |
| 51 | p.redFirst = true; |
| 52 | p.playerIsRed = true; |
| 53 | p.pieces = { |
| 54 | {4, 0, 4}, // 黑将 e10 (row=0,col=4) 九宫内✓ |
| 55 | {3, 1, 3}, // 黑士 d9 (row=1,col=3) 九宫内✓ |
| 56 | {11, 2, 4}, // 黑卒 e8 (row=2,col=4) |
| 57 | {17, 3, 2}, // 红马 c7 (row=3,col=2) |
| 58 | {25, 7, 5}, // 红炮 f3 (row=7,col=5) |
| 59 | {20, 9, 3}, // 红帅 d1 (row=9,col=3) 九宫内✓ |
| 60 | }; |
| 61 | puzzles.append(p); |
| 62 | } |
| 63 | |
| 64 | // ============================================================ |
| 65 | // 残局3: 铁门栓 (红先胜) |
| 66 | // 车炮配合,炮借子为架封锁将门 |
| 67 | // 布局: 黑将e10, 黑士d10, 黑士f10; |
| 68 | // 红车a8, 红炮d5, 红帅e1 |
| 69 | // 思路: 车移至底线配合炮将军 |
| 70 | // ============================================================ |
| 71 | { |