/mahjong

麻将算法汇总

Primary LanguageGo

麻将算法封装

  • 此库主要包括了

    • 牌墙算法
    • 听牌算法
    • 胡牌算法
    • 出牌推荐算法
    • 扩展玩法设置
  • 麻将牌的定义

	1 ~ 9 : 一万 ~ 9万
	11 ~ 19 : 一条 ~ 9条
	21 ~ 29 : 一筒 ~ 9筒
	31 ~ 34 : 东南西北风
	41 : 发财
	42 : 红中
	43 : 白板
	51 ~ 54 : 春夏秋冬
	61 ~ 64 : 四种花色
  • 牌墙
import "github.com/fwhappy/mahjong/wall"

func main() {
	// 初始化牌墙
	w := wall.NewWall()
	w.SetTiles([]int{1,1,1,1,2,2,2,2})
	
	// 洗牌
	w.Shuffle()
	
	// 从前面抓一张
	wall.ForwardDraw()
	
	// 从前面抓多张
	wall.ForwardDrawMulti()
	
	// 从后面抓一张
	wall.BackwardDraw()
	
	// 是否已抓完
	wall.IsAllDrawn()
}
  • 胡牌算法
	import "github.com/fwhappy/mahjong/win"
	
	func main() {
		// 手牌
		handTiles := []int{1,2,3,4,5,6,7,7}
		// 明牌
		showTiles := []int{}
		
		// 根据用户手牌和明牌来判断用户是否可以胡牌
		isWin := win.CanWin(handTiles, showTiles)
	}
  • 听牌算法
	import "github.com/fwhappy/mahjong/ting"
	
	func main() {
		// 根据手牌、弃牌计算当前牌型,所有听牌的可能
		// 返回map[int][]int, 表示打出key,能胡value中的这些牌
		// 手牌
		handTiles := []int{1,2,3,4,5,6,7,7}
		// 明牌
		showTiles := []int{}
		ting.GetTingMap(handTiles, showTiles)
		
		// 检测当前手牌、弃牌是否已停牌
		ting.CanTing(handTiles, showTiles)
	}
  • 选牌算法(AI)
	import "github.com/fwhappy/mahjong/suggest"
	
	func main() {
		ms := suggest.NewMSelector()
		
		// 根据用户手牌、明牌,弃牌(所有人的)
		// 计算出用户当前应该出什么牌
		
		// 手牌
		handTiles := []int{1,2,3,4,5,6,7,7}
		// 明牌
		showTiles := []int{}
		// 弃牌
		discardTiles := []int{}
		
		// 设置参数
		ms.SetAILevel(aiLevel) // AI等级
		ms.SetLack(lack)	// 缺的牌
		ms.SetHandTilesSlice(handTiles)
		ms.SetShowTilesSlice(showTiles)
		ms.SetDiscardTilesSlice(discardTiles)
		// 选牌
		tile := ms.GetSuggest()
	}