123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- 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)
- }
|