card.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package cards
  2. import "fmt"
  3. // карта
  4. type Card struct {
  5. N Number
  6. S Suit
  7. }
  8. // проверка, корректно ли объявлена карта
  9. func (s *Card) IsValid() bool {
  10. // масть у джокера отсутствует
  11. if s.N == Joker {
  12. return true
  13. }
  14. // для остальных карт, кроме джокера, проверяем корректно объявленные порядок и масть
  15. return s.N.IsValid() && s.S.IsValid()
  16. }
  17. // полное наименование карты
  18. func (s *Card) Name() string {
  19. return fmt.Sprintf("%s %s", s.N.Name(), s.S.Name())
  20. }
  21. // краткое наименование карты
  22. func (s *Card) NameShort() string {
  23. // XX выводим, если карта объявлена некорректно
  24. if !s.IsValid() {
  25. return "XX"
  26. }
  27. // джокер. выводим только порядок
  28. if !s.S.IsValid() {
  29. return s.N.NameShort()
  30. }
  31. // для остальных карт кроме джокера выводим порядок и масть
  32. return fmt.Sprintf("%s%s", s.N.NameShort(), s.S.NameShort())
  33. }
  34. // строковое представление карты
  35. func (s *Card) String() string {
  36. return s.NameShort()
  37. }