You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改poker_ai脚本实现自定义选牌功能?

自定义扑克发牌的修改方案

1. 修改 deck.py 的 pick() 方法

在原有随机选牌逻辑基础上,添加手动选牌分支,支持指定数量的手动选牌输入:

def pick(self, n: int = 1, manual: bool = False) -> List[Card]:
    if manual:
        selected_cards = []
        while len(selected_cards) < n:
            card_input = input(f"请输入第{len(selected_cards)+1}张牌(格式如Ah、10s,与牌堆输出格式一致):").strip()
            match_found = False
            for card in self._cards:
                if card.__str__() == card_input:
                    selected_cards.append(card)
                    self._cards.remove(card)
                    match_found = True
                    break
            if not match_found:
                print("输入的牌不存在或已被选取,请重新输入")
        return selected_cards
    else:
        # 保留原有随机选牌逻辑
        picked = random.sample(self._cards, n)
        for card in picked:
            self._cards.remove(card)
        return picked

注:先打印任意一张Card实例确认格式,确保输入格式与__str__()输出完全匹配,比如若输出为"A♥"则需对应输入"A♥"

2. 修改 dealer.py 的发牌逻辑

找到发私牌、公共牌的方法,修改pick()调用时传入manual=True:

发私牌

def deal_private_cards(self, player: Player) -> None:
    private_cards = self.deck.pick(2, manual=True)
    player.receive_private_cards(private_cards)

发公共牌(翻牌/转牌/河牌)

def deal_flop(self) -> None:
    flop_cards = self.deck.pick(3, manual=True)
    self.table.set_community_cards(flop_cards)

def deal_turn(self) -> None:
    turn_card = self.deck.pick(1, manual=True)
    self.table.add_to_community_cards(turn_card)

def deal_river(self) -> None:
    river_card = self.deck.pick(1, manual=True)
    self.table.add_to_community_cards(river_card)

3. 调整测试脚本实现分步触发

修改测试脚本,确保发牌步骤分步执行,让输入提示正常显示:

# 初始化游戏组件
deck = Deck()
table = Table()
dealer = Dealer(deck=deck, table=table)
player = Player(name="自定义玩家", stack=1000)
table.add_player(player)

# 分步执行发牌流程
print("===== 发放私牌 =====")
dealer.deal_private_cards(player)
print(f"当前玩家私牌:{[str(card) for card in player.private_cards]}")

print("\n===== 发放翻牌 =====")
dealer.deal_flop()
print(f"当前公共牌:{[str(card) for card in table.community_cards]}")

print("\n===== 发放转牌 =====")
dealer.deal_turn()
print(f"当前公共牌:{[str(card) for card in table.community_cards]}")

print("\n===== 发放河牌 =====")
dealer.deal_river()
print(f"最终公共牌:{[str(card) for card in table.community_cards]}")

关键注意事项

  • 若需要保留随机发牌功能,可通过全局变量或命令行参数控制manual的取值,实现两种模式切换
  • 手动选牌时会自动从牌堆移除已选卡牌,避免重复发牌问题

内容的提问来源于stack exchange,提问作者Jaime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:35:20