samba/stub/room.go
2025-06-04 09:51:39 +08:00

129 lines
3.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package stub
import (
"fmt"
"math"
"samba/pkg/log"
"samba/proto"
)
type RobotTemper int
const (
RteUnknown RobotTemper = 0 // 未知
RteAplomb RobotTemper = 1 // 稳健
RteRadical RobotTemper = 2 // 激进
RteNormal RobotTemper = 3 // 普通
RteRotten RobotTemper = 4 // 摆烂
RteEvaluation RobotTemper = 5 // 策略型
RteHosting RobotTemper = 6 // 托管机器人
)
func (r RobotTemper) String() string {
switch r {
case RteUnknown:
return "Unknown"
case RteAplomb:
return "稳健型"
case RteRadical:
return "激进型"
case RteNormal:
return "普通型"
case RteRotten:
return "摆烂型"
case RteEvaluation:
return "概率型"
case RteHosting:
return "托管机器人"
default:
return "unknown"
}
}
type RoomMode int
const (
RmGold RoomMode = 0 // 金币场
RmClub RoomMode = 1 // 俱乐部场
)
func (r RoomMode) String() string {
switch r {
case RmGold:
return "金币场"
case RmClub:
return "俱乐部场"
default:
return ""
}
}
type Room struct {
Id int `json:"id"`
Name string `json:"name"` // 房间名字
PlayType int `json:"playtype"` // 玩法
MinPlayers int `json:"min_player_num"` // 参与游戏最大人数
MaxPlayers int `json:"max_player_num"` // 参与游戏最小人数
MinCoin int64 `json:"min_coin"` // 最小入场金币
MaxCoin int64 `json:"max_coin"` // 最大入场金币
TakeCoin int64 `json:"take_coin"` // 携带金币
Blind int64 `json:"bet"` // 场次底注
Rate int `json:"rate"` // 场次费率
Level int `json:"level"` // 房间等级
Valid int `json:"valid"` // 是否有效,1有效0-停用
Tag int `json:"tag"` // 标签
RobotNum int `json:"robotnum"` // 机器人数量上限0关闭机器人
RobotEvaluation int `json:"bot_rate"` // 概率型机器人权重
RobotAplomb int `json:"bot_steady"` // 稳健型机器人权重
RobotRadical int `json:"bot_radical"` // 激进型机器人权重
RobotNormal int `json:"bot_normal"` // 普通型机器人权重
RobotRotten int `json:"bot_low"` // 摆烂型机器人权重
ActTime int `json:"time"` // 行动倒计时 秒
Mode int `json:"mode"` // 0金币场 1:俱乐部
CathetaInitPoint int `json:"catheta_init_point"` // 初始分 5分
}
func (r *Room) RobotTempers() (rt map[RobotTemper]int, sumWeight int) {
rt = map[RobotTemper]int{}
rt[RteEvaluation] = r.RobotEvaluation
rt[RteAplomb] = r.RobotAplomb
rt[RteRadical] = r.RobotRadical
rt[RteNormal] = r.RobotNormal
rt[RteRotten] = r.RobotRotten
sumWeight = r.RobotEvaluation + r.RobotAplomb + r.RobotRadical + r.RobotNormal + r.RobotRotten
return
}
var Rooms = map[int]*Room{
10000: {
Id: 10000,
Name: "新手二人场",
PlayType: 1000,
MinPlayers: 2,
MaxPlayers: 2,
MinCoin: 20000,
MaxCoin: 100000,
TakeCoin: 40000,
Blind: 2000,
},
}
func FindRoomCnf(roomType int) (*Room, proto.ErrorCode) {
if cnf, ok := Rooms[roomType]; ok {
return cnf, proto.Ok
}
log.Error(fmt.Sprintf("roomType:%v is not exist", roomType))
return nil, proto.Internal
}
// FindMinCoinRoom 获取最小入场金币的房间
func FindMinCoinRoom() (r *Room) {
r = &Room{MinCoin: math.MaxInt64}
for _, room := range Rooms {
if room.MinCoin <= r.MinCoin && room.Valid == 1 && room.Mode == 0 {
r = room
}
}
return
}