216 lines
3.8 KiB
Go
216 lines
3.8 KiB
Go
package fortunedragon
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strconv"
|
|
)
|
|
|
|
func GetLineEleVal(gameState int, needRate int64, eleLineAppearRate [][]int32, isLow bool) (WinResult, []int, [][]int32) {
|
|
var preInt [][]int32
|
|
for i := 0; i < 1000; i++ {
|
|
var wls WinResult
|
|
wls.CreateLine(eleLineAppearRate, false)
|
|
wls.Win()
|
|
var rate int64
|
|
var bonusNum int
|
|
var wildNum int
|
|
for _, v := range wls.WinLine {
|
|
if len(v.Lines) == 0 {
|
|
continue
|
|
}
|
|
rate += v.Rate
|
|
if v.Lines[0] == Bonus {
|
|
bonusNum += len(v.Lines)
|
|
} else if v.Lines[0] == Wild {
|
|
wildNum += len(v.Lines)
|
|
}
|
|
NowWildNum := 0
|
|
for _, l := range v.Lines {
|
|
if l != Wild && NowWildNum > 0 {
|
|
if NowWildNum < 3 {
|
|
NowWildNum = 0
|
|
}
|
|
} else if l == Wild {
|
|
NowWildNum++
|
|
}
|
|
}
|
|
if NowWildNum >= 3 {
|
|
wildNum += NowWildNum
|
|
}
|
|
}
|
|
|
|
//fmt.Printf("%v || rate %v", wls.EleValue, rate)
|
|
//fmt.Println()
|
|
var n int64 = 5
|
|
if gameState == FreeGame {
|
|
n = 50
|
|
}
|
|
if wildNum >= 3 || bonusNum >= 3 {
|
|
continue
|
|
}
|
|
if isLow {
|
|
continue
|
|
}
|
|
if rate >= needRate-n && rate <= needRate+n {
|
|
var poss []int32
|
|
for _, v := range wls.WinLine {
|
|
poss = append(poss, v.Poss...)
|
|
}
|
|
var noPoss []int
|
|
for k := range wls.EleValue {
|
|
isF := false
|
|
for _, pn := range poss {
|
|
if k == int(pn) {
|
|
isF = true
|
|
break
|
|
}
|
|
}
|
|
if !isF {
|
|
noPoss = append(noPoss, k)
|
|
}
|
|
}
|
|
//fmt.Println("...........find rate: ", rate, " 第 ", i+1, " 次.")
|
|
return wls, noPoss, nil
|
|
}
|
|
if rate != 0 && rate < 50 && len(preInt) < 10 {
|
|
preInt = append(preInt, wls.EleValue)
|
|
}
|
|
}
|
|
return WinResult{}, nil, preInt
|
|
}
|
|
func GetLinePos(lineId int) []int {
|
|
if lineId <= 9 || lineId >= 1 {
|
|
return LineWinNum[lineId-1]
|
|
}
|
|
return nil
|
|
}
|
|
func GetRate(ele int32, num int) int64 {
|
|
if data, ok := EleNumRate[ele]; ok {
|
|
if r, ok2 := data[num]; ok2 {
|
|
return r
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
func RandSliceInt32IndexByWightN(s1 []int32) int32 {
|
|
total := 0
|
|
for _, v := range s1 {
|
|
total += int(v)
|
|
}
|
|
if total <= 0 {
|
|
return 0
|
|
}
|
|
random := rand.Intn(total)
|
|
total = 0
|
|
for i, v := range s1 {
|
|
total += int(v)
|
|
if random < total {
|
|
return int32(i)
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
func PrintFruit(idx int32) (str string) {
|
|
switch idx {
|
|
case Wild:
|
|
str += "Wild"
|
|
case Bonus:
|
|
str += "Bonus"
|
|
case Scatter:
|
|
str += "SCATTER"
|
|
case Bar:
|
|
str += "Bar"
|
|
case Cherry:
|
|
str += "樱桃"
|
|
case Bell:
|
|
str += "铃铛"
|
|
case Pineapple:
|
|
str += "菠萝"
|
|
case Grape:
|
|
str += "葡萄"
|
|
case Lemon:
|
|
str += "柠檬"
|
|
case Watermelon:
|
|
str += "西瓜"
|
|
case Banana:
|
|
str += "香蕉"
|
|
case Apple:
|
|
str += "苹果"
|
|
case Bomb:
|
|
str += "炸弹"
|
|
}
|
|
return str
|
|
}
|
|
|
|
func Print(res []int32) {
|
|
fmt.Println(res, len(res))
|
|
str := ""
|
|
for k, ele := range res {
|
|
switch ele {
|
|
case Wild:
|
|
str += "Wild,"
|
|
case Bonus:
|
|
str += "Bonus,"
|
|
case Scatter:
|
|
str += "Scatter,"
|
|
case Bar:
|
|
str += "Bar,"
|
|
case Cherry:
|
|
str += "樱桃,"
|
|
case Bell:
|
|
str += "铃铛,"
|
|
case Pineapple:
|
|
str += "菠萝,"
|
|
case Grape:
|
|
str += "葡萄,"
|
|
case Lemon:
|
|
str += "柠檬,"
|
|
case Watermelon:
|
|
str += "西瓜,"
|
|
case Apple:
|
|
str += "苹果,"
|
|
case Banana:
|
|
str += "香蕉,"
|
|
}
|
|
if (k+1)%5 == 0 {
|
|
fmt.Println("第", strconv.Itoa((k+1)/5), "行 ", str)
|
|
str = ""
|
|
}
|
|
}
|
|
}
|
|
func PrintWin(lines []int32) {
|
|
str := ""
|
|
for _, ele := range lines {
|
|
switch ele {
|
|
case Wild:
|
|
str += "Wild,"
|
|
case Bonus:
|
|
str += "Bonus,"
|
|
case Scatter:
|
|
str += "Scatter,"
|
|
case Bar:
|
|
str += "Bar,"
|
|
case Cherry:
|
|
str += "樱桃,"
|
|
case Bell:
|
|
str += "铃铛,"
|
|
case Pineapple:
|
|
str += "菠萝,"
|
|
case Grape:
|
|
str += "葡萄,"
|
|
case Lemon:
|
|
str += "柠檬,"
|
|
case Watermelon:
|
|
str += "西瓜,"
|
|
case Banana:
|
|
str += "香蕉,"
|
|
case Apple:
|
|
str += "苹果,"
|
|
case Bomb:
|
|
str += "炸弹,"
|
|
}
|
|
}
|
|
fmt.Println(str)
|
|
}
|