如何修改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
相关产品推荐
相关产品推荐

