teen.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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) {
  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. })
  84. }
  85. func convertToMsgRoomList(rooms []TeenPattiRoom) *msg.TeenPattiRoomList {
  86. msgRooms := make([]*msg.TeenPattiRoom, len(rooms))
  87. for i, room := range rooms {
  88. msgRooms[i] = &msg.TeenPattiRoom{
  89. Boot: room.Boot,
  90. MinBuyin: room.MinBuyin,
  91. ChaalLimmit: room.ChaalLimmit,
  92. PotLimit: room.PotLimit,
  93. TotalPlayers: room.TotalPlayers,
  94. RoomLevel: room.RoomLevel,
  95. RoomId: room.RoomId,
  96. Type: room.Type,
  97. }
  98. }
  99. return &msg.TeenPattiRoomList{
  100. TeenPattiRoom: msgRooms,
  101. }
  102. }
  103. /* 完整的52张牌映射:
  104. 黑桃(0):
  105. i=0: ♠A (Color=0, Point=1)
  106. i=1: ♠2 (Color=0, Point=2)
  107. i=2: ♠3 (Color=0, Point=3)
  108. ...
  109. i=10: ♠J (Color=0, Point=11)
  110. i=11: ♠Q (Color=0, Point=12)
  111. i=12: ♠K (Color=0, Point=13)
  112. 红桃(1):
  113. i=13: ♥A (Color=1, Point=1)
  114. i=14: ♥2 (Color=1, Point=2)
  115. i=15: ♥3 (Color=1, Point=3)
  116. ...
  117. i=23: ♥J (Color=1, Point=11)
  118. i=24: ♥Q (Color=1, Point=12)
  119. i=25: ♥K (Color=1, Point=13)
  120. 梅花(2):
  121. i=26: ♣A (Color=2, Point=1)
  122. i=27: ♣2 (Color=2, Point=2)
  123. i=28: ♣3 (Color=2, Point=3)
  124. ...
  125. i=36: ♣J (Color=2, Point=11)
  126. i=37: ♣Q (Color=2, Point=12)
  127. i=38: ♣K (Color=2, Point=13)
  128. 方块(3):
  129. i=39: ♦A (Color=3, Point=1)
  130. i=40: ♦2 (Color=3, Point=2)
  131. i=41: ♦3 (Color=3, Point=3)
  132. ...
  133. i=49: ♦J (Color=3, Point=11)
  134. i=50: ♦Q (Color=3, Point=12)
  135. i=51: ♦K (Color=3, Point=13)
  136. */
  137. // 初始化房间的卡牌
  138. func initCardDeck(c_room *room.Room) {
  139. // 按照花色和点数初始化卡牌, 52张, 4种花色, 13种点数
  140. c_room.CardDeck = make([]room.Card, 52)
  141. for i := 0; i < 52; i++ {
  142. c_room.CardDeck[i] = room.Card{
  143. Color: i / 13,
  144. Point: i%13 + 1,
  145. }
  146. }
  147. }
  148. // 洗牌
  149. func shuffleCardDeck(deck []room.Card) {
  150. rand.Shuffle(len(deck), func(i, j int) {
  151. deck[i], deck[j] = deck[j], deck[i]
  152. })
  153. }