以下是一个用 JavaScript 实现上述功能的代码示例: ```javascript // 定义角色类 class Character { constructor(name) { this.name = name; } } // 定义牌堆类 class CardPile { constructor() { // 初始化牌堆,包含基本牌、锦囊牌和装备牌 this.cards = [ ...Array(10).fill('basic'), ...Array(10).fill('spell'), ...Array(10).fill('equipment') ]; } // 从牌堆中随机抽取一张指定类型的牌 drawCardByType(type) { const typeCards = this.cards.filter(card => card === type); if (typeCards.length === 0) { return null; } const randomIndex = Math.floor(Math.random() * typeCards.length); const drawnCard = typeCards[randomIndex]; // 从牌堆中移除已抽取的牌 this.cards = this.cards.filter(card => card !== drawnCard); return drawnCard; } } // 定义玩家类,包含技能相关逻辑 class Player { constructor(name) { this.name = name; this.activationCount = 0; // 技能发动次数 this.recordedTypes = []; // 记录的牌类型 } // 发动〖教化〗技能 initiateEnlightenment(cardPile, targetCharacter) { // 检查发动次数是否超过限制 if (this.activationCount >= 2) { console.log('发动次数已达上限,无法再次发动。'); return; } // 可选择的牌类型 const availableTypes = ['basic', 'spell', 'equipment'].filter(type =>!this.recordedTypes.includes(type)); if (availableTypes.length === 0) { // 若三种类型都已记录,清空记录 this.recordedTypes = []; console.log('基本、锦囊、装备均已被记录,清空记录。'); } if (availableTypes.length === 0) { console.log('没有可选择的牌类型。'); return; } // 随机选择一个未记录的牌类型 const randomIndex = Math.floor(Math.random() * availableTypes.length); const selectedType = availableTypes[randomIndex]; // 目标角色从牌堆中获得一张此类型的牌 const drawnCard = cardPile.drawCardByType(selectedType); if (drawnCard) { console.log(`${targetCharacter.name} 从牌堆中获得一张 ${selectedType} 牌。`); // 记录此类型 this.recordedTypes.push(selectedType); this.activationCount++; } else { console.log(`牌堆中没有 ${selectedType} 牌。`); } } } // 测试代码 const cardPile = new CardPile(); const player = new Player('玩家'); const targetCharacter = new Character('目标角色'); // 发动技能 player.initiateEnlightenment(cardPile, targetCharacter); player.initiateEnlightenment(cardPile, targetCharacter); player.initiateEnlightenment(cardPile, targetCharacter); ``` 额外需要注意的逻辑点 1. 牌堆中指定类型的牌可能会被抽完,需要在抽取时进行检查,避免出现逻辑错误。 2. 技能发动次数的限制需要严格控制,确保不会超过两次。 3. 当基本、锦囊、装备三种类型都已被记录时,要正确清空记录,并且在之后的发动中重新开始记录。 [2025-07-07 15:42:46 | AI写代码神器 | 846点数解答]