package room import ( "github.com/name5566/leaf/gate" ) type Round struct { // 回合数 Round int // 回合座位 RoundSitPos int // 回合下注 RoundBet int // 思考时间 RoundThinkTime int // 回合结束时间 RoundEndTime int64 // 操作看牌 OpLookCard bool // 操作下注 OpBet bool // 操作弃牌 OpPack bool // 操作开牌 OpOpenCard bool } // 定一个类为每局游戏 type GameRound struct { //回合列表 Rounds []Round } // RoomStatus 房间状态 const ( RoomStatusWaiting = 0 // 等待开局 RoomStatusDealing = 1 // 发牌中 RoomStatusPlaying = 2 // 游戏进行中 ) type Room struct { Id string Players []*Player Status int // 当前轮次 Round int // 当前回合的座位 RoundSitPos int // 每局游戏 GameRound *GameRound // 牌堆 CardDeck []Card } // 定一个扑克牌,从1到52 type Card struct { // 花色 Color int // 点数 Point int } type Player struct { Id string Agent gate.Agent IsRobot bool UserData interface{} //手牌 HandCards []Card // 座位 SitPos int // 等待发牌 WaitCard bool // 是否已看牌 IsLookCard bool // 是否已弃牌 IsPacked bool // 是否开牌 IsOpenCard bool // 是否已结算 IsSettle bool // 是否已离开 IsLeave bool // 是否已准备 IsReady bool // 是否是庄家 IsDealer bool } // 获取玩家ID func (p *Player) GetUserId() string { return p.Id } func (r *Room) AddPlayer(p *Player) { r.Players = append(r.Players, p) } func (r *Room) RemovePlayer(p *Player) { for i, player := range r.Players { if player.Id == p.Id { r.Players = append(r.Players[:i], r.Players[i+1:]...) break } } } func (r *Room) RemoveAllRobot() { for i, player := range r.Players { if player.IsRobot { r.Players = append(r.Players[:i], r.Players[i+1:]...) } } } func (r *Room) GetPlayer(id string) *Player { for _, player := range r.Players { if player.Id == id { return player } } return nil } // 获取庄家的玩家 func (r *Room) GetDealerPlayer() *Player { for _, player := range r.Players { if player.IsDealer { return player } } return nil } // 设置指定玩家为庄家,并设置其他玩家为非庄家 func (r *Room) SetDealerPlayer(p *Player) { for _, player := range r.Players { player.IsDealer = false } p.IsDealer = true } // 获取WaitCard是false的所有玩家 func (r *Room) GetWaitCardPlayers() []*Player { players := make([]*Player, 0) for _, player := range r.Players { if !player.WaitCard { players = append(players, player) } } return players } // sitPos 是当前玩家的座位号,GetWaitCardPlayers 从sitPos开始 顺时针方向把所有玩家返回 // 从指定座位号开始顺时针获取所有玩家 func (room *Room) GetPlayersBySitPos(startSitPos int) []*Player { players := make([]*Player, 0) maxSitPos := 5 // 假设最大6个座位 // 先添加大于等于 startSitPos 的座位 for sitPos := startSitPos; sitPos < maxSitPos; sitPos++ { for _, player := range room.Players { if player.SitPos == sitPos && !player.IsLeave { players = append(players, player) break } } } // 再添加小于 startSitPos 的座位 for sitPos := 0; sitPos < startSitPos; sitPos++ { for _, player := range room.Players { if player.SitPos == sitPos && !player.IsLeave { players = append(players, player) break } } } return players } // 根据座位号获取玩家 func (r *Room) GetPlayerBySitPos(sitPos int) *Player { for _, player := range r.Players { if player.SitPos == sitPos { return player } } return nil } // 增加玩家操作到当前回合 func (r *Room) AddPlayerOpt(round Round) { r.GameRound.Rounds = append(r.GameRound.Rounds, round) }