街头斗地主残局破解,求破解

利用Python破解斗地主残局详解
转载 & & 作者:Tim
斗地主应该对大家来说都不陌生,下面这篇文章主要跟大家分享了关于利用Python破解斗地主残局的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
相信大家都玩过斗地主,规则就不再介绍了。
直接上一张朋友圈看到的残局图:
这道题我刚看到时,曾尝试用手工来破解,每次都以为找到了农民的必胜策略时,最后都发现其实农民跑不掉。由于手工破解无法穷尽所有可能性,所以这道题究竟农民有没有妙手跑掉呢,只能通过代码来帮助我们运算了。
本文将简要讲述怎么通过代码来求解此类问题,在最后会公布残局的最后结果,并开源代码以供大家吐槽。
代码的核心思想是minimax。minimax可以拆解为两部分,mini和max,分别是最小和最大的意思。
直观的理解是什么呢?就有点像A、B两个人下棋。A现在可以在N个点走棋,假设A在某个点走棋了,使得A的这一步的盘面评估分数最高;但是轮到B下的时候,就一定会朝着让A最不利的方向走,使得A的下一步必然按照B设定的轨迹来,而没法达到A在第一步时估算到这一步的最高盘面评分。
在牌局中是一样的,如果农民的一手牌,让地主无论如何应对都不能赢的话,那么可以说农民有必胜策略;否则,农民必输。
我们可以用一个函数hand_out来模拟一个人的出牌过程。在现实生活中,一个人想要出牌的话,必然需要知道自己手上的所有牌:me_pokers,也需要知道上一手的出的牌:last_hand。如果我们要用这个函数来模拟两个人的出牌,则还需要知道对手当前的所有牌:enemy_pokers。
这个函数的返回值,是轮到我me_pokers出牌时,是否能够必赢牌。如果能赢则返回真,否则返回假。
def hand_out(me_pokers, enemy_pokers, last_hand)
假设轮到我出牌时,如果我手上的牌都出完了,那么我将立刻知道我赢了;反之如果对手的牌都出完了,而我没有,则我失败了。
if not me_pokers:
return True
if not enemy_pokers:
return False
因为现在轮到我出牌,所以我首先需要知道我现在能出的所有手牌组合。注意:这个组合中,包括过牌(即不出牌)的策略。
all_hands = get_all_hands(me_pokers)
现在我们要对所有可能的手牌组合进行遍历。
首先我需要知道,上一手对方出的牌是什么。
如果对方上一手选择过牌,或者没有上一手牌,那么我这一轮必须不能过牌,但是我可以出任意的牌
如果对手上一手出了牌,则我必须要出一个比它更大的牌或者选择这一轮直接过牌(不出牌)
关键点来了,在出完我的牌或选择过牌后,我们需要用一个递归调用来模拟对手下一步的行为。如果对手的下一次出牌不能获胜的话,则我这一次的出牌必胜;否则,对于我的每一个出牌选择,对手都能获胜的话,则我必败。
全部代码如下:
def hand_out(me_pokers, enemy_pokers, last_hand, cache):
if not me_pokers:
# 我全部过牌,直接获胜
return True
if not enemy_pokers:
# 对手全部过牌,我失败
return False
# 获取我当前可以出的所有手牌组合,包括过牌
all_hands = get_all_hands(me_pokers)
# 遍历我的所有出牌组合,进行模拟出牌
for hand in all_hands:
# 如果上一轮对手出了牌,则这一轮我必须要出比对手更大的牌 或者 对手上一轮选择过牌,那么我只需出任意牌,但是不能过牌
if (last_hand and can_comb2_beat_comb1(last_hand, hand)) or (not last_hand and hand['type'] != COMB_TYPE.PASS):
# 模拟对手出牌,如果对手不能取胜,则我必胜
if not hand_out(enemy_pokers, make_hand(me_pokers, hand), hand, cache):
return True
# 如果上一轮对手出了牌,但我这一轮选择过牌
elif last_hand and hand['type'] == COMB_TYPE.PASS:
# 模拟对手出牌,如果对手不能取胜,则我必胜
if not hand_out(enemy_pokers, me_pokers, None, cache):
return True
# 如果之前的所有出牌组合均不能必胜,则我必败
return False
以上核心逻辑理清楚后,构建破解器将变得十分简单。
首先,我们要用数字来表示牌的大小,这里我们用3表示3,11来表示J,12表示Q,依次类推……
其次,我们需要求出一个手牌的所有出牌组合,这里需要get_all_hands函数,具体实现比较繁琐但是很简单,就不在此赘述。
然后,我们还需要一个牌力判断函数can_comb2_beat_comb1(comb1, comb2) ,这个函数用于比较两组手牌的牌力,看是否comb2可以击败comb1。唯一需要注意的一点,在斗地主的规则中,除了炸弹外,其他所有牌力均等,只有牌型一样时才能去比较。
最后,我们需要一个模拟出牌函数make_hand(pokers, hand) ,用于求出在手牌为pokers的情况下打出一手牌hand后,剩下的手牌,实现也非常简单,只需简单的移除掉那些打出的牌即可。
由于一副牌的可能手牌巨大,导致递归的分支数巨大。所以时间开销非常大,为阶乘级O(N!),根据,大约为O(N^N)。
由于可能会有很多重复的牌面出现,导致了很多重复的递归调用。所以加一个缓存能极大提升效率。
即对我方手牌和敌方手牌和上一轮手牌的描述(str(me_pokers)+str(enemy_pokers)+str(last_hand))为键,将求出的结果存进缓存字典中。下一次遇到相同的局面时,即可直接从缓存字典中取出,而无需再次重复计算。时间复杂度优化为指数级O(C^N)。
代码运算出来的结果是,农民没有必胜策略。换言之,只要地主会玩,农民不可能赢。阶级固化已经如斯了么……
代码放于Github: ,或者大家可以,MIT协议,随便玩。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具经典斗地主残局_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
经典斗地主残局
阅读已结束,下载本文到电脑
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢院领导集体
经典斗地主残局及破解
上海科技大学
C罗:1分不是理想的成绩对俄罗斯将全力争胜
新乐府首届音乐盛典以创新之名致敬中国音乐
李多娜新歌《不要伤害》首发释放温暖保护动物
印度拒绝第三方调停克什米尔争端担心他国介入
Day8:转战上古冰川雕琢的罗弗敦群岛
经典斗地主残局及破解小S自戳痛处呛声陈妍希:生儿子整个人横着走
《上古情歌》开播刘帅良再度古装气宇轩昂
经典斗地主残局及破解:高清:C罗小弟球衣被扯怒怼对手纳尼个性庆祝
我要分享 &
文章来源:中国科学院&&&&发布时间:日 11:10&&【字号:&&&&&&】
文系体育独家稿件,未经授权,不得转载,否则将追究法律责2014年8月她登上俄国版《ELLE》的封是新理念、新业态,下面简单介绍一下我国新能源汽车科技创新的情饰)是智障,所以母亲(金惠子饰)总是担心他受伤。一天,泰宇被一辆奔驰车撞倒,朋友镇泰(秦久饰)带他去高尔夫球场找打球的教授报仇,结果被带回了警局。因为镇泰踢坏了后视镜,教授向他们索赔,泰宇被当成了挡箭牌。从警局出来后,在家吃过晚饭,泰宇去找镇泰喝酒,但此时镇泰趁着夜色回到球场找出了白天扔进湖中的球杆。泰宇酒后尾随一个名叫文雅中的女学生,结果第二天雅中的尸体就出现在屋顶。泰宇被当做唯一的嫌疑人带回了警局,接着在警察的威胁下画押认罪。得知儿子入狱,心急如焚的母亲委托著名律师为他翻案。但是,泰宇的病影响了他的记忆,母亲在替儿申冤的道路上步履蹒跚不是花瓶,而是实力派!1987年,年仅21岁的李丽珍便获得了金像奖最佳女主角的提名;沉淀了几年之后参演的第一部戏便是红遍两岸三地的《大时代位岛友如果觉得文章略长,我们还为大家准备了一个精简版的睡前故春刀·修罗战场》于破亿、破2亿之际先后曝光了片中“吹温的水”、“裴纶的疑问”、“案牍库之战”精彩片段,展现影片热血凌冽的动作设计与细腻婉转的情与义,而影片中张震饰演的沈炼与杨幂饰演的北斋从对立到慢慢靠近直至为爱牺牲的层层递进更成为众多女性观众津津乐道的话题。也正因经典斗地主残局及破解如此沈炼为北斋吹温水的片段一经公布便登上热门话题右侧、热门话题24小时榜,更拿下话题1小时榜第1名、明星内地榜第1名、热门话题电影榜第2名,彰显超高关注名内线球员,拉比西埃,考利-斯坦,帕帕扬经典斗地主残局及破解尼斯都是很有潜力的内线球员。如果麦基加盟,应该能够给国王内线带来宝贵的经大理,按照李先生家乡的习俗办了婚礼,但两人依然没有和好,第二天一经典斗地主残局及破解早邵女士就回昆明贝利还谈起巴西队的库蒂尼奥以及保利尼奥:“库蒂尼奥是我看好的球员,他的存在对于球队是巨大的补强,他没有必要依靠转会来证明自己有多出色,关键在于在球场上抓住机会,皇马、尤文都曾追求过我,我还有到拜仁搭档贝肯鲍尔的机会,但是我最终留在了桑托斯。保利尼奥?在巴萨他的表现肯定会让人们吃惊,他的力量以及坚韧的性格都是优势证券代码:002291)去年7月发布公告,宣布星期六与广州琢石发起设立时尚产业并购基金——“时尚基金”,重点投资时尚新兴产国内的足球联赛第一次出现类似的打人事件,2016年的足协杯半决赛上海申花做客南京奥体中心挑战江苏苏宁,在赛场外苏宁球迷对一名申花球迷进行了围殴,同时嘴里也不断的爆出不堪入耳的脏话。后来客队球迷报警才阻止了这次冲突的再一次升级。而此次中乙联赛再次爆出打人事件,我们不禁要问我们的联赛究竟是怎么了?我们还能安全的走上看台看球德可能重回热火,他的孩子们已经回到佛罗里达州的学校就读,而且上周韦德的一位伙伴还透露,韦德也有意热火和湖人。但是,热火在某些情况下才会对韦德感兴趣,包括如果韦德愿意接受替补角色,以及愿意拿价值430万美元的特例合都会去地经典斗地主残局及破解铁店去“调研”,看看他们的地铁店是怎么布局一场大雨,消散了重庆的暑气,不过这场雨并没有给当代力帆带来好运,反而是客队江苏苏宁的一场及时雨。当代力帆想要完成对江苏苏宁双杀,拿到五连胜创造一个球队的新历史,不过张外龙并没能如愿。张外龙继续沿用了此前的战术体系,无论是进攻还是防守球员都完成得没毛病。苏宁的防线是他们最大的弱点,这正好应了张外龙防守反击的战术,但让人没想到的是,当代力帆开局不久球队就1球落后,R马利用个人能力打入一球,这一粒过早的失球导致球队不得不把阵型压上。球队一波一波的攻势几乎让江苏苏宁放弃了进攻,南松把比分扳成1:1时,所有人都看好当代力帆能够在主场实现逆转,因为在场面上球队占据了压倒性的优势,不过任凭球队如何对顾超把守的大门进行狂轰乱炸,球就是进不斯基软件在美国流行,一些网络安全领域的竞争对手怀疑卡巴斯基和俄罗斯情报机构存在幕后合作关系。另外一些业界人士则指出,如果离开了俄罗斯,卡巴斯基软件根本不可能存活下报名阶段就有很多专业名称的困惑,有的考生不太了解毕业证上所写的专业与学位证上的学位是什么关系;有的考生不太了解一级学科和二级学科是什么关系;有的考生疑惑,招考公告上的专业要求与自己毕业证上专业有细微差别,但与学位证专业一致,不知能否报功赫赫、负伤累累,林伟光经典斗地主残局及破解被誉为不怕死的“战神府”更是重磅加盟江苏卫视大型音乐文化纪实节目《中国乐队》录制。著名音乐人、十三月文化新乐府音乐总监陈伟伦将与“中国摇滚教父”崔健、“国内乐队新生代”谭维维携手担任乐队推荐人,他将力推新乐府戏曲跨界创新与乐队文化的融合,推荐、发掘更多具备中国传统文化标签与中国之美的跨界乐队。同时,新乐府也收到了来自于中国新歌声等大型综艺节目及多个欧洲国际音乐节及纽约百老汇的邀约,相信在不久的将来,新乐府将更多的走出国门,向世界传播中国文化、传播中国之-侯森、7-张池明、8-朴成、15-朱朝庆(U-23)、20-张辛昕、23-唐诗(U-23)、26-友发现林伟光突然消失了,大声呼喊。副大队长曾湘海看到塑料护栏断裂,用手电筒朝桥底照去,发现林伟光躺在桥底地面上,经典斗地主残局及破解一动不动,嘴里鲜血直】据日本《产经新闻》7月31日报道,为扭转支持率下跌的局面,日本首相安倍晋三预计在8月3日改组内阁,日本外相岸田文雄在近日举行的记者会上就此表示,应该启用多领域人才。他认为,有很多人才都有利于自民党。从优秀、有能力的人才中选拔出合适的人为自民党所用是很重要
(责任编辑:蒋明睿)视频:斗地主残局 求高手破解斗地主残局破解_百度图片搜索}

我要回帖

更多关于 斗地主残局破解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信