go_games_collection/card.go
2026-07-04 13:51:04 +03:00

90 lines
1.4 KiB
Go

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()
}