首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德克萨斯州霍尔顿扑克游戏

德克萨斯州霍尔顿扑克游戏
EN

Code Review用户
提问于 2016-10-22 02:45:54
回答 2查看 10.2K关注 0票数 1

我在为多个玩家做一个德州守住他们的游戏。到目前为止,我已经完成了博彩/呼叫序列的流程控制,播放器堆栈/壶更新,以及刚才负责绘制和分发卡片的部分。这是最后一部分,如果可能的话,我想加以审查。

本质上,我想知道我能以不同的方式/更有效率地做些什么,建议改变,实际上是任何可能有帮助的事情。检查来自玩家的正确输入等事情还没有到位,所以请忽略它们。

代码语言:javascript
复制
import itertools
import random

player_count = int(input("How many players? "))

suits = ['s', 'c', 'd', 'h']
faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K']

# Defining deck and drawing cards (5 + 2 per player):

deck = set(itertools.product(faces, suits))
drawn_cards = random.sample(deck,(5 + 2 * player_count))

# Storing a list with player object instances

players = []

class Players:

    def __init__(self, stack):

        self.stack = stack
        self.last_action = "none"  ## last action taken (check, call etc). 
        self.street_bets = 0       ## total bets on current street

    def holecards(self):

## pop cards from list and pritifying their display. Cards will later be 
## run through a function for checking value of hands:

        card1 = drawn_cards.pop(len(drawn_cards)-1) 
        card2 = drawn_cards.pop(len(drawn_cards)-1) 
        self.card1 = (card1[0]+"["+card1[1]+"]")    
        self.card2 = (card2[0]+"["+card2[1]+"]")     
        self.cards = self.card1+ " - " +self.card2
        print (self.cards)      

class Table:

    def __init__(self):     

        self.total_pot = 0

    def flop(self):

        card1 = drawn_cards.pop(len(drawn_cards)-1)
        card2 = drawn_cards.pop(len(drawn_cards)-1) 
        card2 = drawn_cards.pop(len(drawn_cards)-1)
        self.card1 = (card1[0]+"["+card1[1]+"]")
        self.card2 = (card2[0]+"["+card2[1]+"]")     
        self.card3 = (card2[0]+"["+card2[1]+"]")
        self.flop = self.card1+ " - " + self.card2 + " - " + self.card3
        print (self.flop)

    def turn(self):

        card = drawn_cards.pop(len(drawn_cards)-1)
        self.card = (card[0]+"["+card[1]+"]")
        self.turn = self.card
        print (self.turn)

    def river(self):

        card = drawn_cards.pop(len(drawn_cards)-1)
        self.card = (card[0]+"["+card[1]+"]")
        self.river = self.card
        print (self.river)



# Add player stacks and distribute holecards:

for i in range(player_count):
    players.append(i)
    players[i] = Players(100)
    players[i].holecards()

# Add dealer to table:

dealer = Table()

dealer.flop()
dealer.turn()
dealer.river()
EN

回答 2

Code Review用户

发布于 2016-10-22 04:14:53

合理的质量代码。以下是一些评论:

1)我添加了一个方法drawNextCard,它封装了下一张卡的检索,使代码更加可读性

代码语言:javascript
复制
def draw_next_card(drawn_cards):
    card = drawn_cards.pop(len(drawn_cards)-1)
    return readable_card_name(card)

def readable_card_name(short_card_name):
    return (short_card_name[0]+"["+short_card_name[1]+"]")

然后,例如,您的flop()方法将如下所示:

代码语言:javascript
复制
def flop(self):
    (self.card1, self.card2, self.card3) = (draw_next_card(drawn_cards), draw_next_card(drawn_cards), draw_next_card(drawn_cards)) 
     self.flop = self.card1+ " - " + self.card2 + " - " + self.card3
     print (self.flop)

更易读、更短,而且在途中,我们修复了一个复制/粘贴缺陷,您在这里初始化了两次card2,而不是card2card3

2)将每张抽签卡转换为可读的表示形式。它有利于您的调试,但不太好添加未来的功能,实际计算扑克手,和发展战略。因此,虽然上面的draw_next_card返回一个可读的表示,但最好是创建一个类Card,它有一个与readable_class_name具有相同实现的__str__方法。flop方法将保持不变,但扩展代码要容易得多。

3)注意flopriver是复制/粘贴的。两个人都可以打电话给draw_next_card。另外,虽然flowriver符合游戏术语,但它们对软件并没有多大好处;您最好将flopturnriver合并成table_cards[5]向量。一旦你开始开发实际的游戏,它将使事情变得容易得多。

希望这能有所帮助。

票数 4
EN

Code Review用户

发布于 2016-10-22 10:25:30

RomanK,我没有找到直接回复你的方法,但我不得不说谢谢你。所以-谢谢!

编辑:对不起,我想是“谢谢”。

另一个问题:经过深思熟虑后,使用类来处理和分配触发器、转弯和河流是否有意义?我用一个函数不是更好吗?我对它的思考越多,我就越少看到在类中使用这部分代码的任何理由--这似乎是一个更大的问题,而不是一个方便。

本质上,在洞牌被发给球员之后,drawn_cards列表中剩下的是董事会的5张牌。我现在所需要做的就是用一个函数显示它们:

代码语言:javascript
复制
def deal_community_cards(street):

    if street == "flop":
        flop = drawn_cards[0:3]
        return flop

    elif street == "turn":
        turn = drawn_cards[3]
        return turn

    else:
        river = drawn_cards[4]
        return river    

最后,我还会使用另一个函数对卡片显示进行“优先级化”。这难道不是比为这个创建一个完整的类更好的解决方案吗?

票数 -2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/144935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档