tostring.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package algorithm
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func (c *Cards) Bytes() []byte {
  7. b := make([]byte, len(*c))
  8. copy(b, *c)
  9. return b
  10. }
  11. func (c *Cards) Len() int {
  12. return len(*c)
  13. }
  14. func (c *Cards) Take() byte {
  15. card := (*c)[0]
  16. (*c) = (*c)[1:]
  17. return card
  18. }
  19. func (c *Cards) Append(cards ...byte) Cards {
  20. cs := make([]byte, 0, len(cards)+len(*c))
  21. cs = append(cs, (*c)...)
  22. cs = append(cs, cards...)
  23. return cs
  24. }
  25. func (c *Cards) Equal(cards []byte) bool {
  26. if len(*c) != len(cards) {
  27. return false
  28. }
  29. for k, v := range *c {
  30. if cards[k] != v {
  31. return false
  32. }
  33. }
  34. return true
  35. }
  36. func Color(color byte) (char string) {
  37. switch color {
  38. case 0:
  39. char = "♦"
  40. case 1:
  41. char = "♣"
  42. case 2:
  43. char = "♥"
  44. case 3:
  45. char = "♠"
  46. }
  47. return
  48. }
  49. func String2Num(c byte) (n byte) {
  50. switch c {
  51. case '2':
  52. n = 2
  53. case '3':
  54. n = 3
  55. case '4':
  56. n = 4
  57. case '5':
  58. n = 5
  59. case '6':
  60. n = 6
  61. case '7':
  62. n = 7
  63. case '8':
  64. n = 8
  65. case '9':
  66. n = 9
  67. case 'T':
  68. n = 0xA
  69. case 'J':
  70. n = 0xB
  71. case 'Q':
  72. n = 0xC
  73. case 'K':
  74. n = 0xD
  75. case 'A':
  76. n = 0xE
  77. }
  78. return
  79. }
  80. func Num2String(n byte) (c byte) {
  81. switch n {
  82. case 2:
  83. c = '2'
  84. case 3:
  85. c = '3'
  86. case 4:
  87. c = '4'
  88. case 5:
  89. c = '5'
  90. case 6:
  91. c = '6'
  92. case 7:
  93. c = '7'
  94. case 8:
  95. c = '8'
  96. case 9:
  97. c = '9'
  98. case 0xA:
  99. c = 'T'
  100. case 0xB:
  101. c = 'J'
  102. case 0xC:
  103. c = 'Q'
  104. case 0xD:
  105. c = 'K'
  106. case 0xE:
  107. c = 'A'
  108. }
  109. return
  110. }
  111. func (c *Cards) SetByString(str string) {
  112. array := strings.Split(str, " ")
  113. *c = make([]byte, len(array))
  114. for k, v := range array {
  115. (*c)[k] = String2Num(byte(v[0]))
  116. }
  117. }
  118. func (c *Cards) String() (str string) {
  119. for k, v := range *c {
  120. color := Color(v)
  121. value := Num2String(v)
  122. str += string(color) + string(value)
  123. if k < len(*c)-1 {
  124. str += " "
  125. }
  126. }
  127. return
  128. }
  129. func (c *Cards) Hex() string {
  130. return fmt.Sprintf("%#v", *c)
  131. }