根据《三国杀》游戏规则和技能描述,我将为"蜀相"角色设计对应的JavaScript代码实现: ```javascript / * 蜀相角色技能实现 */ class ShuXiang { constructor(player) { this.player = player; // 关联的玩家对象 this.hasGivenCards = false; // 标记本回合是否已给牌 } / * 出牌阶段结束时的技能触发 * @param {Array} targets 可选的目标玩家数组 */ onPhaseEnd(targets) { if (!this.canUseSkill()) return; const handCards = this.player.getHandCards(); if (handCards.length === 0) return; // 将手牌分配给目标(每人至多一张) this.distributeCards(handCards, targets); // 如果交出了所有手牌,可以造成火焰伤害 if (this.player.getHandCards().length === 0 && this.hasGivenCards) { this.dealFireDamage(targets[0]); // 对第一个目标造成伤害 } this.updateImmunity(); // 更新免疫状态 } / * 分发手牌给其他玩家 */ distributeCards(handCards, targets) { let givenCount = 0; const maxGive = Math.min(handCards.length, targets.length); for (let i = 0; i < maxGive; i++) { const card = handCards[i]; const target = targets[i]; if (this.player.giveCard(card, target)) { givenCount++; } } this.hasGivenCards = givenCount > 0; return givenCount; } / * 造成火焰伤害 */ dealFireDamage(target) { if (!target) return; target.takeDamage(1, 'fire'); } / * 更新免疫杀和决斗的状态 */ updateImmunity() { const hasNoCards = this.player.getHandCards().length === 0; this.player.setImmune('kill', hasNoCards && !this.player.isActive()); this.player.setImmune('duel', hasNoCards && !this.player.isActive()); } / * 检查技能是否可用 */ canUseSkill() { return this.player.isActive() && !this.hasGivenCards; } / * 回合开始时重置状态 */ onTurnStart() { this.hasGivenCards = false; this.updateImmunity(); } } ``` 1. 技能触发时机需严格控制在出牌阶段结束时 2. 火焰伤害的触发条件必须满出全部手牌 3. 免疫效果只在回合外且无手牌时生效 [2025-04-15 23:18:16 | AI写代码神器 | 599点数解答]