Python卡牌游戏开发:自定义选牌放回牌堆顶及指定卡牌抽取
卡牌游戏功能实现方案
现有代码的核心逻辑已经通顺,只需少量扩展即可实现你要的两个功能:
功能1:自主选择指定手牌放回牌堆顶部
你当前写的on_top方法本身已经预留了索引参数i,默认值-1对应放回手牌列表最后一张(也就是你最近抽到的牌)。如果要放回指定位置的手牌,调用方法时直接传入目标手牌在hand列表中的索引即可。
举个例子,若当前手牌为[1, 4, 5, 3],想把值为4的牌(列表索引为1)放回牌堆顶,直接执行:
player_1.on_top(1)
执行后手牌变为[1, 5, 3],卡牌4会被放到牌堆顶部。
如果不想记索引,想直接通过卡牌面值选择要放回的牌,可以给Player类新增一个按值查找放回的方法:
def return_card_by_value(self, target_card): if target_card not in self.hand: raise ValueError("当前手牌中没有这张卡牌") card_idx = self.hand.index(target_card) self.on_top(card_idx)
调用时直接传入要放回的卡牌值即可,比如要放回面值为5的牌:
player_1.return_card_by_value(5)
功能2:搜索牌堆指定卡牌并抽取
现有draw方法默认抽取牌堆顶部的牌,要实现指定卡牌抽取,只需要分别给Deck类和Player类扩展对应方法即可。
首先给Deck类新增按值抽牌的方法:
def deal_specific_card(self, target_card): if target_card not in self.cards: raise ValueError("当前牌堆中没有这张卡牌") card_idx = self.cards.index(target_card) return self.cards.pop(card_idx)
再给Player类新增对应的抽指定牌方法:
def draw_specific(self, target_card): card = self.deck.deal_specific_card(target_card) self.hand.append(card)
如果要直接抽取牌堆里面值为7的牌,执行以下代码即可:
player_1.draw_specific(7)
目标卡牌会直接从牌堆移除并加入手牌,不会打乱牌堆内其他卡牌的顺序。
补充说明:如果你的卡组存在同面值的重复卡牌,Python列表的
index()方法默认只会返回第一个匹配值的索引。如果需要区分同面值的不同卡牌,可以给每张卡牌增加唯一ID属性,查找时遍历判断ID即可精准定位。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

