goframe demo改的一个牛牛游戏算法聊天程序与实现讲解
使用goframe demo改的一个功能,一些简单的算法 先下载到本地,然后go mod tidy 然后到根目录打开cmd,go run main.go 然后打开http://localhost:8199/chat/index 正常输入聊天内容是正常聊天内容,如果输入111,累积了2名用户后开始发牌,自动计算自己有没有牛,多少倍(牛七八九2倍,牛牛)
展示效果如下,两边同时输入就开始计算结果
方法:输入"111""结果"
实现讲解:
初始化牌
basepai = []string{"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"} color = []string{"黑桃", "红桃", "梅花", "方块"} //初始化牌 func paiinit(isd ...int) []string { allpai := []string{} for _, v := range color { for _, i := range basepai { allpai = append(allpai, v+i) } } if len(isd) == 0 { allpai = append(allpai, kin...) } //fmt.Println("初始化牌", allpai) return allpai }
2.发牌,发牌的实现方法是,获取一个牌的长度的随机数,随机获取一张牌,获取5张,计算好牛几后序列一下,再缓存,发给用户
3.用户输入结果后,获取缓存信息,并开始计算牌的点数,与最大牌(如果点数一样的情况下,牌大就赢)
核心的计算点位算法如下:
//从缓存获取到牌的信息后,循环把字符串切割成花色与点数,比较简单的就不列了 /******/ //把每个牌的点数,先把大于10的牌清除出字符串组, //如果剩余大于3张牌,先看三张相加是否有等于10或者20的,清除出数组,如果有出现那么(最多剩余2张牌了)就跳出循环 //否则,再判断是否有2张相加有等于10的,清除出数组 //最后,如果剩余0张,那么牛牛,1张就一张的点数,2张就相加求%10的余,3张以上就没有牛 //算法如下: func fourAndFive(ints []int) []int { //先看三张相加是否有等于10或者20的 le := len(ints) fmt.Printf("牌的长度为%d", le) for i := 0; i < le-2; i++ { for j := i + 1; j < le-1; j++ { for o := j + 1; o < le; o++ { n := ints[i] + ints[j] + ints[o] if n == 10 || n == 20 { ints = append(ints[:o], ints[o+1:]...) ints = append(ints[:j], ints[j+1:]...) ints = append(ints[:i], ints[i+1:]...) //清除完后,最多2张牌了,可以直接返回 return ints } } } } for i := 0; i < le; i++ { for j := i + 1; j < le; j++ { //如果有两张牌一张的,那么就清除2张牌,继续循环当前位置的牌去对比 if ints[i]+ints[j] == 10 { le -= 2 ints = append(ints[:j], ints[j+1:]...) ints = append(ints[:i], ints[i+1:]...) i-- //这里应该跳出子循环,进入到下一个大循环 } } } return ints }
本文来自投稿,不代表本人立场,如若转载,请注明出处;如有问题您可以发邮件到:itlun@qq.com