samba/server/truco/cmd/robot_test.go

179 lines
4.2 KiB
Go
Raw Permalink Normal View History

2025-06-04 09:51:39 +08:00
package cmd
import (
"fmt"
"os"
"os/signal"
"samba/pkg/log"
"samba/proto"
. "samba/server/game/baseroom"
"samba/server/game/player"
"samba/server/truco/handler"
. "samba/server/truco/room"
. "samba/server/truco/service"
"samba/stub"
"samba/util/config"
"samba/util/model"
"syscall"
"testing"
"time"
)
func initEnv() {
config.Cmd = config.Command{
LogLevel: int(log.InfoLevel),
//ConfigPath: "D:\\work\\samba\\samba\\bin\\config\\truco_dev.xml",
ConfigPath: "./config/truco.xml",
LogPath: "./log/test",
MinRoomId: 100000,
MaxRoomId: 120000,
}
initLog(&config.Cmd)
var err = config.Load(config.Cmd.ConfigPath)
if err != nil {
log.Error(fmt.Sprintf("load config err: %v", err))
}
initRepo()
handler.InitService()
}
func releaseEnv() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
sig := <-c
handler.StopService()
log.Info(fmt.Sprintf("received %s, initiating shutdown...\n", sig))
}
func copyRobotUserInfo(ui *model.UserInfo) *model.UserInfo {
return &model.UserInfo{
UID: ui.UID,
UType: ui.UType,
API: ui.API,
SItemID: ui.SItemID,
Device: ui.Device,
MNick: ui.MNick,
Sex: ui.Sex,
HeadURL: ui.HeadURL,
IconId: ui.IconId,
MTime: ui.MTime,
Phone: ui.Phone,
Address: ui.Address,
MStatus: ui.MStatus,
UTMSource: ui.UTMSource,
AvatarFrame: ui.AvatarFrame,
TakeCoin: 0,
}
}
func TemperVsAnotherTemper(rt1, rt2 stub.RobotTemper) {
roomType := 0
var roomCnf *stub.Room
log.Info(fmt.Sprintf("stub.Rooms size:%v", len(stub.Rooms)))
for _, cnf := range stub.Rooms {
if cnf.MinPlayers == 2 {
roomCnf = cnf
roomType = cnf.Id
break
}
}
robot1 := player.RobotMgr.Pop(roomCnf)
robot2 := player.RobotMgr.Pop(roomCnf)
log.Info(fmt.Sprintf("测试robot:%v temper:%v vs another:%v temper:%v roomType:%v", robot1.UID, rt1.String(), robot2.UID, rt2.String(), roomType))
TrucoService.ProcFuncOnce(func() {
for i := 0; i < 6000; i++ {
iRm, ok := RoomMgr.CreateRoom(roomType, 0, NewTrucoRoom)
if ok != proto.Ok {
log.Error(fmt.Sprintf("err:%v", ok.Error()))
}
room := iRm.(*TrucoRoom)
// 不能共用同一个userinfo因为userinfo包含了携带金币字段会造成携带金币混乱
rob1 := &player.Player{UserInfo: copyRobotUserInfo(robot1.UserInfo), Continue: 0, Robot: nil}
rob2 := &player.Player{UserInfo: copyRobotUserInfo(robot2.UserInfo), Continue: 0, Robot: nil}
room.OnEnterRoom(rob1)
room.OnEnterRoom(rob2)
room.SetRobotTemper(0, rt1)
room.SetRobotTemper(1, rt2)
}
})
}
func AplombVsNormal() {
TemperVsAnotherTemper(stub.RteAplomb, stub.RteNormal)
}
func AplombVsRadical() {
TemperVsAnotherTemper(stub.RteAplomb, stub.RteRadical)
}
func AplombVsEvaluation() {
TemperVsAnotherTemper(stub.RteAplomb, stub.RteEvaluation)
}
func AplombVsRotten() {
TemperVsAnotherTemper(stub.RteAplomb, stub.RteRotten)
}
// ------------------------------------------------------------------
func NormalVsRadical() {
TemperVsAnotherTemper(stub.RteNormal, stub.RteRadical)
}
func NormalVsEvaluation() {
TemperVsAnotherTemper(stub.RteNormal, stub.RteEvaluation)
}
func NormalVsRotten() {
TemperVsAnotherTemper(stub.RteNormal, stub.RteRotten)
}
// ------------------------------------------------------------------
func RadicalVsEvaluation() {
TemperVsAnotherTemper(stub.RteRadical, stub.RteEvaluation)
}
func RadicalVsRotten() {
TemperVsAnotherTemper(stub.RteRadical, stub.RteRotten)
}
// ------------------------------------------------------------------
func EvaluationVsRotten() {
TemperVsAnotherTemper(stub.RteEvaluation, stub.RteRotten)
}
func TestRobotWinRate(t *testing.T) {
initEnv()
//stub.GGlobal.TrucoWinPoint = 2
//AplombVsRadical()
//time.Sleep(time.Minute * 30)
//AplombVsEvaluation()
//time.Sleep(time.Minute * 30)
//AplombVsRotten()
//time.Sleep(time.Minute * 30)
//NormalVsRadical()
//time.Sleep(time.Minute * 30)
NormalVsEvaluation()
time.Sleep(time.Minute * 30)
//NormalVsRotten()
//time.Sleep(time.Minute * 30)
//RadicalVsEvaluation()
//time.Sleep(time.Minute * 30)
//
//RadicalVsRotten()
//time.Sleep(time.Minute * 30)
//
//EvaluationVsRotten()
//time.Sleep(time.Minute * 30)
releaseEnv()
}