98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
package thirteen
|
|
|
|
import "time"
|
|
|
|
var (
|
|
SpecialScore = []int64{0, 108, 36, 0, 20, 0, 0, 0, 10, 0, 0, 4, 4, 3}
|
|
)
|
|
|
|
// 房间的参数
|
|
const (
|
|
ParamMaxPlayerNum = 0 // 最大人数
|
|
ParamAuto = 1 // 自动摆牌
|
|
ParamBaiPai = 2 // 摆牌时间
|
|
ParamBaseScore = 3 // 游戏底分
|
|
ParamLaiZi = 4 // 是否有癞子
|
|
)
|
|
|
|
// 场景状态
|
|
const (
|
|
ThirteenWaterSceneStateWait int = iota //等待状态
|
|
ThirteenWaterSceneStateStart //开始倒计时
|
|
ThirteenWaterSceneStateSendCards //开始发牌
|
|
ThirteenWaterSceneStateOptCard //选牌理牌
|
|
ThirteenWaterSceneStateShowCards //轮流看牌
|
|
ThirteenWaterSceneStateHit //打枪
|
|
ThirteenWaterSceneStateBilled //结算
|
|
ThirteenWaterSceneStateMax
|
|
)
|
|
|
|
// 玩家操作
|
|
const (
|
|
ThirteenWaterPlayerOpMS = 1 //确定牌
|
|
ThirteenWaterPlayerOpStandup = 2 //站起标记
|
|
ThirteenWaterPlayerOpTest = 3 // test
|
|
ThirteenWaterPlayerOpReset = 4 // 重新选牌
|
|
ThirteenWaterPlayerJoin = 5 // 加入游戏
|
|
ThirteenWaterPlayerOpSelect = 6 // 预选牌
|
|
)
|
|
const (
|
|
ThirteenWaterSceneWaitTimeout = time.Second * 2 //等待倒计时
|
|
ThirteenWaterStartTimeout = time.Second * 3 //开始倒计时
|
|
ThirteenWaterSendCardsTimeout = time.Second * 3 //开始发牌
|
|
ThirteenWaterOptCardTimeout = time.Second * 30 //30选牌换牌
|
|
ThirteenWaterShowCardsTimeout = time.Second * 1 //轮流看牌时间
|
|
ThirteenWaterHitTimeout = time.Second * 2 //打枪
|
|
ThirteenWaterBilledTimeout = time.Second * 5 //结算
|
|
)
|
|
|
|
const (
|
|
TimeoutStart = iota
|
|
TimeoutSendCards
|
|
TimeoutOp
|
|
TimeoutBill
|
|
)
|
|
|
|
func GetTimeout(param []int64, index int) time.Duration {
|
|
if index >= 0 && index < len(param) {
|
|
return time.Duration(param[index]) * time.Second
|
|
}
|
|
switch index {
|
|
case TimeoutStart:
|
|
return ThirteenWaterStartTimeout
|
|
case TimeoutSendCards:
|
|
return ThirteenWaterSendCardsTimeout
|
|
case TimeoutOp:
|
|
return ThirteenWaterOptCardTimeout
|
|
case TimeoutBill:
|
|
return ThirteenWaterBilledTimeout
|
|
}
|
|
return time.Duration(-1)
|
|
}
|
|
|
|
func GetMaxCard(allGroup map[int]*Group) *Group {
|
|
var ret *Group
|
|
max := -1000
|
|
for k, v := range allGroup {
|
|
sum := 0
|
|
if k >= 1000000 {
|
|
ret = v
|
|
break
|
|
}
|
|
a := k / 10000
|
|
b := (k - a*10000) / 100
|
|
c := k - a*10000 - b*100
|
|
s := []int{a, b, c}
|
|
for _, m := range s {
|
|
if m >= 1 && m <= 20 {
|
|
sum += 20 - m
|
|
}
|
|
}
|
|
if max <= sum {
|
|
max = sum
|
|
ret = v
|
|
}
|
|
}
|
|
return ret
|
|
}
|