samba/server/cacheta/room/cathetaSeat.go
2025-06-04 09:51:39 +08:00

141 lines
3.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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]
}