package game import "math/rand" type Rank int const ( RankAce Rank = iota Rank2 Rank3 Rank4 Rank5 Rank6 Rank7 Rank8 Rank9 Rank10 RankJack RankQueen RankKing ) func (r Rank) String() string { switch r { case RankAce: return "A" case Rank2: return "2" case Rank3: return "3" case Rank4: return "4" case Rank5: return "5" case Rank6: return "6" case Rank7: return "7" case Rank8: return "8" case Rank9: return "9" case Rank10: return "10" case RankJack: return "J" case RankQueen: return "Q" case RankKing: return "K" } return "?" } type Suit int const ( SuitClubs Suit = iota SuitDiamonds SuitHearts SuitSpades ) func (s Suit) String() string { switch s { case SuitClubs: return "♣" case SuitDiamonds: return "♦" case SuitHearts: return "♥" case SuitSpades: return "♠" } return "?" } type Card struct { Rank Rank Suit Suit } func NewDeck() []Card { var deck []Card for suit := SuitClubs; suit <= SuitSpades; suit++ { for rank := RankAce; rank <= RankKing; rank++ { deck = append(deck, Card{Rank: rank, Suit: suit}) } } return deck } func Shuffle(deck []Card) []Card { result := make([]Card, len(deck)) copy(result, deck) for i := len(result) - 1; i > 0; i-- { j := rand.Intn(i + 1) result[i], result[j] = result[j], result[i] } return result } var faceCards = map[Rank]bool{ RankJack: true, RankQueen: true, RankKing: true, } func IsFaceCard(r Rank) bool { return faceCards[r] }