174 lines
3.8 KiB
Go
174 lines
3.8 KiB
Go
package rollpoint
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
RollNum = 3
|
|
)
|
|
const (
|
|
BetArea_1 int32 = iota
|
|
BetArea_2
|
|
BetArea_3
|
|
BetArea_4
|
|
BetArea_5
|
|
BetArea_6 //5
|
|
BetArea_Sum4 //6
|
|
BetArea_Sum5
|
|
BetArea_Sum6
|
|
BetArea_Sum7
|
|
BetArea_Sum8
|
|
BetArea_Sum9
|
|
BetArea_Sum10
|
|
BetArea_Sum11
|
|
BetArea_Sum12
|
|
BetArea_Sum13
|
|
BetArea_Sum14
|
|
BetArea_Sum15
|
|
BetArea_Sum16
|
|
BetArea_Sum17
|
|
BetArea_Small //20
|
|
BetArea_Big //21
|
|
BetArea_Double1 //22
|
|
BetArea_Double2
|
|
BetArea_Double3
|
|
BetArea_Double4
|
|
BetArea_Double5
|
|
BetArea_Double6
|
|
BetArea_Boom //28
|
|
BetArea_Boom1 //29
|
|
BetArea_Boom2
|
|
BetArea_Boom3
|
|
BetArea_Boom4
|
|
BetArea_Boom5
|
|
BetArea_Boom6 //34
|
|
BetArea_Max
|
|
)
|
|
|
|
var rate = [BetArea_Max]int32{
|
|
1, 1, 1, 1, 1, 1, //Area1-6
|
|
60, 30, 20, 12, 8, 6, 6, 6, 6, 8, 12, 20, 30, 60, //Sum4-17
|
|
1, 1, //small,big
|
|
10, 10, 10, 10, 10, 10, //Double1-6
|
|
30, //Boom
|
|
200, 200, 200, 200, 200, 200, //Boom1-6
|
|
}
|
|
|
|
// 5 6 7 8 9 10
|
|
// 9/10/11/12| 8/13| 7/14| 6/15| 5/16| 4/17
|
|
var AreaIndex2MaxChipIndex = [BetArea_Max]int32{
|
|
1, 1, 1, 1, 1, 1, //Area1-6
|
|
10, 9, 8, 7, 6, 5, 5, 5, 5, 6, 7, 8, 9, 10, //Sum4-17
|
|
0, 0, //small,big
|
|
2, 2, 2, 2, 2, 2, //Double1-6
|
|
3, //Boom
|
|
4, 4, 4, 4, 4, 4, //Boom1-6
|
|
}
|
|
var MaxChipColl = [BetArea_Max][]int32{}
|
|
var AllScore = [][BetArea_Max]int32{}
|
|
var AllRoll = [][RollNum]int32{}
|
|
|
|
type BlackBox struct {
|
|
first *rand.Rand
|
|
second *rand.Rand
|
|
third *rand.Rand
|
|
count int
|
|
Point [RollNum]int32
|
|
Score [BetArea_Max]int32
|
|
}
|
|
|
|
func CreateBlackBox() *BlackBox {
|
|
return &BlackBox{
|
|
count: 0,
|
|
first: rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano()))),
|
|
second: rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano()))),
|
|
third: rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano()))),
|
|
Point: [RollNum]int32{},
|
|
}
|
|
}
|
|
func (bb *BlackBox) Roll() {
|
|
if bb.count > 10 {
|
|
bb.first = rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano())))
|
|
bb.second = rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano())))
|
|
bb.third = rand.New(rand.NewSource(rand.Int63n(time.Now().UnixNano())))
|
|
bb.count = 0
|
|
}
|
|
bb.count++
|
|
bb.Point[0] = bb.first.Int31n(6)
|
|
bb.Point[1] = bb.second.Int31n(6)
|
|
bb.Point[2] = bb.third.Int31n(6)
|
|
bb.Score = CalcPoint(bb.Point)
|
|
}
|
|
func CalcPoint(point [RollNum]int32) [BetArea_Max]int32 {
|
|
score := [BetArea_Max]int32{}
|
|
if point[0] == -1 || point[1] == -1 || point[2] == -1 {
|
|
point[0] = rand.Int31n(6)
|
|
point[1] = rand.Int31n(6)
|
|
point[2] = rand.Int31n(6)
|
|
}
|
|
sum := int32(0)
|
|
//Area1-6
|
|
for _, value := range point {
|
|
score[value] += 1
|
|
sum += (value + 1)
|
|
}
|
|
//Sum4-17
|
|
if sum >= 4 && sum <= 17 {
|
|
index := (sum - 4) + BetArea_Sum4
|
|
score[index] = rate[index]
|
|
}
|
|
//small
|
|
if sum >= 4 && sum <= 10 {
|
|
score[BetArea_Small] = rate[BetArea_Small]
|
|
}
|
|
//big
|
|
if sum >= 11 && sum <= 17 {
|
|
score[BetArea_Big] = rate[BetArea_Big]
|
|
}
|
|
//Double1-6
|
|
if point[0] == point[1] {
|
|
index := point[0] + BetArea_Double1
|
|
score[index] = rate[index]
|
|
}
|
|
if point[0] == point[2] {
|
|
index := point[0] + BetArea_Double1
|
|
score[index] = rate[index]
|
|
}
|
|
if point[1] == point[2] {
|
|
index := point[1] + BetArea_Double1
|
|
score[index] = rate[index]
|
|
}
|
|
//Boom Boom1-6
|
|
if point[0] == point[1] && point[1] == point[2] {
|
|
//Boom
|
|
score[BetArea_Boom] += rate[BetArea_Boom]
|
|
//Boom1-6
|
|
index := point[0] + BetArea_Boom1
|
|
score[index] = rate[index]
|
|
score[BetArea_Small] = 0
|
|
score[BetArea_Big] = 0
|
|
}
|
|
return score
|
|
}
|
|
func init() {
|
|
for i := int32(0); i < 6; i++ {
|
|
for j := int32(0); j < 6; j++ {
|
|
for k := int32(0); k < 6; k++ {
|
|
AllScore = append(AllScore, CalcPoint([RollNum]int32{i, j, k}))
|
|
AllRoll = append(AllRoll, [RollNum]int32{i, j, k})
|
|
}
|
|
}
|
|
}
|
|
for i := int32(0); i < BetArea_Max; i++ {
|
|
arr := []int32{}
|
|
for k := int32(0); k < BetArea_Max; k++ {
|
|
if AreaIndex2MaxChipIndex[k] == AreaIndex2MaxChipIndex[i] {
|
|
arr = append(arr, k)
|
|
}
|
|
}
|
|
MaxChipColl[i] = arr
|
|
}
|
|
}
|