Files
cards/src/entity/hand.go
Bel LaPointe a26c1a0043 impl cards
2021-03-30 20:29:49 -05:00

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
}