import type { BattleSession } from '../core/BattleSession'; import type { MapRegion } from '../battlefield/MapRegion'; import { createSoloRegion } from '../battlefield/MapRegion'; import { PlayerSlot } from './PlayerSlot'; /** 战斗模式策略:单人 / 双阵营(玩家 vs AI) */ export interface IBattleMode { /** 模式标识 */ readonly id: 'solo' | 'pvp'; /** * @param session 战斗会话 * @returns 初始玩家槽列表 */ createPlayers(session: BattleSession): PlayerSlot[]; /** * @param playerId 玩家 ID * @param mapRows 地图行数 * @param mapCols 地图列数 * @returns 该玩家可部署区域(全图;落子隔离由 CampArea 负责) */ getDeployRegion(playerId: number, mapRows: number, mapCols: number): MapRegion; } /** 单人闯关模式 */ export class SoloBattleMode implements IBattleMode { readonly id = 'solo' as const; /** @inheritdoc */ createPlayers(session: BattleSession): PlayerSlot[] { const level = session.levelDef; const region = createSoloRegion(level.mapRows, level.mapCols); return [ new PlayerSlot(0, level.wallHp, level.startGold ?? 0, region), ]; } /** @inheritdoc */ getDeployRegion(_playerId: number, mapRows: number, mapCols: number): MapRegion { return createSoloRegion(mapRows, mapCols); } } /** * 双玩家槽位(玩家 vs AI)。 * 双方部署区均为全图;阵营隔离由 CampAreaPolicy / MapPlaceValidator 负责。 */ export class PvPBattleMode implements IBattleMode { readonly id = 'pvp' as const; /** @inheritdoc */ createPlayers(session: BattleSession): PlayerSlot[] { const level = session.levelDef; const region = createSoloRegion(level.mapRows, level.mapCols); const startGold = level.startGold ?? 0; return [ new PlayerSlot(0, level.wallHp, startGold, region), new PlayerSlot(1, level.wallHp, startGold, region), ]; } /** @inheritdoc */ getDeployRegion(_playerId: number, mapRows: number, mapCols: number): MapRegion { return createSoloRegion(mapRows, mapCols); } }