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 }