Browse Source

过牌逻辑

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

20
internal/game/player.go

@ -16,15 +16,16 @@ type Player struct {
Username string Username string
Avatar string Avatar string
Cards [2]*Card // 手牌 Cards [2]*Card // 手牌
Chip int32 // 玩家筹码 Chip int32 // 玩家筹码
TotalBetChip int32 // 本次游戏已下注筹码 TotalBetChip int32 // 本次游戏已下注筹码
Status int32 // 状态: 1待准备开始,2已准备开始,3等待其他玩家动作,[4第一回合小盲注跟注,5待大盲注,5待小盲注,] 6待跟注,7已弃牌,8结算中 Status int32 // 状态: 1待准备开始,2已准备开始,3等待其他玩家动作,[4第一回合小盲注跟注,5待大盲注,5待小盲注,] 6待跟注,7已弃牌,8结算中
BetOpts []int32 // status=[4,6]时下注可操作按钮: 1跟注,2加注(-[0]+),3All-In,4弃牌,5过牌 BetOpts []int32 // status=[4,6]时下注可操作按钮: 1跟注,2加注(-[0]+),3All-In,4弃牌,5过牌
BetMin int32 // 最低下注额 BetMin int32 // 最低下注额
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等待下注

26
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
err := table.RoundOver() if !nextPlayer.RoundCheckRaiseOnly || table.LastPosBetType == 5 {
if err != nil { // 开启下一轮
return &api.ResFail{Code: 500, Msg: err.Error()}, nil err := table.RoundOver()
if err != nil {
return &api.ResFail{Code: 500, Msg: err.Error()}, nil
}
return &api.ResSuccess{}, nil
} else {
// 下个玩家为过牌玩家,当前玩家已下注
nextPlayer.RoundBetTimes--
} }
return &api.ResSuccess{}, nil
} }
} }

Loading…
Cancel
Save