package main import "fmt" // Suit — масть карты. type Suit int const ( Clubs Suit = iota // трефы Diamonds // бубны Hearts // червы Spades // пики ) func (s Suit) String() string { switch s { case Clubs: return "♣" case Diamonds: return "♦" case Hearts: return "♥" case Spades: return "♠" default: return "?" } } // Rank — ранг карты. Туз = 1, валет/дама/король = 11/12/13. type Rank int const ( Ace Rank = iota + 1 Two Three Four Five Six Seven Eight Nine Ten Jack Queen King ) func (r Rank) String() string { switch r { case Ace: return "A" case Jack: return "J" case Queen: return "Q" case King: return "K" default: return fmt.Sprintf("%d", int(r)) } } // Value возвращает очковую стоимость карты для подсчёта веса руки // и штрафов: туз = 1, картинки = 10, остальные — номинал. func (r Rank) Value() int { switch { case r == Ace: return 1 case r >= Jack: // J, Q, K return 10 default: return int(r) } } // Card — игральная карта. type Card struct { Suit Suit Rank Rank } func (c Card) String() string { return fmt.Sprintf("%s%s", c.Rank, c.Suit) } // Value — очковая стоимость карты (см. Rank.Value). func (c Card) Value() int { return c.Rank.Value() }