Size: 3140 bytes.


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// cs/games/cards.hh
#ifndef CS_GAMES_CARDS_HH
#define CS_GAMES_CARDS_HH

#include <string>

#include "cs/util/fmt.hh"

namespace cs::games {
struct Card {
  char rank;
  char suite;

  std::string ToString(const Card& card);
};

static Card CARDS[] = {
    // clang-format off
  // Spades:
  Card{.rank = 'A', .suite = 'S'},
  Card{.rank = '2', .suite = 'S'},
  Card{.rank = '3', .suite = 'S'},
  Card{.rank = '4', .suite = 'S'},
  Card{.rank = '5', .suite = 'S'},
  Card{.rank = '6', .suite = 'S'},
  Card{.rank = '7', .suite = 'S'},
  Card{.rank = '8', .suite = 'S'},
  Card{.rank = '9', .suite = 'S'},
  Card{.rank = 'T', .suite = 'S'},
  Card{.rank = 'J', .suite = 'S'},
  Card{.rank = 'Q', .suite = 'S'},
  Card{.rank = 'K', .suite = 'S'},

  // Hearts:
  Card{.rank = 'A', .suite = 'H'},
  Card{.rank = '2', .suite = 'H'},
  Card{.rank = '3', .suite = 'H'},
  Card{.rank = '4', .suite = 'H'},
  Card{.rank = '5', .suite = 'H'},
  Card{.rank = '6', .suite = 'H'},
  Card{.rank = '7', .suite = 'H'},
  Card{.rank = '8', .suite = 'H'},
  Card{.rank = '9', .suite = 'H'},
  Card{.rank = 'T', .suite = 'H'},
  Card{.rank = 'J', .suite = 'H'},
  Card{.rank = 'Q', .suite = 'H'},
  Card{.rank = 'K', .suite = 'H'},

  // Clubs:
  Card{.rank = 'A', .suite = 'C'},
  Card{.rank = '2', .suite = 'C'},
  Card{.rank = '3', .suite = 'C'},
  Card{.rank = '4', .suite = 'C'},
  Card{.rank = '5', .suite = 'C'},
  Card{.rank = '6', .suite = 'C'},
  Card{.rank = '7', .suite = 'C'},
  Card{.rank = '8', .suite = 'C'},
  Card{.rank = '9', .suite = 'C'},
  Card{.rank = 'T', .suite = 'C'},
  Card{.rank = 'J', .suite = 'C'},
  Card{.rank = 'Q', .suite = 'C'},
  Card{.rank = 'K', .suite = 'C'},

  // Diamonds:
  Card{.rank = 'A', .suite = 'D'},
  Card{.rank = '2', .suite = 'D'},
  Card{.rank = '3', .suite = 'D'},
  Card{.rank = '4', .suite = 'D'},
  Card{.rank = '5', .suite = 'D'},
  Card{.rank = '6', .suite = 'D'},
  Card{.rank = '7', .suite = 'D'},
  Card{.rank = '8', .suite = 'D'},
  Card{.rank = '9', .suite = 'D'},
  Card{.rank = 'T', .suite = 'D'},
  Card{.rank = 'J', .suite = 'D'},
  Card{.rank = 'Q', .suite = 'D'},
  Card{.rank = 'K', .suite = 'D'}
    // clang-format on
};

std::string Card::ToString(const Card& card) {
  std::string rank = "invalid";
  std::string suite = "invalid";

  // clang-format off
  // Ranks:
  switch (card.rank) {
    case 'A': rank = "Ace"; break;
    case '2': rank = "Two"; break;
    case '3': rank = "Three"; break;
    case '4': rank = "Four"; break;
    case '5': rank = "Five"; break;
    case '6': rank = "Six"; break;
    case '7': rank = "Seven"; break;
    case '8': rank = "Eight"; break;
    case '9': rank = "Nine"; break;
    case 'T': rank = "Ten"; break;
    case 'J': rank = "Jack"; break;
    case 'Q': rank = "Queen"; break;
    case 'K': rank = "King"; break;
  }

  // Suites:
  switch (card.suite) {
    case 'S': suite = "Spades"; break;
    case 'H': suite = "Hearts"; break;
    case 'C': suite = "Clubs"; break;
    case 'D': suite = "Diamonds"; break;
  }
  // clang-format on
  return FMT("%s of %s", rank, suite);
}

}  // namespace cs::games

#endif  // CS_GAMES_CARDS_HH
v0 (commit) © 2025 @p13i.io | Load balancer proxied to: cs-code-viewer-3:8080 in 4ms.