59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package entity
|
|
|
|
import (
|
|
"sort"
|
|
)
|
|
|
|
type Hand struct {
|
|
Public []Card
|
|
Private []Card
|
|
ReversePublic []Card
|
|
ReversePrivate []Card
|
|
}
|
|
|
|
func (hand *Hand) Push(card Card) {
|
|
if hand.Public == nil {
|
|
hand.Public = make([]Card, 0, 1)
|
|
}
|
|
hand.Public = append(hand.Public, card)
|
|
}
|
|
|
|
func (hand Hand) Len() int {
|
|
return len(hand.Public) + len(hand.Private) + len(hand.ReversePublic) + len(hand.ReversePrivate)
|
|
}
|
|
|
|
func (hand Hand) AllCards() []Card {
|
|
allcards := make([]Card, 0, hand.Len())
|
|
for _, cards := range [][]Card{hand.Public, hand.Private, hand.ReversePublic, hand.ReversePrivate} {
|
|
allcards = append(allcards, cards...)
|
|
}
|
|
return allcards
|
|
}
|
|
|
|
func (hand Hand) Flush() bool {
|
|
suit := -1
|
|
for _, card := range hand.AllCards() {
|
|
if suit == -1 {
|
|
suit = card.Suit
|
|
} else if suit != card.Suit {
|
|
return false
|
|
}
|
|
}
|
|
return suit != -1
|
|
}
|
|
|
|
func (hand Hand) Straight() bool {
|
|
cards := hand.AllCards()
|
|
values := make([]int, 0, len(cards))
|
|
for _, card := range cards {
|
|
values = append(values, card.Value)
|
|
}
|
|
sort.Ints(values)
|
|
for i := 1; i < len(values); i++ {
|
|
if values[i-1]+1 != values[i] {
|
|
return false
|
|
}
|
|
}
|
|
return len(values) > 1
|
|
}
|