规则:
1、 每人平分一半的牌
2、 一人先出牌
3、 如果是出牌的那张牌的相同数字牌在堆中,即可获得这之间和本身的牌
4、 如果出牌为Q对手就给2张牌、K给3张、小王给4张、大王给10张,先给牌,再拿牌,获得的牌放最下面
5、 谁先没牌谁就输了
使用python代码如下:
import random
#所有牌的dict
p={}
#发牌,n是几副牌
def fenpai(n=1):
p1=[]
for i in range(52*n):
p[i]=i%13+1
p1.append(i)
for i in range(n):
p[52*n+2*i]=14
p[52*n+2*i+1]=15
s=[]
r=([],[])
p2=([],[])
for i in p:
s.insert(random.choice(p1),i)
for i in range(len(p)):
r[i%2].append(s[i])
p2[i%2].append(p[s[i]])
return r,p2
# 钓鱼的排队
line={'p':[],'o':[]}
def role(u):
dd=0
pp=[]
if u[1]==11:
pp=line['o']
line['p']=[]
line['o']=[]
pp.append(u[0])
elif u[1]==12:
dd=2
elif u[1]==13:
dd=3
elif u[1]==14:
dd=5
elif u[1]==15:
dd=10
if u[1] in line['p']:
while True:
v=line['p'].pop()
k=line['o'].pop()
pp.insert(0,k)
if u[1]==v:
break
pp.append(u[0])
else:
if u[1]!=11:
line['p'].append(u[1])
line['o'].append(u[0])
return dd,pp
# 出牌,man是出牌人信息
def chupai(man):
if len(man['o'])==0:
return False,''
else:
v=(man['o'].pop(),man['p'].pop())
return True,v
# 一轮牌堆交互
def geipai(l1,l2,nores=False):
k,v=chupai(l1)
again=False
if k:
if not nores:
print(l1['name'],'出牌',v[1])
dd,pp=role(v)
if len(l2['o'])>dd:
for _ in range(dd):
if not nores:
print(l2['name'],'罚牌',l2['p'][-1])
print(l1['name'],'得牌',l2['p'][-1])
l1['o'].insert(0,l2['o'].pop())
l1['p'].insert(0,l2['p'].pop())
for i in pp:
l1['o'].insert(0,i)
l1['p'].insert(0,p[i])
again=True
if not nores:
print(l1['name'],'得牌',p[i])
else:
l2['o']=[]
l2['p']=[]
if not nores:
print(l2['name'],'被清空牌')
return True,again
else:
if not nores:
print(l2['name']+' win !')
return False,''
# 整个牌局
def paiju(r,nores=False):
l1={'o':r[0][0],'p':r[1][0],'name':'www'}
l2={'o':r[0][1],'p':r[1][1],'name':'ccc'}
init=1
while True:
t,m=geipai(l1,l2,nores)
if t:
while True:
if t:
if m:
t,m=geipai(l1,l2,nores)
else:
break
else:
break
else:
break
t,m=geipai(l2,l1,nores)
if t:
while True:
if t:
if m:
t,m=geipai(l2,l1,nores)
else:
break
else:
break
else:
break
init+=1
if not nores:
print('_'*40)
return init
# 最大回合数
max=0
# 最小回合数
min=12121
# 跑一千局结果
for i in range(1000):
r=fenpai(2)
ini=paiju(r,True)
if ini>max:
max=ini
if ini <min:
min=ini
print(min,max)
网友评论