我正在做一个快速而又肮脏的扑克游戏,需要确定哪只牌获胜

时间:2013-06-15 04:56:09

标签: python list dictionary poker

我正在使用python进行快速而肮脏的扑克游戏,并且无法确定哪个玩家获胜。我有处理牌的功能,以0-8对应高牌的方式确定手牌的“价值” - 同花顺,然后是每只手的唯一关键部分。

我遇到的问题是确定当有两个或更多玩家拥有相同的手牌类型(一对,两对等)时谁赢了,当他们拥有相同的一对时更糟糕,我有下去看看踢球者。

我无法确定存储数据的好方法,并根据需要将它们全部进行比较。我不想包括我的所有函数来检查手值以及因为它会花费太长时间。 我真的对人们对如何存储和比较这些数据的想法感兴趣,特别是关于具有相似值的手(粗体中的东西)所提到的

每个玩家的手由一个字典条目表示,由玩家编号键入

形式
mydict = {(1 :(2,'Spades)), (2 :(3,'Diamonds')), etc}

players = 5
# Creates deck of cards and deals to each player
Cards = Shuffle_Deck(Suits,Values,1)
All_Players, Cards = deal_hand(players,5,Cards)

# scores and orders hands
def order_hands(All_Players):
    rank_hands = []
    for i in range(1,len(All_Players)+1):
        rank_hands.append([i,score_hand(All_Players[i],printhand=False,printvalue=False)])
    sorted_hands = rank_hands[:]
    sorted_hands.sort(key=lambda x: x[1][0],reverse=True)
    return sorted_hands

Sorted_Hands = order_hands(All_Players)
#print Sorted_Hands
def who_Wins(Sorted_Hands):
    Tied_Hands = []
    winning_index = Sorted_Hands[0][1][0]
    for i in range(len(Sorted_Hands)):
        if Sorted_Hands[i][1][0] == winning_index:
#            print Sorted_Hands[i]
            Tied_Hands.append([Sorted_Hands[i][0],Sorted_Hands[i][1][1:]])

    return winning_index,Tied_Hands

winning_index,Tied_Hands = who_Wins(Sorted_Hands)
Tied_Hands.sort(key=lambda x: x[1], reverse=True)
print Tied_Hands
for i in range(len(Tied_Hands)):
    vals = [val for (val,suit) in All_Players[Tied_Hands[i][0]]]
    print 'vals',sorted(vals,reverse=True)
#for hands in Tied_Hands:
#    if
print Tied_Hands[0][0]

2 个答案:

答案 0 :(得分:4)

按如下方式构建评估函数:

1)首先,确定它是什么类型的手(最高卡,一对,两对......皇家同花顺)。手型应该是从最差到最佳排序的枚举。

2)其次,对手中的牌进行分类 - 构成手牌的牌应首先出现(特别是对于一个完整的牌,三种类型应该先在两种牌之前),然后将所有剩余的卡从最好到最差排序。

3)手型和排序牌的元组 - 这是评估手牌的好坏。

按比例构建比较函数:

1)首先,比较手型。如果一个更高,那手就更好。

2)否则,比较分类牌中的第一张牌。如果一个更高,那手就更好。

3)继续在每张卡上做2)。

现在,您可以使用比较器对任意数量的牌进行排序,从最差到最好的牌。

您还可以为每只手创建一个分数,然后只比较整数 - 例如,最差(在最不重要的意义上)卡+第二张最差卡* 11 +第三张卡* 11 ^ 2 +第四张卡* 11 ^ 3 +最佳卡* 11 ^ 4 +手型* 11 ^ 5

答案 1 :(得分:4)

这是我写的一个例子:

http://www.paulgriffiths.net/program/python/pcards.php

_set_score()方法可以解决问题。我想出的解决方案是在列表中对组件进行评分。例如,对于满堂红,列表中的第一项是整体牌的得分(例如,满屋击败一对,直接击败三种),列表中的第二项是三者的等级。一种,列表中的第三项是该对的等级。这样,您可以非常简单地比较任何一只手,只需将一只手与另一只手(即一个列表与另一只手)进行比较,使用常规&lt ;,>,< =,> =运算符,Python就可以完成所有努力工作您。对于一个完整的房子,当你比较列表时,Python将依次查看每个项目。如果双手都是满屋子,它会比较三种类型,最高的三只会赢。如果三个是相同的,它将比较两对,最高的一对将获胜。如果三和三对相等,则双手相等。此方法通常有效,只需比较列表即可比较任意两只手。