# mahjong **Repository Path**: mirrors_fwhappy/mahjong ## Basic Information - **Project Name**: mahjong - **Description**: 麻将算法汇总 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-01-10 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 麻将算法封装 * 此库主要包括了 * 牌墙算法 * 听牌算法 * 胡牌算法 * 出牌推荐算法 * 扩展玩法设置 * 麻将牌的定义 ~~~ 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() } ~~~