samba/stub/room.go

129 lines
3.7 KiB
Go
Raw Normal View History

2025-06-04 09:51:39 +08:00
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
}