game_sync/tools/test/main.go

392 lines
9.9 KiB
Go

package main
import (
"fmt"
"math/rand"
"mongo.games.com/game/gamerule/ninelineking"
"time"
)
func main() {
println(time.Now().UnixNano())
println(fmt.Sprintf("%v", float64(1002340)))
rand.Seed(time.Now().UnixNano())
min := 1000
max := 0
total := 0
times := 100
fmt.Println("---没干扰的情况下的击中次数")
for n := 0; n < times; n++ {
cnt := 0
for i := 0; i < 1000; i++ {
cnt++
if rand.Intn(100) == 1 {
total += cnt
if cnt < min {
min = cnt
}
if cnt > max {
max = cnt
}
fmt.Println("第", n+1, "次1%的概率,击中时的次数:", cnt)
break
}
}
}
fmt.Println("1%的概率,平均击杀次数", total/times, "最小", min, "最大", max)
fmt.Println("=========================")
fmt.Println("+++有干扰的情况下的击中次数")
total = 0
min = 1000
max = 0
for n := 0; n < times; n++ {
for m := 0; m < rand.Intn(1000); m++ {
rand.Float64()
}
cnt := 0
for i := 0; i < 1000; i++ {
cnt++
if rand.Intn(100) == 1 {
total += cnt
if cnt < min {
min = cnt
}
if cnt > max {
max = cnt
}
fmt.Println("第", n+1, "次1%的概率,击中时的次数:", cnt)
break
}
}
}
fmt.Println("1%的概率,平均击杀次数", total/times, "最小", min, "最大", max)
if false {
var lhPoker [52]int32
for i := 0; i < 52; i++ {
lhPoker[i] = int32(i)
}
lhDesc := []string{"0", "-", "1"}
lhWeight := []int32{47059, 5882, 47059}
RandSliceIndexByWight := func(s1 []int32) int {
total := int32(0)
for _, v := range s1 {
total += v
}
if total <= 0 {
return 0
}
random := rand.Int31n(total)
total = 0
for i, v := range s1 {
total += v
if random < total {
return i
}
}
return 0
}
_ = lhWeight
_ = RandSliceIndexByWight
var lhtotal [3]int
var lhTrend [100]int
for i := 0; i < 10000; i++ {
//fmt.Printf("---开始第[%d]局模拟---\r\n", i+1)
for j := 0; j < 100; j++ {
lhRand := rand.Perm(52)
//lhTrend[j] = RandSliceIndexByWight(lhWeight)
//fmt.Print(lhDesc[lhTrend[j]], " ")
lPoker := lhPoker[lhRand[0]]%13 + 1
hPoker := lhPoker[lhRand[1]]%13 + 1
if lPoker == hPoker {
lhTrend[j] = 1
} else if lPoker > hPoker {
lhTrend[j] = 0
} else {
lhTrend[j] = 2
}
lhtotal[lhTrend[j]]++
}
//fmt.Print("\r\n")
}
fmt.Println(lhtotal)
sum := 0
for i := 0; i < 3; i++ {
sum += lhtotal[i]
}
for i := 0; i < 3; i++ {
fmt.Print(lhDesc[i], ":", float64(lhtotal[i])/float64(sum), "% ")
}
fmt.Println()
}
//百牛路单模拟测试
if false {
var rd [4]*rand.Rand
for i := 0; i < 4; i++ {
rd[i] = rand.New(rand.NewSource(rand.Int63()))
}
var flagstr = []string{"输", "赢"}
for i := 0; i < 100; i++ {
fmt.Println("===第", i+1, "组路单")
var ld [4][20]int
for j := 0; j < 20; j++ {
for k := 0; k < 4; k++ {
ld[k][j] = rand.Intn(2) //rd[k].Intn(2)
}
}
var total int
var sum [4]int
for k := 0; k < 4; k++ {
var flag int
var maxlong int
var long int
v := ld[k][0]
for j := 0; j < 20; j++ {
sum[k] += ld[k][j]
if v == ld[k][j] {
long++
if long > maxlong {
maxlong = long
flag = v
}
} else {
v = ld[k][j]
long = 1
}
}
total += sum[k]
fmt.Println(ld[k], "胜率:", sum[k]*5, "%,", "长龙:", maxlong, "连", flagstr[flag])
}
var alllost int
var allwin int
for j := 0; j < 20; j++ {
flag := ld[0][j]
allsame := true
for k := 1; k < 4; k++ {
if ld[k][j] != flag {
allsame = false
break
}
}
if allsame {
if flag == 0 {
alllost++
} else {
allwin++
}
}
}
fmt.Println("===20局总胜率", total*100/80, "%,", "通杀次数:", alllost, ",通赔次数", allwin)
}
}
//九线拉王模拟测试
if false {
type NineLintItem struct {
cards [ninelineking.NINELINEKINF_CARD_NUM]int32
allscore int32
allline int32
freeTimes int32
jackaptRatio float64
}
var freepool [180][]*NineLintItem
var pool [20000][]*NineLintItem
start := time.Now()
for i := 0; i < 1000000; i++ {
var cards [ninelineking.NINELINEKINF_CARD_NUM]int32
for i := 0; i < ninelineking.NINELINEKINF_CARD_NUM; i++ {
cards[i] = rand.Int31n(ninelineking.KindOfCard_KingMax)
}
allscore, allline, freeTimes, jackaptRatio, _, _ := ninelineking.CalcuNineLineKingScore(cards[:], 9)
pool[allscore] = append(pool[allscore], &NineLintItem{
cards: cards,
allscore: allscore,
allline: allline,
freeTimes: freeTimes,
jackaptRatio: jackaptRatio,
})
if freeTimes > 0 {
freepool[freeTimes] = append(freepool[freeTimes], &NineLintItem{
cards: cards,
allscore: allscore,
allline: allline,
freeTimes: freeTimes,
jackaptRatio: jackaptRatio,
})
}
}
fmt.Println("NineLine take:", time.Now().Sub(start))
//for k, v := range pool {
// if len(v) > 0 {
// fmt.Println("allscore:", k, "count:", len(v))
// }
//}
fmt.Println("freetimes :", len(freepool))
sumline := int32(0)
for k, v := range freepool {
if len(v) > 0 {
fmt.Println("freetimes:", k)
for i := 0; i < len(v); i++ {
fmt.Println("freetime:", v[i].freeTimes, "score:", v[i].allscore, "lines:", v[i].allline)
sumline += v[i].allline
}
}
}
fmt.Println("total line:", sumline)
}
// start := time.Now()
// var t *time.Timer
// t = time.AfterFunc(randomDuration(), func() {
// fmt.Println(time.Now().Sub(start))
// t.Reset(randomDuration())
// })
// time.Sleep(5 * time.Second)
// for i := 0; i < 100; i++ {
// fmt.Println(rand.Int31n(4))
// }
// m := make(map[int][]int)
// fmt.Println(len(m[1]))
// var mm []int32
// fmt.Println(len(mm))
// Comb(100, 5)
// for dayIdx := 0; dayIdx <= 6; dayIdx++ {
// tNow := time.Now()
// tStart := tNow.AddDate(0, 0, int(-dayIdx))
// tStart = time.Date(tStart.Year(), tStart.Month(), tStart.Day(), 0, 0, 0, 0, tStart.Location())
// tEnd := tStart.AddDate(0, 0, 1)
// fmt.Println(tStart, "-", tEnd)
// }
// type TestCase struct {
// hands [5]int32
// kind int32
// ok *bullfight.CardsInfoO
// }
// p := bullfight.NewPoker()
// for i := 0; i < 100; i++ {
// p.Reset()
// var players [5]TestCase
// for j := 0; j < 5; j++ {
// players[j].kind = rand.Int31n(bullfight.KindOfCard_Max - 3)
// for m := 0; m < 4; m++ {
// players[j].hands[m] = int32(p.Next())
// }
// old := int32(p.Next())
// players[j].hands[4] = old
// players[j].ok = bullfight.KindOfCardFigureUpSington.FigureUpByCard(players[j].hands[:])
// if !(players[j].ok != nil && players[j].ok.GetKind() >= players[j].kind) {
// restCnt := p.Count()
// for k := 0; k < restCnt; k++ {
// players[j].hands[4] = int32(p.TryNextN(k))
// ok := bullfight.KindOfCardFigureUpSington.FigureUpByCard(players[j].hands[:])
// if ok != nil && ok.GetKind() >= players[j].kind {
// players[j].ok = ok
// p.ChangeNextN(k, bullfight.Card(old))
// break
// }
// if ok != nil && ok.GetKind() > players[j].ok.GetKind() {
// players[j].ok = ok
// }
// }
// }
// if players[j].ok != nil && players[j].ok.GetKind() >= players[j].kind {
// //fmt.Println("[ok]", i, j, players[j].hands, players[j].kind, players[j].ok)
// } else {
// fmt.Println("[ng]", i, j, players[j].hands, players[j].kind, players[j].ok)
// }
// }
// }
// dbConfig := mongo.DbConfig{
// Host: "127.0.0.1",
// Database: "jxjy_game",
// User: "mongouser",
// Password: "888",
// }
// dbConfig := mongo.DbConfig{
// Host: "192.168.1.50",
// Database: "superstar_game",
// User: "",
// Password: "",
// }
//mongo.Config.Dbs["user"] = dbConfig
//mongo.Config.Init()
//type PlayerData struct {
// Id bson.ObjectId `bson:"_id"`
// SnId int32 //数字唯一id
// Params []string //外部参数
// PlatformNickName string //平台昵称(base64,规避特殊字符)
// PlatformHead string //平台头像
// PlatformSex int //平台性别
//}
//playerrec := mongo.DatabaseC("user", "user_playerinfo")
//if playerrec != nil {
// var recs []model.PlayerData
// err := playerrec.Find(nil).All(&recs)
// if err == nil {
// fmt.Println(len(recs))
// for i := 0; i < len(recs); i++ {
// if recs[i].Params != nil && len(recs[i].Params) > 0 && recs[i].PlatformNickName == "" {
// if len(recs[i].Params) > 2 {
// recs[i].PlatformSex, _ = strconv.Atoi(recs[i].Params[2])
// }
// recs[i].PlatformNickName = base64.StdEncoding.EncodeToString([]byte(recs[i].Params[0]))
// if len(recs[i].Params) > 1 {
// recs[i].PlatformHead = recs[i].Params[1]
// }
// //err := playerrec.Update(bson.M{"snid": recs[i].SnId}, bson.D{{"$set", bson.D{{"platformnickname", name}, {"platformhead", head}, {"platformsex", sex}}}})
// err := playerrec.Update(bson.M{"_id": recs[i].Id}, &recs[i])
// //, bson.D{{"$set", bson.D{{"logintimes", acc.LoginTimes}, {"lastlogouttime", acc.LastLogoutTime}}}}
// if err != nil {
// fmt.Println(recs[i].SnId, "update failed", err)
// } else {
// fmt.Println(recs[i].SnId, "update success")
// }
// }
// }
// }
//}
sInt := []int32{1, 1, 2, 4, 5, 1, 7, 8, 1}
for i := 0; i < len(sInt); i++ {
if sInt[i] == 1 {
sInt = append(sInt[:i], sInt[i+1:]...)
i--
}
}
fmt.Println(sInt)
}
func randomDuration() time.Duration {
return time.Duration(rand.Int63n(1e9))
}
func Comb(m, n int) [][]int {
comb := make([]int, m, m)
var all [][]int
comb[0] = n
var combination func(m, n int)
combination = func(m, n int) {
for i := m; i >= n; i-- {
comb[n] = i
if n > 1 {
combination(i-1, n-1)
} else {
var t []int
for j := comb[0]; j > 0; j-- {
t = append(t, comb[j])
}
all = append(all, t)
}
}
}
combination(m, comb[0])
fmt.Println(all)
return all
}