JavaScript 实现“教化”技能:两次出牌限制与牌型记录逻辑揭秘
以下是一个用 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. 当基本、锦囊、装备三种类型都已被记录时,要正确清空记录,并且在之后的发动中重新开始记录。 ######[AI写代码神器 | 846点数解答 | 2025-07-07 15:42:46]
- 卡牌游戏技能“教化”机制全解析:规则、代码与注意要点 (DeepSeek | 353点数解答 | 2025-07-07 15:40:28)169
- Python 模拟无名杀“教化”技能:出牌阶段规则与代码实现及优化建议(字节豆包 | 546点数解答 | 2025-07-07 15:41:02)175
- Java 实现“教化”技能:出牌阶段限两次的牌获取规则代码解析(字节豆包 | 1003点数解答 | 2025-07-07 15:41:54)144
- JavaScript 实现“教化”技能:两次出牌限制与牌型记录逻辑揭秘(字节豆包 | 846点数解答 | 2025-07-07 15:42:46)184
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)344
- 游戏技能代码深度剖析:潜在问题、改进方案与处理要点(字节豆包 | 1426点数解答 | 2025-10-16 15:31:36)107
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)312
- 超神技能!JavaScript 模拟游戏印记管理全揭秘(字节豆包 | 806点数解答 | 2026-01-05 18:14:42)32
- 无名杀“放逐”技能代码实现:主动技限两回,失技摸牌任你选! (字节豆包 | 528点数解答 | 2025-08-27 23:16:22)97
- 「alfr round 3」b:巧用贪心与栈,求解序列swap & delete最小操作数(百度文心 | 637点数解答 | 2024-12-21 14:56:50)322
- ALFR Round 3:巧用贪心与栈求解序列清空最小操作数(百度文心 | 969点数解答 | 2024-12-21 14:56:57)340
- 「alfr round 3」:揭秘长序列通过交换与删除操作清空的最小操作数(百度文心 | 1279点数解答 | 2024-12-21 14:57:07)395