package thirteen import ( "fmt" "math/rand" "strings" ) //牌序- A, K, Q, J,10, 9, 8, 7, 6, 5, 4, 3, 2 //黑桃-51,50,49,48,47,46,45,44,43,42,41,40,39 //红桃-38,37,36,35,34,33,32,31,30,29,28,27,26 //梅花-25,24,23,22,21,20,19,18,17,16,15,14,13 //方片-12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 const ( PokersTypeZero = 0 PokersTypeFive = 1 //五同 PokersTypeStraightFlush = 2 //同花顺 PokersTypeFour = 3 //铁支 PokersTypeFullHouse = 4 //葫芦 PokersTypeFlush = 5 //同花 PokersTypeStraight = 6 //顺子 PokersTypeThree = 7 //三条 PokersTypeTwoPairs = 8 //两对 PokersTypePair = 9 //对子 PokersTypeOne = 10 //乌龙 PokersTypeMax = 11 ) var PokersTypeName = map[int]string{ PokersTypeZero: "-", PokersTypeFive: "五同", PokersTypeStraightFlush: "同花顺", PokersTypeFour: "铁支", PokersTypeFullHouse: "葫芦", PokersTypeFlush: "同花", PokersTypeStraight: "顺子", PokersTypeThree: "三条", PokersTypeTwoPairs: "两对", PokersTypePair: "对子", PokersTypeOne: "乌龙", } // ToPoint 获取牌点数 func ToPoint(c int) int { if c > 53 || c < 0 { return -1 } if c == 52 { return 14 } if c == 53 { return 15 } r := c % 13 if r < 12 { return r + 2 } if r == 12 { return 1 } return r } // ToLogic 获取逻辑点数 func ToLogic(c int) int { if c > 53 || c < 0 { return -1 } if c == 52 { return 13 } if c == 53 { return 14 } return c % 13 } // ToColor 获取花色 func ToColor(c int) int { if c > 51 || c < 0 { return -1 } return c / 13 } func PokerName(n int) string { var AIRecordMap = map[int]string{ 0: "2", 1: "3", 2: "4", 3: "5", 4: "6", 5: "7", 6: "8", 7: "9", 8: "T", 9: "J", 10: "Q", 11: "K", 12: "A", 52: "w", // 小王 53: "W", // 大王 } if n == -1 { return "-1" } color := "" switch n / 13 { case 0: color = "♦" case 1: color = "♣" case 2: color = "♥" case 3: color = "♠" } if n > 51 { return fmt.Sprint(AIRecordMap[n]) } return fmt.Sprint(color, AIRecordMap[n%13]) } func PokersShow(cards []int) string { buf := strings.Builder{} for _, v := range cards { buf.WriteString(PokerName(v)) buf.WriteString(",") } return buf.String() } // Pokers 牌堆 type Pokers struct { N int // 几副牌 HasKing bool // 有没有大小王 AllCards []int } func NewPokers(n int, hasKing bool) *Pokers { p := &Pokers{ N: n, HasKing: hasKing, } count := n * 52 if hasKing { count += n * 2 } p.AllCards = make([]int, 0, count) p.Init() return p } // Init 初始化牌 func (this *Pokers) Init() { this.AllCards = this.AllCards[:0] num := 52 // 一副牌几张牌 if this.HasKing { num += 2 } for k := 0; k < this.N; k++ { for i := 0; i < num; i++ { this.AllCards = append(this.AllCards, i) } } rand.Shuffle(len(this.AllCards), func(i, j int) { this.AllCards[i], this.AllCards[j] = this.AllCards[j], this.AllCards[i] }) } // Get13Crads 单人获取13张牌 func (this *Pokers) Get13Crads() (cards [13]int) { if len(this.AllCards) < 13 { this.Init() } for i := 0; i < 13; i++ { cards[i] = this.Next() } return } // Next 获取单张牌 func (this *Pokers) Next() int { if len(this.AllCards) == 0 { this.Init() } c := this.AllCards[len(this.AllCards)-1] this.AllCards = this.AllCards[:len(this.AllCards)-1] return c }