1. 首页

goframe demo改的一个牛牛游戏算法聊天程序与实现讲解


使用goframe demo改的一个功能,一些简单的算法  
先下载到本地,然后go mod tidy  
然后到根目录打开cmd,go run main.go  
然后打开http://localhost:8199/chat/index  
正常输入聊天内容是正常聊天内容,如果输入111,累积了2名用户后开始发牌,自动计算自己有没有牛,多少倍(牛七八九2倍,牛牛)

展示效果如下,两边同时输入就开始计算结果

方法:输入"111""结果"

开源地址:gf牛牛1: goframe写的牛牛聊天程序



实现讲解:

  1. 初始化牌

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