Browse Source

过牌逻辑

master
tangmingyou 4 years ago
parent
commit
8bddc3ecb9
  1. 2
      internal/game/player.go
  2. 16
      internal/service/table.go

2
internal/game/player.go

@ -25,6 +25,7 @@ type Player struct {
BetMax int32 // 最高下注额 -1不限 BetMax int32 // 最高下注额 -1不限
RoundBetTimes int32 // 当前回合下注次数 RoundBetTimes int32 // 当前回合下注次数
Hand *Hand // 手牌牌型 Hand *Hand // 手牌牌型
RoundCheckRaiseOnly bool // 该回合仅过牌下注
GameTable *Table // 当前牌桌 GameTable *Table // 当前牌桌
ProtoWriter letter.ProtoWriter ProtoWriter letter.ProtoWriter
@ -48,6 +49,7 @@ func (p *Player) RoundInit() {
p.TotalBetChip = 0 p.TotalBetChip = 0
p.Cards[0] = nil p.Cards[0] = nil
p.Cards[1] = nil p.Cards[1] = nil
p.RoundCheckRaiseOnly = false
} }
// WaitBet 将状态置为:3等待下注 // WaitBet 将状态置为:3等待下注

16
internal/service/table.go

@ -215,7 +215,7 @@ func HandleReqLeaveTable(player *game.Player, msg *api.ReqLeaveTable) (proto.Mes
player.GameTable.PlayersLock.Lock() player.GameTable.PlayersLock.Lock()
defer player.GameTable.PlayersLock.Unlock() defer player.GameTable.PlayersLock.Unlock()
if player.GameTable.Stage != 1 { if !collect.In(player.GameTable.Stage, 1, 7, 9) {
return &api.ResFail{Msg: "牌局进行中不能退出"}, nil return &api.ResFail{Msg: "牌局进行中不能退出"}, nil
} }
if player.Status != 1 { if player.Status != 1 {
@ -532,13 +532,16 @@ func HandleReqBetting(player *game.Player, msg *api.ReqBetting) (proto.Message,
} }
case 5: // 过牌 case 5: // 过牌
table.LastPosBetType = 5 table.LastPosBetType = 5
// player.RoundBetTimes++ player.RoundBetTimes++
betNotice.Line2 = "过牌" betNotice.Line2 = "过牌"
default: default:
return &api.ResFail{Msg: fmt.Sprintf("未知操作#%d", msg.BetType)}, nil return &api.ResFail{Msg: fmt.Sprintf("未知操作#%d", msg.BetType)}, nil
} }
// 第一轮只有未加注时大盲注可过牌,大盲注了不算只过牌
player.RoundCheckRaiseOnly = msg.BetType == 5 && table.Stage != 2
// 通知下注结果 // 通知下注结果
if betNotice.Line1 != "" || betNotice.Line2 != "" { if betNotice.Line1 != "" || betNotice.Line2 != "" {
player.GameTable.NoticeAllPlayer(betNotice) player.GameTable.NoticeAllPlayer(betNotice)
@ -556,16 +559,21 @@ func HandleReqBetting(player *game.Player, msg *api.ReqBetting) (proto.Message,
// return &api.ResSuccess{}, nil // return &api.ResSuccess{}, nil
//} //}
if !raise { if !raise { // 判断该轮开始过牌玩家
// 当前玩家未加注, 判断是否结束本轮下注 // 当前玩家未加注, 判断是否结束本轮下注
if nextPlayer.RoundBetTimes == player.RoundBetTimes { if nextPlayer.RoundBetTimes == player.RoundBetTimes {
// 5 true -> next; !5 false -> next; !5 true -> continue
if !nextPlayer.RoundCheckRaiseOnly || table.LastPosBetType == 5 {
// 开启下一轮 // 开启下一轮
err := table.RoundOver() err := table.RoundOver()
if err != nil { if err != nil {
return &api.ResFail{Code: 500, Msg: err.Error()}, nil return &api.ResFail{Code: 500, Msg: err.Error()}, nil
} }
return &api.ResSuccess{}, nil return &api.ResSuccess{}, nil
} else {
// 下个玩家为过牌玩家,当前玩家已下注
nextPlayer.RoundBetTimes--
}
} }
} }

Loading…
Cancel
Save