teen.go 4.0 KB

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