141 lines
3.1 KiB
Go
141 lines
3.1 KiB
Go
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]
|
||
}
|