package room import ( "samba/proto" "samba/server/cacheta/poker" "samba/server/game/baseroom" ) type SeatActType int const ( SatNone SeatActType = 0 // 无法行动 SatPickPokerOrWin = 1 // 摸牌或胡牌 SatOutPoker = 2 // 出牌 ) func (s SeatActType) String() string { switch s { case SatNone: return "无法行动" case SatPickPokerOrWin: return "摸牌" case SatOutPoker: return "出牌" default: return "未定义" } } //type CachetaHandPoker struct { // Groups []*poker.GroupPokers // 整理后的手牌 //} //func (h *CachetaHandPoker) Exist(pk *poker.Poker) bool { // for _, g := range h.Groups { // for _, p := range g.Pokers { // if p.ToInt() == pk.ToInt() { // return true // } // } // } // return false //} // //func (h *CachetaHandPoker) Add(pk *poker.Poker) bool { // group := h.Groups[len(h.Groups)-1] // if group.GroupType != poker.GtUnknown { // group = &poker.GroupPokers{GroupType: poker.GtUnknown} // h.Groups = append(h.Groups, group) // } // group.Pokers = append(group.Pokers, pk) // return false //} // //func (h *CachetaHandPoker) Remove(pk *poker.Poker) bool { // for i := len(h.Groups) - 1; i >= 0; i-- { // for j, p := range h.Groups[i].Pokers { // if p.ToInt() == pk.ToInt() { // h.Groups[i].Pokers = append(h.Groups[i].Pokers[:j], h.Groups[i].Pokers[j+1:]...) // if h.Groups[i].GroupType != poker.GtUnknown { // h.Groups[i].GroupType = poker.GtUnknown // } // return true // } // } // } // return false //} type GameSeat struct { *baseroom.BaseSeat pokers []*poker.Poker // 手牌 handPoker proto.CachetaHandPoker Point int // 分数 ActType SeatActType TingHu bool // 听牌状态 CutLineNum int // 可使用的插队次数 } func (s *GameSeat) HandPoker() proto.CachetaHandPoker { return s.handPoker } func (s *GameSeat) HandPokerString() string { str := "" for _, g := range s.handPoker.Groups { var pks []*poker.Poker for _, p := range g.Pokers { pks = append(pks, poker.NewPoker(p)) } str += poker.PokersToString(pks) + " " } var pks []*poker.Poker for _, p := range s.handPoker.Pokers { pks = append(pks, poker.NewPoker(p)) } str += poker.PokersToString(pks) + " " return str } func (s *GameSeat) Remove(pkInt int) (bool, *poker.Poker) { var pk *poker.Poker exist := false for i, p := range s.pokers { if p.ToInt() == pkInt { pk = p s.pokers = append(s.pokers[:i], s.pokers[i+1:]...) exist = true break } } if !exist { return false, pk } for i, p := range s.handPoker.Pokers { if p == pkInt { s.handPoker.Pokers = append(s.handPoker.Pokers[:i], s.handPoker.Pokers[i+1:]...) return true, pk } } for _, g := range s.handPoker.Groups { for i, p := range g.Pokers { if p == pkInt { g.Pokers = append(g.Pokers[:i], g.Pokers[i+1:]...) return true, pk } } } return true, pk } // 每小局开始重置听牌,插队次数,acttype func (s *GameSeat) ReInit() { s.TingHu = false s.CutLineNum = 1 s.ActType = SatNone s.pokers = s.pokers[:0] s.handPoker.Pokers = s.handPoker.Pokers[:0] s.handPoker.Groups = s.handPoker.Groups[:0] }