pk.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package algorithm
  2. func (c *Cards) Counter() *ValueCounter {
  3. var counter ValueCounter
  4. counter.Set(*c)
  5. return &counter
  6. }
  7. func (c *Cards) GetType() uint32 {
  8. numCards := len(*c)
  9. if numCards == 0 {
  10. return 0
  11. }
  12. cards := *c
  13. counter := c.Counter()
  14. ASort(cards, 0, int8(numCards)-1, counter)
  15. checks := []func() uint32{
  16. c.royalFlush,
  17. c.straightFlush,
  18. func() uint32 { return c.four(counter) },
  19. func() uint32 { return c.fullFouse(counter) },
  20. c.flush,
  21. c.straight,
  22. func() uint32 { return c.three(counter) },
  23. c.twoPair,
  24. c.onePair,
  25. }
  26. for _, check := range checks {
  27. if res := check(); res != 0 {
  28. return res
  29. }
  30. }
  31. // 高牌(High Card):如果不符合任何组合,则返回最高牌
  32. //高牌(high card)
  33. //既不是同一花色也不是同一点数的五张牌组成。
  34. //平手牌:如果不止一人抓到此牌,则比较点数最大者,
  35. //如果点数最大的相同,则比较第二、第三、第四和第五大的,如果所有牌都相同,则平分彩池。
  36. return En(HIGH_CARD, ToValue(cards))
  37. }