【Golang语言社区】四川麻将随机初始化牌型结构

时间:2022-05-06
本文章向大家介绍【Golang语言社区】四川麻将随机初始化牌型结构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
注:测试代码,切忌应用到正式环境;注重流程
package main


import (

        "fmt"

        "math/rand"

        "time"

)

const (

        NoHU        = 0  //不胡

        PingHU      = 1  //平胡;四坎牌,加一对将,得一分。

        DuiDuiHU    = 2  //对对胡;每坎牌都是三张一样的牌,即111万、222条,得两分。

        QiangGangHU = 3  //抢杠胡;它人杠的时候,抢牌胡,得两分。

        QingYiSe    = 4  //清一色;全手牌是一种花色,即123条、567条、234 条、888条、99条,得三分。

        YaoJiuPai   = 5  //幺九牌;每坎牌都是一或九,即123条、123万、789条、789万、99万,得三分。

        QiDui       = 6  //七对;胡牌的时候是七对牌,即11万、22万、99万、44筒、66筒、88筒、99筒,得三分。

        QingQiDui   = 7  //清七对;在七对的基础上,有两对牌是四张一样的。(注意:此四张牌并不是杠的牌) 即11万、11万、99万、44筒、66筒、88筒、99筒,得四分。

        QiDui2      = 8  //清对;一种花色的大对子。即111万、444万、222万、999万、66万,得四分。

        JiangDui    = 9  //将对;即二、五、八的大对子,即222万 555万 888万 222条 55筒,的四分。

        TianHU      = 10 //天胡;即刚码好牌就自然成胡,得8分。

        DiHU        = 11 //地胡;即刚打第一张牌就成胡,得8分。

)





var (

        SiChuangMJArr = []int{

                101, 102, 103, 104, 105, 106, 107, 108, 109, //#万

                101, 102, 103, 104, 105, 106, 107, 108, 109,

                101, 102, 103, 104, 105, 106, 107, 108, 109,

                101, 102, 103, 104, 105, 106, 107, 108, 109,

                201, 202, 203, 204, 205, 206, 207, 208, 209, //#饼

                201, 202, 203, 204, 205, 206, 207, 208, 209,

                201, 202, 203, 204, 205, 206, 207, 208, 209,

                201, 202, 203, 204, 205, 206, 207, 208, 209,

                301, 302, 303, 304, 305, 306, 307, 308, 309, //#条

                301, 302, 303, 304, 305, 306, 307, 308, 309,

                301, 302, 303, 304, 305, 306, 307, 308, 309,

                301, 302, 303, 304, 305, 306, 307, 308, 309,

        }

)

















func RandInt64(min, max int64) int64 {

        if min >= max || min == 0 || max == 0 {

                return max

        }

        return rand.Int63n(max-min) + min

}







 

 

 









// 初始化发牌

func initFaPai() {



        FaPaiCiShu := 53              // 初始化牌型 为循环随机53次;可能实际要大于53次,随机的次数在具体根据实际情况

        SuiJiMap := make(map[int]int) // 记录随机数

        for i := 0; i < FaPaiCiShu; i++ {

                WeiZhi := int(RandInt64(1, 108))

                //WeiZhi := rand.Intn(107)

                _, ok := SuiJiMap[WeiZhi]

                if ok {

                        fmt.Println("随机重复:", WeiZhi)

                        FaPaiCiShu++

                        continue

                }

                fmt.Println(WeiZhi)

                SuiJiMap[WeiZhi] = WeiZhi

        }



        fmt.Println("循环次数", FaPaiCiShu)

}



func init() {

        fmt.Println("entry init")

 

        t1 := time.Now()

        initFaPai()

 

        elapsed := time.Since(t1)

        fmt.Println("App elapsed: ", elapsed)

        return

}



func main() {



        return

}


输出结果

entry init

93

35

103

42

23

随机重复: 103

97

随机重复: 42

76

107

2

102

59

95

55

36

87

54

随机重复: 36

19

90

68

30

66

62

77

52

41

46

随机重复: 59

79

随机重复: 90

随机重复: 59

24

22

85

89

16

7

随机重复: 46

随机重复: 35

58

100

随机重复: 77

37

105

94

随机重复: 58

随机重复: 93

28

70

随机重复: 2

45

64

43

17

27

随机重复: 90

67

10

随机重复: 105

随机重复: 35

91

随机重复: 103

随机重复: 76

随机重复: 105

75

3

随机重复: 37

86

99

随机重复: 2

80

循环次数 73

App elapsed:  1ms