120 lines
2.7 KiB
Go
120 lines
2.7 KiB
Go
package thirteen
|
|
|
|
import (
|
|
rule "mongo.games.com/game/gamerule/thirteen"
|
|
"mongo.games.com/game/proto"
|
|
"mongo.games.com/game/protocol/thirteen"
|
|
"mongo.games.com/game/robot/base"
|
|
)
|
|
|
|
type ThirteenWaterPlayer struct {
|
|
base.BasePlayer
|
|
*thirteen.ThirteenPlayerData
|
|
oldCoin int64
|
|
OpDelayTimes int32 //本局延迟操作次数
|
|
allcardsO map[int]int32 //玩家所有牌型
|
|
cardsO *rule.Group //确定的牌型信息
|
|
maxcardsO int32 //最大牌的牌型
|
|
}
|
|
|
|
func NewThirteenWaterPlayer(data *thirteen.ThirteenPlayerData) *ThirteenWaterPlayer {
|
|
p := &ThirteenWaterPlayer{ThirteenPlayerData: data}
|
|
p.Init()
|
|
return p
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) Init() {
|
|
p.oldCoin = p.GetCoin()
|
|
p.Clear()
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) GetMaxCardsO() {
|
|
max := -1000
|
|
for _, v := range p.allcardsO {
|
|
sum := 0
|
|
|
|
if v >= 1000000 {
|
|
p.maxcardsO = v
|
|
break
|
|
}
|
|
a := v / 10000
|
|
b := (v - a*10000) / 100
|
|
c := v - a*10000 - b*100
|
|
s := []int32{a, b, c}
|
|
for _, k := range s {
|
|
if k > rule.PokersTypeZero && k <= rule.PokersTypeOne {
|
|
sum += rule.PokersTypeOne - int(k)
|
|
}
|
|
}
|
|
if max <= sum {
|
|
max = sum
|
|
p.maxcardsO = v
|
|
}
|
|
}
|
|
}
|
|
func (p *ThirteenWaterPlayer) Clear() {
|
|
p.UnmarkFlag(base.PlayerState_Ready)
|
|
p.UnmarkFlag(base.PlayerState_WaitNext)
|
|
p.UnmarkFlag(base.PlayerState_GameBreak)
|
|
p.OpDelayTimes = 0
|
|
p.allcardsO = make(map[int]int32)
|
|
p.cardsO = &rule.Group{Head: [3]int{-1, -1, -1}, Mid: [5]int{-1, -1, -1, -1, -1}, End: [5]int{-1, -1, -1, -1, -1}, PokerType: -1}
|
|
p.maxcardsO = -1
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) MarkFlag(flag int32) {
|
|
myFlag := p.GetFlag()
|
|
myFlag |= flag
|
|
p.Flag = proto.Int32(myFlag)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) UnmarkFlag(flag int32) {
|
|
myFlag := p.GetFlag()
|
|
myFlag &= ^flag
|
|
p.Flag = proto.Int32(myFlag)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) IsMarkFlag(flag int32) bool {
|
|
if (p.GetFlag() & flag) != 0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) IsOnLine() bool {
|
|
return p.IsMarkFlag(base.PlayerState_Online)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) IsReady() bool {
|
|
return p.IsMarkFlag(base.PlayerState_Ready)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) IsSceneOwner() bool {
|
|
return p.IsMarkFlag(base.PlayerState_SceneOwner)
|
|
}
|
|
func (this *ThirteenWaterPlayer) IsGameing() bool {
|
|
return !this.IsMarkFlag(base.PlayerState_WaitNext) && !this.IsMarkFlag(base.PlayerState_GameBreak)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) IsRobot() bool {
|
|
player := base.PlayerMgrSingleton.GetPlayer(p.GetSnId())
|
|
return player != nil
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) SetFlag(flag int32) {
|
|
p.Flag = proto.Int32(flag)
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) GetLastOp() int32 {
|
|
return 0
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) SetLastOp(op int32) {
|
|
}
|
|
|
|
func (p *ThirteenWaterPlayer) UpdateCards(cards []int32) {
|
|
if p != nil {
|
|
p.Cards = cards
|
|
}
|
|
}
|