export type DifficultyLevel = 'easy' | 'normal' | 'hard' export interface MapConfig { id: number name: string bgKey: string bgPath: string pathColor: number buildColor: number waypoints: readonly { x: number; y: number }[] decorations: { key: string col: number row: number }[] labels: { col: number; row: number; text: string }[] waveCount: number waves: WaveConfigEntry[] } export interface WaveConfigEntry { enemies: { type: 'FreshGraduate' | 'OldEmployee' | 'TroubleMaker' | 'BossVP' count: number interval: number }[] } /** 难度倍率配置 */ export const DIFFICULTY_MULTIPLIER: Record = { easy: { enemyCount: 0.7, enemySpeed: 0.85, bossHp: 0.7, hcReward: 1.1 }, normal: { enemyCount: 1.0, enemySpeed: 1.0, bossHp: 1.0, hcReward: 1.0 }, hard: { enemyCount: 1.5, enemySpeed: 1.35, bossHp: 1.8, hcReward: 0.75 }, } // 地图1:人力资源部(S型路径) // 路径:(0,2)→(11,2)→(11,9)→(15,9) const MAP1: MapConfig = { id: 1, name: '人力资源部 · 降本增效', bgKey: 'map1-bg', bgPath: '/game-assets/map1-bg.png', pathColor: 0x3d2b1f, buildColor: 0x1e3a5f, waypoints: [ { x: 0, y: 2 }, { x: 11, y: 2 }, { x: 11, y: 9 }, { x: 15, y: 9 }, ], decorations: [ { key: 'deco-coffee', col: 3, row: 0 }, { key: 'deco-monitor', col: 14, row: 1 }, { key: 'deco-desk', col: 5, row: 5 }, { key: 'deco-coffee', col: 9, row: 11 }, { key: 'deco-monitor', col: 1, row: 7 }, { key: 'deco-desk', col: 13, row: 4 }, ], labels: [ { col: 0, row: 0, text: '面试间' }, { col: 14, row: 10, text: '财务室' }, { col: 6, row: 5, text: 'HR办公区' }, ], waveCount: 5, waves: [ { enemies: [{ type: 'FreshGraduate', count: 14, interval: 650 }] }, { enemies: [{ type: 'FreshGraduate', count: 10, interval: 600 }, { type: 'OldEmployee', count: 3, interval: 1800 }] }, { enemies: [{ type: 'OldEmployee', count: 5, interval: 1500 }, { type: 'TroubleMaker', count: 4, interval: 1200 }] }, { enemies: [{ type: 'FreshGraduate', count: 16, interval: 500 }, { type: 'TroubleMaker', count: 4, interval: 1000 }] }, { enemies: [{ type: 'BossVP', count: 1, interval: 0 }, { type: 'OldEmployee', count: 4, interval: 1800 }, { type: 'FreshGraduate', count: 8, interval: 700 }] }, ], } // 地图2:技术研发部(Z型路径) // 路径:(0,1)→(8,1)→(8,5)→(3,5)→(3,10)→(15,10) const MAP2: MapConfig = { id: 2, name: '技术研发部 · 996福报', bgKey: 'map2-bg', bgPath: '/game-assets/map2-bg.png', pathColor: 0x1a3a2a, buildColor: 0x0f2040, waypoints: [ { x: 0, y: 1 }, { x: 8, y: 1 }, { x: 8, y: 5 }, { x: 3, y: 5 }, { x: 3, y: 10 }, { x: 15, y: 10 }, ], decorations: [ { key: 'deco-monitor', col: 1, row: 3 }, { key: 'deco-monitor', col: 10, row: 0 }, { key: 'deco-coffee', col: 6, row: 7 }, { key: 'deco-desk', col: 11, row: 3 }, { key: 'deco-monitor', col: 5, row: 8 }, { key: 'deco-coffee', col: 14, row: 7 }, { key: 'deco-desk', col: 0, row: 6 }, { key: 'deco-monitor', col: 13, row: 5 }, ], labels: [ { col: 0, row: 0, text: '研发中心' }, { col: 14, row: 11, text: '服务器机房' }, { col: 5, row: 3, text: '格子间' }, { col: 10, row: 8, text: 'Bug池' }, ], waveCount: 5, waves: [ { enemies: [{ type: 'FreshGraduate', count: 15, interval: 600 }, { type: 'OldEmployee', count: 3, interval: 1800 }] }, { enemies: [{ type: 'OldEmployee', count: 6, interval: 1300 }, { type: 'TroubleMaker', count: 4, interval: 1000 }] }, { enemies: [{ type: 'FreshGraduate', count: 18, interval: 450 }, { type: 'TroubleMaker', count: 5, interval: 900 }] }, { enemies: [{ type: 'BossVP', count: 1, interval: 0 }, { type: 'OldEmployee', count: 5, interval: 1300 }, { type: 'TroubleMaker', count: 3, interval: 1000 }] }, { enemies: [{ type: 'BossVP', count: 1, interval: 0 }, { type: 'FreshGraduate', count: 14, interval: 500 }, { type: 'TroubleMaker', count: 6, interval: 850 }] }, ], } // 地图3:高管会议室(W型路径,最难) // 路径:(0,0)→(5,0)→(5,6)→(10,6)→(10,2)→(15,2) const MAP3: MapConfig = { id: 3, name: '高管会议室 · 最后决战', bgKey: 'map3-bg', bgPath: '/game-assets/map3-bg.png', pathColor: 0x3d1f2b, buildColor: 0x2d1a40, waypoints: [ { x: 0, y: 0 }, { x: 5, y: 0 }, { x: 5, y: 6 }, { x: 10, y: 6 }, { x: 10, y: 2 }, { x: 15, y: 2 }, ], decorations: [ { key: 'deco-desk', col: 2, row: 2 }, { key: 'deco-desk', col: 8, row: 0 }, { key: 'deco-coffee', col: 12, row: 5 }, { key: 'deco-desk', col: 7, row: 9 }, { key: 'deco-monitor', col: 2, row: 9 }, { key: 'deco-coffee', col: 13, row: 9 }, { key: 'deco-desk', col: 1, row: 4 }, { key: 'deco-monitor', col: 14, row: 4 }, { key: 'deco-desk', col: 8, row: 8 }, ], labels: [ { col: 0, row: 1, text: '董事会' }, { col: 14, row: 3, text: '董事长室' }, { col: 7, row: 4, text: '会议室' }, ], waveCount: 5, waves: [ { enemies: [{ type: 'OldEmployee', count: 7, interval: 1300 }, { type: 'TroubleMaker', count: 5, interval: 900 }] }, { enemies: [{ type: 'BossVP', count: 1, interval: 0 }, { type: 'FreshGraduate', count: 16, interval: 500 }, { type: 'OldEmployee', count: 4, interval: 1300 }] }, { enemies: [{ type: 'BossVP', count: 1, interval: 0 }, { type: 'TroubleMaker', count: 8, interval: 700 }, { type: 'OldEmployee', count: 5, interval: 1200 }] }, { enemies: [{ type: 'BossVP', count: 2, interval: 4000 }, { type: 'OldEmployee', count: 6, interval: 1100 }, { type: 'FreshGraduate', count: 12, interval: 500 }] }, { enemies: [{ type: 'BossVP', count: 2, interval: 2500 }, { type: 'TroubleMaker', count: 10, interval: 550 }, { type: 'OldEmployee', count: 7, interval: 900 }] }, ], } export const ALL_MAPS: MapConfig[] = [MAP1, MAP2, MAP3]