无聊之作-纸牌接龙(排火车)结束平均次数
【无聊之作-纸牌接龙(排火车)结束平均次数】今天看论文看累了,在实验室看到一幅扑克牌,想到小时候的无聊游戏-纸牌接龙(排火车,排竹尖),就是一副牌(去掉大小王)分成两份给两个人,然后每个人依次出一张按顺序放入队列中,当某一人出的一张牌,在队列中已经存在的时候,这个人将会收走从队列尾部到已经存在的牌之间的所有牌,然后再出一张,依次循环,直到两个人中有一人一张牌也没有的时候,游戏结束,当然这个游戏不止局限于两个人一副牌,N个人M副牌也是可以玩的
这好像是最无聊的纸牌游戏了,完全没有技术含量,完全凭运气,但是好像从来没有玩到结束过,因此今天看到纸牌想起来这个游戏,就想用计算机跑一下在随机的情况下,两个人一副牌,游戏结束的平均回合数有多少,因此产生了这个无聊之作
最后实验结果得出,平均500回合(出一次牌为一个回合)左右,游戏会结束。。。怪不得从小到大都没那个耐心玩完过
import random
import sys
sys.setrecursionlimit(10000)class Playerr:
def __init__(self,other_player=None):
self.card= [0 for x in range(0, 13)]
if other_player:
for i in range(13):
self.card[i]=4-other_player.card[i]
else:
for i in range(13):
self.card[i]=random.randint(0,4)def draw_card(self):
if self.is_empty():
return -1
random_draw=random.randint(0,12)
if self.card[random_draw]>0:
self.card[random_draw]=self.card[random_draw]-1
return random_draw
else:
return self.draw_card()def is_empty(self):
for i in range(13):
if self.card[i]>0:
return False
return Truedef display_card(self):
print(self.card)def play(cards,player_a,player_b,step):
card_a=player_a.draw_card()
'''
print("---------------------")
player_a.display_card()
player_b.display_card()
print(cards)
print(card_a)
print("---------------------")
'''
if card_a==-1:
return Nonetry:
find_index=cards.index(card_a)
except ValueError:
find_index=-1
if find_index!=-1:
for i in range(len(cards)-find_index):
card_index=cards.pop()
player_a.card[card_index]=player_a.card[card_index]+1
player_a.card[card_a] = player_a.card[card_a] + 1
else:
cards.append(card_a)
step[0]=step[0]+1
return play(cards,player_b,player_a,step)def main():sum=0
for i in range(5000):
player_a=Playerr()
player_b=Playerr(other_player=player_a)
step=[1]
play([],player_a,player_b,step)
sum+=step[0]
print(str(i)+"-----"+str(step))print(sum/5000)if __name__ == '__main__':
main()
推荐阅读
- 公园游
- 游戏治愈了我无聊之症
- 工具分享|5个有趣好玩的网站,拒绝无聊!
- 工作无聊了,要来养几个臭男人吗()
- 姑娘,时光如驰,愿你我不变
- 无聊时
- 无聊的一天
- 性冷淡的无聊离别
- 2018-09-08|2018-09-08 岁月如歌
- 《光阴》