18910140161

简单的麻将ai算法

顺晟科技

2021-06-16 10:41:07

429

写麻将游戏需要ai算法自动打牌。我自己写了一个。虽然不是很聪明,但我对它的简单感到惊讶,所以我记录了下来。用python实现。

首先总结一下麻将的规则。看似复杂的麻将规则,可以用一个公式来表示。胡拍=AA和(AAA或者AAAA或者ABC)

AA:是麻将

AAA:是摸牌

AAAA:这是一张酒吧卡

甚至是纸牌

卡片的表示。用数字表示麻将牌,如11-19表示1万到9万,31-39表示1到9,51-59表示1到9。为什么条子和筒管之间有10个数字?是为了算法的实现。

胡判官牌。用递归函数判断胡牌。CardList要求卡片按照卡片的数量大小从小到大排列。

# cardList:是手里的卡,需要从小到大排列

def匹配(cardList,majiang=False):

如果len(CardList)=0且majiang:返回真

rst=假

# AA

如果不是majiang和len(cardList)=2和cardList[0]==cardList[1]:

列表1=[]卡片列表

list1.pop(0)

list1.pop(0)

rst=匹配(列表1,真)# AAA

如果不是rst和len(卡片列表)=3和卡片列表[0]==卡片列表[1]==卡片列表[2]:

列表1=[]卡片列表

list1.pop(0)

list1.pop(0)

list1.pop(0)

rst=match(列表1,麻江)# AAAA

如果不是rst和len(cardList)=4和card list[0]==card list[1]==card list[2]==card list[3]:

列表1=[]卡片列表

list1.pop(0)

list1.pop(0)

list1.pop(0)

list1.pop(0)

rst=match(列表1,麻江)# ABC

如果不是rst和len(cardList)=3:

list1=[]

a=cardList[0]

b=假

c=假

对于范围内的I(1,len(cardList)):如果不是b和cardList[i]==a 1:

乙=真

elif非c和cardList[i]==a 2:

c=真

else:

list1.append(cardList[i]) if(b和c):

rst=match(list1,majiang) return rst

判断牌。打牌就是打最没用的牌。首先,为你手中的所有牌计算一个分数。分数更低的牌是最没用的牌。每张牌的分数怎么算?

下图为卡面x的得分计算方法,AAAA等卡得分更高,不会被淘汰;像AC这样的差卡得分较低,增加了被淘汰的可能性。

输入图片描述不仅要数手里的牌,还要考虑没有出现的牌。如果你手里有AC这样的牌,那么不出现的牌里就多了A和B牌。然后玩AAA或者ABC卡的几率增加,分数更高,被打出的几率更小。但是不管有多少张牌没有出现,都不如手里有ABC形状的牌实用,所以没有出现的牌分数更低。比如手算100分,没有出现的牌只能算5分。

para=[10,2,1]

比例=50

#卡片:手中的卡片

#黑暗:从未见过的牌

def cardsScore(卡片,深色):

分数=[]

对于cards:中的c

分数=0

对于cards:中的cc

gap=abs(cc - c) if gap 3:

分数=para[gap] *等级

适用于黑暗中的dark:

gap=abs(cc - c) if gap 3:

分数=para[gap]

分数。追加(分数)

返回分数

测试。通过测试,用几行简单代码实现的ai算法很容易上当。在四款这样的ai游戏中,95%会玩Hu牌,5%会黄,没有牌。para和scale的值可以调整,以提高人工智能的智能性。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航