123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- package teen
- import (
- "math/rand"
- "server/common"
- "server/game"
- "server/game/room"
- "server/msg"
- "time"
- "github.com/name5566/leaf/log"
- )
- func sendCurrentRoundInfo(teenPattiRoom *room.Room) {
- for _, player := range teenPattiRoom.Players {
- if player.Agent != nil {
- nextRoundInfo := &msg.NextRound{
- Info: &msg.ReqJoinRoom{
- UserId: player.Id,
- GameId: "teen_patti",
- RoomId: teenPattiRoom.Id,
- SitPos: player.SitPos,
- RoomInfo: buildRoom(teenPattiRoom),
- },
- }
-
- player.Agent.WriteMsg(nextRoundInfo)
- log.Debug("Sent current round info to player %v in room %v", player.Id, teenPattiRoom.Id)
- }
- }
- }
- func printPlayersInfo(teenPattiRoom *room.Room) {
-
- for i, player := range teenPattiRoom.Players {
- if player != nil {
- log.Debug("Player %d: ID=%v, SitPos=%v, IsRobot=%v, Nickname=%v",
- i, player.Id, player.SitPos, player.IsRobot)
- } else {
- log.Debug("Player %d: Empty", i)
- }
- }
- }
- func getAvailableSitPos(teenPattiRoom *room.Room) []int32 {
-
- maxSeats := int32(5)
- availableSitPos := []int32{}
-
- occupiedSeats := make(map[int32]bool)
-
- for _, player := range teenPattiRoom.Players {
- if player != nil {
- occupiedSeats[player.SitPos] = true
- }
- }
-
- for i := int32(0); i < maxSeats; i++ {
- if !occupiedSeats[i] {
- availableSitPos = append(availableSitPos, i)
- }
- }
-
- return availableSitPos
- }
- func removeOfflinePlayers(teenPattiRoom *room.Room) {
-
- for _, player := range teenPattiRoom.Players {
- if !player.IsRobot && player.Agent != nil {
- userData, ok := player.Agent.UserData().(*common.UserData)
- if !ok || userData == nil {
- continue
- }
-
- if userData.Status == 0 {
-
- LeaveTeenPattiRoom(teenPattiRoom, player.Id, "0")
- }
- }
- }
- }
- func filterNonRobotPlayers(teenPattiRoom *room.Room) []*room.Player {
- var players []*room.Player
- for _, player := range teenPattiRoom.Players {
- if !player.IsRobot {
- players = append(players, player)
- }
- }
- return players
- }
- func startNextRound(teenPattiRoom *room.Room) {
- teenPattiRoom.Status = room.RoomStatusWaiting
- var currentDealerSitPos int32 = -1
- removeOfflinePlayers(teenPattiRoom)
-
- nonRobotPlayers := filterNonRobotPlayers(teenPattiRoom)
- if len(nonRobotPlayers) == 0 {
-
- log.Debug("Room %v dissolved due to no players left.", teenPattiRoom.Id)
-
- dissolveRoom(teenPattiRoom)
- return
- }
-
- adjustRobotCount(teenPattiRoom)
-
- for _, player := range teenPattiRoom.Players {
-
- if player.IsDealer {
- currentDealerSitPos = player.SitPos
- }
- player.IsPacked = false
- player.IsSeen = false
- player.IsShow = false
- player.IsDealer = false
- player.CanShow = false
- player.HandCards = []*msg.ReqCard{}
- }
-
- teenPattiRoom.Round++
-
-
-
-
-
-
- teenPattiRoom.GameRound.Rounds = []*msg.ReqRound{}
- teenPattiRoom.GameRound.TotalBet = 0
-
- confInfo := loadTeemConf(teenPattiRoom.ConfId)
- teenPattiRoom.GameRound.ResBet = confInfo
-
- teenPattiRoom.RoundSitPos = 0
-
- setNextDealerSitPos(teenPattiRoom, currentDealerSitPos)
-
- log.Debug("Starting round %d for room %s", teenPattiRoom.Round, teenPattiRoom.Id)
-
- sendCurrentRoundInfo(teenPattiRoom)
-
-
- game.Module.Skeleton.AfterFunc(time.Second*2, func() {
- log.Debug("---------------------------------------------------------------------------------------")
- log.Debug("startDealCard(teenPattiRoom) %v in room %v")
- printPlayersInfo(teenPattiRoom)
- go startDealCard(teenPattiRoom)
- })
- }
- func adjustRobotCount(teenPattiRoom *room.Room) {
-
- random := rand.New(rand.NewSource(time.Now().UnixNano()))
-
- currentPlayerCount := len(teenPattiRoom.Players)
- newPlayerCount := currentPlayerCount
-
- if random.Intn(2) == 0 && newPlayerCount < 5 {
- newPlayerCount++
- } else if random.Intn(3) == 0 && newPlayerCount > 2 {
- newPlayerCount--
- }
-
- log.Debug("currentPlayerCount: %v", currentPlayerCount)
- log.Debug("newPlayerCount: %v", newPlayerCount)
-
- if newPlayerCount != currentPlayerCount {
- if newPlayerCount > currentPlayerCount {
-
- availableSitPos := getAvailableSitPos(teenPattiRoom)
-
- if len(availableSitPos) == 0 {
- log.Debug("No available seats for new robot in room %v", teenPattiRoom.Id)
- return
- }
-
- addNewRobot(teenPattiRoom, availableSitPos)
- log.Debug("addNewRobot: %v")
- } else {
-
- removeRandomRobot(teenPattiRoom)
- log.Debug("removeRandomRobot: %v")
- }
- }
- }
|