【发布时间】:2019-11-25 04:54:08
【问题描述】:
这是我迄今为止的一些扑克游戏代码,我得到了 def main 来展示一些牌,但我不知道得到同花顺和皇家同花顺。还有,我该怎么做高牌?
卡号值 0-12 是一个花色,13-25 是下一个花色,26-38 和 39-51。
另外,如果有人能告诉我如何将这个 PokerHand 类实现到另一个 def 主窗口中。
class PokerHand:
"""class for representing a poker hand"""
# Poker value of hands in increasing order so they can be compared
HIGH_CARD = 0
TWO_OF_A_KIND = 1
TWO_PAIRS = 2
THREE_OF_A_KIND = 3
STRAIGHT = 4
FLUSH = 5
FULL_HOUSE = 6
FOUR_OF_A_KIND = 7
STRAIGHT_FLUSH = 8
# hand names for printing the card names
HAND_NAMES = ('High Card', 'Two of a Kind', 'Two Pairs', 'Three of a Kind',
'Straight', 'Flush', 'Full House', 'Four of a Kind',
'Straight Flush')
#------------------------------------------------------------------
def __init__(self):
"""initialize empty hand"""
self.cards = []
#------------------------------------------------------------------
def addCard(self, cardNumber):
"""add cardNumber to the hand"""
self.cards.append(cardNumber)
#------------------------------------------------------------------
def evalHand(self):
"""determine the value of the hand and return a tuple; the
first value in the tuple is an integer corresponding to the
hand value using the constants HIGH_CARD, TWO_OF_A_KIND, etc.;
the remaining values in the tuple depend on the type of hand
and are described below to break ties based on the face values
of the cards
for HIGH_CARD, it is five values: the face values sorted in
descending order
for TWO_OF_A_KIND, it is four values: the face value for the
pair, followed by the face values of the other cards in
descending order
for TWO_PAIRS, it is three values: the face value of the
higher pair, the face value of the lower pair, followed by the
face value of the other card
for THREE_OF_A_KIND, it is three values: the face value of the
three of a kind, followed by the face value of the other two
cards in descending order
for STRAIGHT, it is one value: the face value of the lowest
card in the straight
for FLUSH, it is five values: the face values sorted in
descending order
for FULL_HOUSE, it is two values: the face value of the three
of a kind, followed by the face value of the pair
for FOUR_OF_A_KIND, it is two values: the face value that
there are four of followed by the face value that there is one
of
for STRAIGHT_FLUSH, it is one value: the face value of the
lowest card in the straight"""
faces = [0,0,0,0,0,0,0,0,0,0,0,0,0]
for value in self.cards:
face = value % 13
faces[face] += 1
suits = [0,0,0,0]
for value in self.cards:
suit = value // 13
suits[suit] += 1
if faces.count(2) == 1 and faces.count(1) == 3:
return self.TWO_OF_A_KIND
elif faces.count(2) == 2 and faces.count(1) == 1:
return self.TWO_PAIRS
elif faces.count(3) == 1 and faces.count(1) == 2:
return self.THREE_OF_A_KIND
elif faces.count(3) == 1 and faces.count(2) == 1:
return self.FULL_HOUSE
elif faces.count(4) == 1 and faces.count(1) == 1:
return self.FOUR_OF_A_KIND
elif faces.count(1) == 5:
pos = faces.index(1)
if faces[pos:pos+5] == [1,1,1,1,1] or faces[pos:pos+13] == [1,0,0,0,0,0,0,0,0,1,1,1,1]:
return self.STRAIGHT
if suits.count(5) == 1 and suits.count(1) == 0:
return self.FLUSH
if suits.count(5) == 1 and faces.count(1) == 5:
pos = faces.index(1)
if faces[pos:pos + 5] == [1, 1, 1, 1, 1] or faces[pos:pos + 13] == [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]:
return self.STRAIGHT_FLUSH
return self.STRAIGHT_FLUSH
#----------------------------------------------------------------------
def main():
hand = PokerHand()
hand.addCard(9)
hand.addCard(10)
hand.addCard(8)
hand.addCard(11)
hand.addCard(7)
r = hand.evalHand()
print(r)
print(PokerHand.HAND_NAMES[r])
if __name__ == '__main__':
main()
【问题讨论】:
-
您能澄清一下“将这个 PokerHand 类实现到另一个 def 主窗口中”的意思吗?
-
与其用数字来表示A234..JQKA234...,我会用AAAA22223333...这样,你消除了除以13(现在它只是一个移位),而且更容易在检查每种手型之前按等级对手牌进行排序。