teen.go 3.8 KB

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