samba/server/cacheta/room/cathetaSeat.go

141 lines
3.1 KiB
Go
Raw Permalink Normal View History

2025-06-04 09:51:39 +08:00
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]
}