JS纸牌游戏中连续写多个不同参数的drawCard函数调用是否合理?
关于连续调用drawCard写法的可行性与优化方案
原有写法可行性
你现有的写法功能完全正常,不存在运行错误,只是存在大量重复代码,后续修改抽牌规则、增减玩家时需要手动增删调用语句,维护成本高,还容易出现写错参数、漏改的问题。
更优实现方式
方案1:封装批量抽卡工具函数
先封装一个支持指定抽牌次数的通用函数,避免重复写多次drawCard调用:
// 批量抽卡函数:hand为手牌对象,count为抽卡次数 function drawMultipleCards(hand, count) { Array.from({ length: count }).forEach(() => drawCard(hand)); }
调用时直接传入对应手牌和次数即可,代码量大幅减少:
drawMultipleCards(userHand, 2); drawMultipleCards(bot1Hand, 2); drawMultipleCards(bot2Hand, 2); drawMultipleCards(bot3Hand, 2); drawMultipleCards(bot4Hand, 2); drawMultipleCards(bot5Hand, 2); drawMultipleCards(dealerHand, 3);
方案2:配置化遍历执行(适合玩家数量多、规则常变动的场景)
如果后续可能调整玩家数量、各角色抽牌次数,可以把规则统一抽到配置数组里,逻辑和配置分离,维护更方便:
// 所有抽牌规则统一在这里配置,后续调整只需要改这个数组 const initDrawRules = [ { hand: userHand, count: 2 }, { hand: bot1Hand, count: 2 }, { hand: bot2Hand, count: 2 }, { hand: bot3Hand, count: 2 }, { hand: bot4Hand, count: 2 }, { hand: bot5Hand, count: 2 }, { hand: dealerHand, count: 3 } ]; // 执行逻辑,不需要改动 initDrawRules.forEach(({ hand, count }) => drawMultipleCards(hand, count));
如果你的机器人手牌已经存放在数组里(比如const botHands = [bot1Hand, bot2Hand, bot3Hand, bot4Hand, bot5Hand]),还可以进一步简化配置:
// 给所有机器人各抽2张 botHands.forEach(botHand => drawMultipleCards(botHand, 2)); // 用户抽2张 drawMultipleCards(userHand, 2); // 庄家抽3张 drawMultipleCards(dealerHand, 3);
优化后的代码优势非常明显:
- 没有冗余重复代码,出错概率更低
- 后续修改规则只需要调整配置,不需要改执行逻辑
- 扩展性强,新增玩家/调整抽牌次数的成本极低
内容的提问来源于stack exchange,提问作者Danko
相关产品推荐
相关产品推荐

