github.com/jefffederman/gophe@v0.0.0-20221203163656-b38beff92772/cards.go (about)

     1  package gophe
     2  
     3  var rankMap = map[byte]uint8{
     4  	'2': 0,
     5  	'3': 1,
     6  	'4': 2,
     7  	'5': 3,
     8  	'6': 4,
     9  	'7': 5,
    10  	'8': 6,
    11  	'9': 7,
    12  	'T': 8,
    13  	'J': 9,
    14  	'Q': 10,
    15  	'K': 11,
    16  	'A': 12,
    17  }
    18  var suitMap = map[byte]uint8{
    19  	'C': 0,
    20  	'c': 0,
    21  	'D': 1,
    22  	'd': 1,
    23  	'H': 2,
    24  	'h': 2,
    25  	'S': 3,
    26  	's': 3,
    27  }
    28  
    29  var rankReverseArray = [13]byte{
    30  	'2', '3', '4', '5', '6', '7', '8',
    31  	'9', 'T', 'J', 'Q', 'K', 'A',
    32  }
    33  
    34  var suitReverseArray = [4]byte{'c', 'd', 'h', 's'}
    35  
    36  type Card uint8
    37  
    38  func NewCardFromId(id uint8) Card {
    39  	return Card(id)
    40  }
    41  
    42  func NewCard(name string) Card {
    43  	return NewCardFromId((rankMap[name[0]] << 2) + suitMap[name[1]])
    44  }
    45  
    46  func (c Card) Rank() byte {
    47  	return rankReverseArray[c>>2]
    48  }
    49  
    50  func (c Card) Suit() byte {
    51  	return suitReverseArray[c&3]
    52  }
    53  
    54  func (c Card) ToString() string {
    55  	return string([]byte{c.Rank(), c.Suit()})
    56  }
    57  
    58  func (c Card) ID() uint8 {
    59  	return uint8(c)
    60  }