teen.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package teen
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "math/rand"
  7. "os"
  8. "server/game/room"
  9. "server/msg"
  10. "server/user"
  11. "github.com/name5566/leaf/gate"
  12. )
  13. type TeenPattiRoom struct {
  14. Boot string `json:"boot"`
  15. MinBuyin string `json:"minBuyin"`
  16. ChaalLimmit string `json:"chaalLimmit"`
  17. PotLimit string `json:"potLimit"`
  18. TotalPlayers string `json:"totalPlayers"`
  19. RoomLevel string `json:"roomLevel"`
  20. RoomId string `json:"roomId"`
  21. Type string `json:"type"`
  22. }
  23. var GameConfig struct {
  24. GameId string `json:"game_id"`
  25. Name string `json:"name"`
  26. Status int `json:"status"`
  27. RoomList []TeenPattiRoom `json:"room_list"`
  28. ThinkTime int `json:"think_time"`
  29. }
  30. // var Teen_Patti_Room = &room.Room{
  31. // Id: "teen_patti",
  32. // Players: make([]*player.Player, 0),
  33. // Status: 1,
  34. // }
  35. func InitGame() {
  36. }
  37. func init() {
  38. data, err := os.ReadFile("../../bin/gamedata/teen_patti_conf.json")
  39. if err != nil {
  40. log.Fatal("%v", err)
  41. }
  42. err = json.Unmarshal(data, &GameConfig)
  43. if err != nil {
  44. log.Fatal("%v", err)
  45. }
  46. go handleEvents()
  47. }
  48. func createRoom(userId string, roomId string, agent gate.Agent) {
  49. //随即创建 1-3 个人机陪这个userId
  50. userData := agent.UserData().(*user.UserData)
  51. random := rand.Intn(3) + 1
  52. //先移除掉除自己之外的机器人
  53. userData.Teen_Patti_Room.RemoveAllRobot()
  54. sitPos := randomSitPos(userData.Teen_Patti_Room, random)
  55. for i := 0; i < random; i++ {
  56. userData.Teen_Patti_Room.Players = append(userData.Teen_Patti_Room.Players, &room.Player{
  57. Id: fmt.Sprintf("%d", i),
  58. Agent: nil,
  59. IsRobot: true,
  60. UserData: createRobotUserData(),
  61. SitPos: sitPos[i],
  62. })
  63. }
  64. randomDealer(userData.Teen_Patti_Room)
  65. }
  66. // 创建人机的UserData
  67. func createRobotUserData() *user.UserData {
  68. return &user.UserData{
  69. Id: "robot",
  70. Status: 1,
  71. Teen_Patti_Room: nil,
  72. Head_Image: randomIndianHeadImage(),
  73. Nickname: randomIndianName(),
  74. }
  75. }
  76. func startGame(userId string, roomId string, agent gate.Agent, teenPattiRoom *room.Room) {
  77. // agent := Teen_Patti_Room.GetPlayer(userId).Agent
  78. createRoom(userId, roomId, agent)
  79. agent.WriteMsg(&msg.ReqJoinRoom{
  80. UserId: userId,
  81. RoomId: roomId,
  82. GameId: "teen_patti",
  83. RoomInfo: buildRoom(teenPattiRoom),
  84. })
  85. }
  86. /* 完整的52张牌映射:
  87. 黑桃(0):
  88. i=0: ♠A (Color=0, Point=1)
  89. i=1: ♠2 (Color=0, Point=2)
  90. i=2: ♠3 (Color=0, Point=3)
  91. ...
  92. i=10: ♠J (Color=0, Point=11)
  93. i=11: ♠Q (Color=0, Point=12)
  94. i=12: ♠K (Color=0, Point=13)
  95. 红桃(1):
  96. i=13: ♥A (Color=1, Point=1)
  97. i=14: ♥2 (Color=1, Point=2)
  98. i=15: ♥3 (Color=1, Point=3)
  99. ...
  100. i=23: ♥J (Color=1, Point=11)
  101. i=24: ♥Q (Color=1, Point=12)
  102. i=25: ♥K (Color=1, Point=13)
  103. 梅花(2):
  104. i=26: ♣A (Color=2, Point=1)
  105. i=27: ♣2 (Color=2, Point=2)
  106. i=28: ♣3 (Color=2, Point=3)
  107. ...
  108. i=36: ♣J (Color=2, Point=11)
  109. i=37: ♣Q (Color=2, Point=12)
  110. i=38: ♣K (Color=2, Point=13)
  111. 方块(3):
  112. i=39: ♦A (Color=3, Point=1)
  113. i=40: ♦2 (Color=3, Point=2)
  114. i=41: ♦3 (Color=3, Point=3)
  115. ...
  116. i=49: ♦J (Color=3, Point=11)
  117. i=50: ♦Q (Color=3, Point=12)
  118. i=51: ♦K (Color=3, Point=13)
  119. */
  120. // 初始化房间的卡牌
  121. func initCardDeck(c_room *room.Room) {
  122. // 按照花色和点数初始化卡牌, 52张, 4种花色, 13种点数
  123. c_room.CardDeck = make([]room.Card, 52)
  124. for i := 0; i < 52; i++ {
  125. c_room.CardDeck[i] = room.Card{
  126. Color: i / 13,
  127. Point: i%13 + 1,
  128. }
  129. }
  130. }
  131. // 洗牌
  132. func shuffleCardDeck(deck []room.Card) {
  133. rand.Shuffle(len(deck), func(i, j int) {
  134. deck[i], deck[j] = deck[j], deck[i]
  135. })
  136. }