斗地主对9残局残局:上家手中有对2,他先出,下家有机会赢吗

您当前的位置: &
街头斗地主残局中你不知道的事
发表日期: 10:16:14
编辑:扑客编辑
来源:本站
街头斗地主残局中你不知道的事
斗地主是风靡全国的一种游戏,除了在扑客山庄平台上玩网络斗地主外,细心的玩家在外出游玩时会发现如今在街头也有人摆出一些斗地主残局让大家破解,赢了的还有一定的报酬,不少斗地主高手对这种斗地主残局都想来试试,等等,先别慌,看看那紫金阁小编关于这种街头残局的调查吧。
斗地主残局这种游戏如今在全国各地都能看到,据小编调查发现,这种残局的灵感最早来自于象棋的残局。象棋的普及率没有斗地主这么广,而且象棋的高手也不及斗地主这么多。因此街头那些象棋残局十有九个都是一些圈套,欺骗那些自认为是高手的人前来上当。那么斗地主残局是不是也是一种骗局呢?大家看完下编造这个例子就知道了。
小编一次在街头遇到这么一个斗地主残局。地上放着两堆。其中一堆牌是:一个3, 4567的连对,一对99,三个Q,三个 K 一个2 。另外一堆牌是一对AA 一对10 ,还有456QK,可以出34567或者456QK ,出牌规则可以3带当是不能3带1 也不能出连对。牌多的一家先出牌,谁先走完谁赢。我们可以任意选一边。
其实在这个斗地主残局中你怎么打都输了。如果你选第一堆明显很大的牌。第一种:你先出3,他不要.你再出K,他也不要,你再出Q,他还是不要。如果你拆4,他就拆10,后面无论你打你打什么都输了。第二种:你仍旧先出3,对方先过一手,你再拆4,对方就会出A,然后你就输了,因为打2又不能出对子,如果你出了小对别人打一对10,这样你就有两张单了。自然你就输了。第三种起手出3,他过,再出单K或者Q,对方继续再过,你只要拆4,他打10,你再打K或者Q,他再过,你再出4,他再过,你再拆5,他打10,就这样你怎么打都输了。
扑客山庄小编在这里要告诫各位玩家,街头斗地主残局100%都是骗局,如果不是仔细钻研过的人,是无法破解他们的骗术的。天上不会掉馅饼,这明眼人一看都知道的便宜,怎么会让你去占?这里才是发挥你高超技术的地方。
相关游戏杂谈:
相关游戏介绍:那些斗地主你不知道的技巧,看完之后肯定能赢!
我的图书馆
那些斗地主你不知道的技巧,看完之后肯定能赢!
斗地主最先是湖北十堰房县一个叫做吴修全的年轻人根据当地流行的一种叫做跑得快的扑克牌游戏发明的,现在已经风靡全国走向世界了。也正是因为如此所以在互联网上也好,现实生活中也罢,斗地主似乎是一种非常有效的消遣娱乐方式。但是在这个看起来简单的游戏当中,到底隐藏着怎样的玄机,为什么同样的手牌到人家手里的效果和在你手中的效果完全不同?打,应该怎么打?先手出什么牌,怎么压牌逼牌,怎么掌握主动权,这些能够让斗地主胜率稳稳上升的技巧你都会哪些?先出一道残局题给大家做一下,两个人,一个人手里是345566怎么打赢另外一个人手里是345577?答案会在下期公布出来。下面说说 斗地主的一些技巧。1 记牌不管打什么牌,不记牌都是耍流氓。因为只有记住了牌才知道什么牌能大,什么牌能够上手,对面手里是什么牌,最简单的就是你家没有的牌,起码用来判断对手手中有没有炸弹, 记住大小王,记住2A,与7,10.(这两张牌是决定有没有顺子的关键)2 叫分叫分决定了倍数与输赢的大小,叫地主、抢地主、加倍、超级加倍这些都不是盲目的。在决定是否抢地主之前,我们要对自己手上的牌有一个清晰的认知。这手牌到底值多少分?假如底牌真自己的如自己所愿上来的三张全都是自己想要的。这手牌好不好打,是不是好走、假如底牌上来的是毫无意义的单张又该怎么打,是否打得过。这个考虑至少手里也要有大牌,一般手里有对王以及对二或者是更大的牌肯定是会叫的了,弱一点的牌则要考虑手里的牌是否顺。如果手里的牌很顺但是没有大牌上手的话还是不要叫地主的好。当闲家往往会打得地主苦不堪言。有时地主一个不注意就一手走完。3 地主出牌斗地主是控制与反控制的一种游戏,无论是地主还是农民,分析对手或者是队友手里的牌都是非常必须的,出牌也要出自己能够控制的牌。地主出牌之前要事先规划好自己出牌赢牌的顺序,这一手出去是否能够收回来,继续下一手的牌,假如同上面,虽然自己手里有打牌,但是对手的牌特别顺,你有一手没有收回来,对面一笔飞机顺子连对走得只剩一两张,那场面就十分被动了。自己手里的大牌和炸弹都没有出去。一定要掌握全场的主动权,也就是出牌权,你能够出牌,如果对手不能把你压死,就按照你的套路 来打,手里没有王就不要出单,手里没有对A对2,就不要出双。这些都是简单的规则。如果手里的牌不怎么好的话,就要学会恰当的示弱,选择恰当的时机将自己手里的牌送出去。4 农民出牌农民出牌分为地主上家与下家两种,这两种情况又不一样。比如说地主出了个单3,下家可以随意走小,但是上家一定要顶大,比如K、A,可以试探出地主的2或者王的分布。假如说地主直接出了王,那可能是对2这样的牌型。如果地主让了牌,那上家出牌肯定要斟酌,例如地主出的是单牌,继续出单的肯定是不会玩的,可以转而出对子,出三张这些不一样的牌型。地主商家不必要求自己求胜,也可以帮助下家送牌,简化牌局赢得胜利。具体情况还是要针对手里的牌来决定,如果自己家的牌特别好的话,也可以选择自己来打。5 心态心态十分重要,需要和德州扑克的需求相去甚远但还是要保持一颗平常心。不要因为队友的某些操作失误导致自己心态崩了。这是这一期的斗地主技巧。下一期会给大家带来更多实用的技巧与某些平台上快捷用语的暗示,欢迎关注。如果觉得看完之后有所收益的话就请点个赞吧!
TA的最新馆藏
喜欢该文的人也喜欢前段时间呢,我发了一个朋友圈,是有关一个斗地主残局
刚刚看到有个人实现了残局的solver,缺点是在手牌多的时候时间复杂度还是挺高的。
代码的核心思想是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后,剩下的手牌,实现也非常简单,只需简单的移除掉那些打出的牌即可。
给出GitHub上有的源码# -*- coding: UTF-8 -*-
# 牌型枚举
class COMB_TYPE:
PASS, SINGLE, PAIR, TRIPLE, TRIPLE_ONE, TRIPLE_TWO, FOURTH_TWO_ONES, FOURTH_TWO_PAIRS, STRIGHT, BOMB, KING_PAIR = range(11)
# 根据牌,获取此副牌所有可能的牌型
# 牌型数据结构为牌类型,主牌,副牌
def get_all_hands(pokers):
if not pokers:
combs = [{'type':COMB_TYPE.PASS}]
for poker in pokers:
dic[poker] = dic.get(poker, 0) + 1
for poker in dic:
if dic[poker] &= 1:
combs.append({'type':COMB_TYPE.SINGLE, 'main':poker})
if dic[poker] &= 2:
combs.append({'type':COMB_TYPE.PAIR, 'main':poker})
if dic[poker] &= 3:
combs.append({'type':COMB_TYPE.TRIPLE, 'main':poker})
for poker2 in dic:
if ALLOW_THREE_ONE and dic[poker2] &= 1 and poker2 != poker:
combs.append({'type':COMB_TYPE.TRIPLE_ONE, 'main':poker, 'sub':poker2})
if ALLOW_THREE_TWO and dic[poker2] &= 2 and poker2 != poker:
combs.append({'type':COMB_TYPE.TRIPLE_TWO, 'main':poker, 'sub':poker2})
if dic[poker] == 4:
combs.append({'type':COMB_TYPE.BOMB, 'main':poker})
if ALLOW_FOUR_TWO:
pairs = []
for poker2 in dic:
if dic[poker2] == 1:
ones.append(poker2)
elif dic[poker2] == 2:
pairs.append(poker2)
for i in xrange(len(ones)):
for j in xrange(i + 1, len(ones)):
combs.append({'type':COMB_TYPE.FOURTH_TWO_ONES, 'main':poker, 'sub1':ones[i], 'sub2':ones[j]})
for i in xrange(len(pairs)):
combs.append({'type':COMB_TYPE.FOURTH_TWO_ONES, 'main':poker, 'sub1':pairs[i], 'sub2':pairs[i]})
for j in xrange(i + 1, len(pairs)):
combs.append({'type':COMB_TYPE.FOURTH_TWO_PAIRS, 'main':poker, 'sub1':pairs[i], 'sub2':pairs[j]})
if 16 in pokers and 17 in pokers:
combs.append({'type':COMB_TYPE.KING_PAIR})
# 所有顺子组合
distincted_sorted_pokers = sorted(list(set(pokers)))
lastPoker = distincted_sorted_pokers[0]
sequence_num = 1
while i & len(distincted_sorted_pokers):
# 只有3-A能连成顺子
if distincted_sorted_pokers[i] &= 14 and distincted_sorted_pokers[i] - lastPoker == 1:
sequence_num += 1
if sequence_num &= 5:
while sequence_num - j &= 5:
combs.append({'type':COMB_TYPE.STRIGHT, 'main':sequence_num - j, 'sub':distincted_sorted_pokers[i]})
sequence_num = 1
lastPoker = distincted_sorted_pokers[i]
return combs
# comb1先出,问后出的comb2是否能打过comb1
def can_comb2_beat_comb1(comb1, comb2):
if comb2['type'] == COMB_TYPE.PASS:
return False
if not comb1 or comb1['type'] == COMB_TYPE.PASS:
return True
if comb1['type'] == comb2['type']:
if comb1['type'] == COMB_TYPE.STRIGHT:
if comb1['main'] != comb2['main']:
return False
return comb2['sub'] & comb1['sub']
if comb1['main'] == comb2['main']:
return comb2['sub'] & comb1['sub']
return comb2['main'] & comb1['main']
elif comb2['type'] == COMB_TYPE.BOMB or comb2['type'] == COMB_TYPE.KING_PAIR:
return comb2['type'] & comb1['type']
return False
# 给定牌pokers,求打出手牌hand后的牌
def make_hand(pokers, hand):
poker_clone = pokers[:]
if hand['type'] == COMB_TYPE.SINGLE:
poker_clone.remove(hand['main'])
elif hand['type'] == COMB_TYPE.PAIR:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
elif hand['type'] == COMB_TYPE.TRIPLE:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
elif hand['type'] == COMB_TYPE.TRIPLE_ONE:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['sub'])
elif hand['type'] == COMB_TYPE.TRIPLE_TWO:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['sub'])
poker_clone.remove(hand['sub'])
elif hand['type'] == COMB_TYPE.FOURTH_TWO_ONES:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['sub1'])
poker_clone.remove(hand['sub2'])
elif hand['type'] == COMB_TYPE.FOURTH_TWO_PAIRS:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['sub1'])
poker_clone.remove(hand['sub1'])
poker_clone.remove(hand['sub2'])
poker_clone.remove(hand['sub2'])
elif hand['type'] == COMB_TYPE.STRIGHT:
for i in xrange(hand['sub'], hand['sub'] - hand['main'], -1):
poker_clone.remove(i)
elif hand['type'] == COMB_TYPE.BOMB:
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
poker_clone.remove(hand['main'])
elif hand['type'] == COMB_TYPE.KING_PAIR:
poker_clone.remove(16)
poker_clone.remove(17)
return poker_clone
# 模拟每次出牌,me_pokers为当前我的牌,enemy_pokers为对手的牌
# last_hand为上一手的手牌
def hand_out(me_pokers, enemy_pokers, last_hand, cache):
if not me_pokers:
return True
if not enemy_pokers:
return False
key = str(me_pokers) + str(enemy_pokers) + str(last_hand)
if key in cache:
return cache[key]
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):
cache[key] = True
return True
elif last_hand and hand['type'] == COMB_TYPE.PASS:
if not hand_out(enemy_pokers, me_pokers, None, cache):
cache[key] = True
return True
cache[key] = False
return False
# 是否允许三带一
ALLOW_THREE_ONE = True
# 是否允许三带二
ALLOW_THREE_TWO = False
# 是否允许四带二
ALLOW_FOUR_TWO = True
lord = [17,16,11,11,9,9,9]
farmer = [3,3,3,3,4,5,6,7,10,10,14,14,14,14]
print hand_out(farmer, lord, None, {})
# # 是否允许三带一
# ALLOW_THREE_ONE = False
# # 是否允许三带二
# ALLOW_THREE_TWO = False
# # 是否允许四带二
# ALLOW_FOUR_TWO = True
# lord = [14,14,11,11]
# farmer = [16,13,13,13,12,12,12,10,10,9,9,8,8]
# print hand_out(farmer, lord, None, {})斗地主残局 先出牌,自己:一对7一对5一个4一个3对家:一对2,一对5.一个4,一个3还有个对家一个3怎么解求高手。。自己先出牌&br&补充:当地主&br&
急啥呢?刚一个“急”字没法回答。
八窍俺已通了七窍,联盟可以采纳俺奖励一下么?
土地点头脑筋
答: 一兆即1M 30兆即30M 1M=1024k B是字节 30M也就是30xk 30楼主说的是30G吧。1G=1024M(兆) 一个MB等于...
答: 学习要学好,有三个重要因素:一是兴趣,二是技巧,三是毅力。
先培养孩子对数学的兴趣,比如在孩子解出难题的时候给予表扬,告诉孩子你真聪明、可以把数学学好等,树立孩...
答: 科学总体上分为两大类---自然科学与人文科学。
人文科学研究的是人与人之间的关系,人的思维与认识,其包括哲学、政治、经济、社会、文学、艺术等。这类学科既有自身的...
答: 中国人的数学理应比外国人好! 这是我的个人观点,这在于中国人对数字的发音是单音,因此,对数字的记忆较为简单,提高了学习数学的效率!
而科学的发展,往往受制于社会...
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415}

我要回帖

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

更多推荐

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

点击添加站长微信