- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
⿇将Ai设计思路(go语⾔实现)
设计思路
由于⿇将胡牌规则固定(只是牌型不同):3m+2(3指的是顺⼦、刻⼦,2指的是将牌(⼀对))。⽐如有个牌型123万789条⽩⽩⽩中
中,这个⼿牌就是胡牌的牌型,其中m=3。
想要形成胡牌的牌型,我们需要保留当前牌型中的顺⼦、刻⼦和对,以及可以形成成顺⼦的差⼀张牌的牌(⽐如13,差⼀张2。⽐如
34,差⼀个2或者5。)。这样⼦拆分后的牌剩下的只有单牌,所以我们出牌时可以先将单牌打出,然后再根据摸得新的牌,重新分析,最
后形成听牌牌型。当有事件(吃碰杠)时,我们可以对每⼀个事件分析⼀次牌型,然后根据形成的牌型所产⽣的单牌、以及可以形成单牌的
牌的权重⽐,来进⾏计算当前事件触发后对于牌型改变的优先级。(⽐如:对于单牌权重要占⽤⽐例⽐较⼤,可以是0.6以上;然后13牌⽐例
次之,可以是0.25,最后的23牌可以是0.15)。
要分析牌型,我们就需要为牌型新建⼀个结构体:
分析牌型⼯具,⾸先找出所有的顺⼦,然后再讲所有刻⼦找到,然后找出可以形成顺⼦的牌(⽐如, 之类的),然后剩余的牌,就是可以打出的牌
// 23 13
⼀种牌型⾥⾯的都是索引
// ( )
type TileType struct {
顺⼦切⽚,只记录第⼀个
Array_S []byte //
刻⼦切⽚,只记录第⼀个
Array_k []byte //
可以做将牌的牌,只记录第⼀个
Array_j []byte //
单牌
Array_d []byte //
间隔相差 张牌的牌,记录第⼀个
Array_1_3 []byte // 1
左右相差⼀张牌的牌,记录第⼀个
Array_34 []byte //
所有牌索引
Array_tile_index []byte //
什么动作之后的分析牌型。⽐如,普通出牌时的摸牌操作,或吃碰杠等
mask byte //
动作牌值
tile byte //
}
在上⾯的结构体中,我们是以顺⼦座位第⼀顺位,然后才是刻⼦、对⼦、34、13。
接下来就是对于牌型的提取:
分析牌型
//
func AnaTileType(tileIndexs []byte, mask byte, tile byte) *TileType {
tt := TileType{}
tt .mask = mask
tt .tile = tile
tt .Array_tile_index = append(tt.Array_tile_index, tileIndexs...)
ti := tt .Array_tile_index
提取顺⼦
// 123 23 13
for i := byte(0); i 7; i++ {
v := ti[i]
顺⼦
if v != 0 ti[i+1] != 0 ti[i+2] != 0 { //
tt.Array_S = append(tt.Array_S, i)
ti[i]--
ti[i+1]--
ti[i+2]--
}
}
提取将刻⼦
//
for i, v := range ti {
if v == 2 {
tt.Array_j = append(tt.Array_j, byte(i))
ti[i] = 0
continue
}
if v == 3 {
tt.Array_k = append(tt.Array_k, byte(i))
ti[i] = 0
}
}
提取类似 的顺⼦模型
// 34
for i := byte(0); i 7; i++ {
if ti[i] != 0 ti[i+1] != 0 ti[i+2] == 0
原创力文档


文档评论(0)