斗地主基本算法思想

合集下载

斗地主牌力计算原理9分

斗地主牌力计算原理9分

斗地主牌力计算原理9分
(原创版)
目录
1.斗地主牌力计算的原理
2.牌力计算的重要性
3.如何进行牌力计算
4.牌力计算的实际应用
5.结论
正文
【1.斗地主牌力计算的原理】
斗地主是一款在我国广受欢迎的扑克牌游戏。

游戏中,玩家需要根据自己手中的牌型,计算出牌力,以决定出牌策略。

斗地主牌力计算的原理,主要是通过分析牌型、牌面大小、顺子、对子、炸弹等元素,综合评定一张牌或者一手牌的强度。

【2.牌力计算的重要性】
在斗地主游戏中,牌力计算的重要性不言而喻。

正确的牌力计算可以帮助玩家准确地评估自己的牌力,制定出合理的出牌策略,提高获胜的概率。

反之,如果牌力计算错误,可能会导致玩家出错牌,甚至输掉游戏。

【3.如何进行牌力计算】
牌力计算需要考虑以下几个方面:
首先,是牌型。

在斗地主中,牌型是决定牌力的重要因素。

一般来说,炸弹、王炸等牌型具有最高的牌力,其次是顺子、对子等。

其次,是牌面大小。

牌面大小也是影响牌力的一个因素,比如 A 牌的牌力大于 K 牌。

最后,是特殊规则。

在斗地主游戏中,有一些特殊的规则会影响牌力,比如春天、炸弹等。

【4.牌力计算的实际应用】
在实际的游戏中,牌力计算的应用非常广泛。

比如,当玩家需要决定是否要抢地主时,就需要精确地计算出自己的牌力,以便做出最佳的决策。

同样,在游戏的过程中,正确的牌力计算也能帮助玩家避免出错牌,提高获胜的概率。

【5.结论】
总的来说,斗地主牌力计算是一项重要的技能,它不仅能帮助玩家提高游戏水平,也能增加游戏的乐趣。

斗地主牌力计算原理9分

斗地主牌力计算原理9分

斗地主牌力计算原理9分摘要:1.斗地主牌力计算的概述2.牌力计算的基本原理3.牌力计算的具体方法4.牌力计算的实战应用5.总结正文:【斗地主牌力计算的概述】斗地主是一款非常受欢迎的扑克牌游戏,其规则丰富,策略性强。

在游戏中,正确的牌力计算是决定胜负的关键因素之一。

本文将对斗地主牌力计算的原理进行详细的介绍,帮助大家更好地掌握这一技巧。

【牌力计算的基本原理】在斗地主中,牌力计算的基本原理主要有以下几点:1.牌点大小:牌点从大到小分别为A、K、Q、J、10、9、8、7、6、5、4、3、2。

在计算牌力时,首先要将手中的牌按照牌点大小进行排序。

2.牌型大小:牌型从大到小分别为炸弹、王炸、顺子、连对、对子、单张。

在计算牌力时,需要将手中的牌型进行比较,并根据牌型大小来判断牌力。

3.牌点与牌型的结合:在实际游戏中,我们需要将牌点与牌型结合起来进行计算,如一个炸弹的牌力为8 分,一个顺子的牌力为3 分。

【牌力计算的具体方法】在实际游戏中,我们可以采用如下方法来计算牌力:1.计算单张牌的牌力:根据牌点大小,将单张牌分为9 分、8 分、7 分、6 分、5 分、4 分、3 分、2 分、1 分九个等级。

2.计算对子的牌力:将所有对子按照牌点大小进行排序,分别赋予相应的分数。

3.计算顺子的牌力:将所有顺子按照牌点大小进行排序,分别赋予相应的分数。

4.计算连对的牌力:将所有连对按照牌点大小进行排序,分别赋予相应的分数。

5.计算炸弹的牌力:将所有炸弹按照牌点大小进行排序,分别赋予相应的分数。

6.计算王炸的牌力:将所有王炸按照牌点大小进行排序,分别赋予相应的分数。

【牌力计算的实战应用】在实际游戏中,我们需要根据手中的牌型和牌点,结合对手可能持有的牌型和牌点,来进行牌力计算。

通过牌力计算,我们可以更好地判断自己的牌是否足够强大,从而制定出更加合理的策略。

【总结】总之,斗地主牌力计算是一项非常重要的技能,掌握好这一技能可以帮助我们在游戏中更加游刃有余。

斗地主全套技术讲解

斗地主全套技术讲解

斗地主全套技术分析一〕1、将手上的牌打成单双不过〔单双不过指人家不管打单还是双都是你大〕。

单双不过很重要,要多考虑。

如对A、2、单自己上手,如打对A,是错误的。

应该打单,因为可排除对方用对2接打对A后全把对、连、三带打完。

2、K或Q + 一对先打K/Q报双〔别人会误以为你会用2收回去,便会上2打对子,正好投起来〕;单2、对、单。

别人打出比你单大的牌,那么不用考虑马上用2打然后发单报双。

3、在地主上一家如双王没有走自己剩三牌有一2另外一对或两单,都应该先打2。

〔除非地主根本上没有过单牌才能发最小单〕。

4、两个人配合时,只要算准自己手上能打完就自己打不要放任何人。

如果自己拿到了炸弹且在地主下家,就要留一手小单、对。

如果在地主上家就要留小对子,好在关键时候炸掉放牌。

5、打牌七分运气三分级别,斗的是心情注意观察打牌的人的心理变化,不要树敌,打牌不要太狂了。

〔有的人毕竟比拟小心眼的,你打的太狂了或者言语伤人,说不定人家拿着好牌也不抓就要整你呢,明枪易挡,暗箭难防〕。

6、被忽略的算牌关键:算准地主单牌过到几;地主下家单牌过到几;地主手上没有过的小对〔地主手上有小对子没有过,那就可以报双〔哪怕是在地主上一家〕〕;7、打牌要注意抢先上手,很多时候输赢就在于关键的一牌。

是哪呢?〔枪先上手指的就是你比别人先出那2、也就是你手上多了一单牌,但你不过单而打2,上手后改打对,如果你不先上2,人家上2就打完了,高手应该看的懂的:〕〕,8、拿到双王,牌不好时一定要拆开来打而且要拆的及时。

建议决定拆王时,对方上2、不用考虑马上打大王,然后打一手别人要不起的关牌,然后再打对,这时别人多半会以为你会用一对收回去然后打完了所以他会浪费一大对封住你然后发单,那时你要停顿后过单、别人上2你如果还打不赢便停顿会后不要,多半别人还会发单来,那你就可能赢了。

9、地主手上无大牌,外面可能有炸弹时,要先打脱手牌手上打的越少越好,〔但手上剩下的牌很小也可打偷跑牌,剩很长一串,一次跑掉〕。

斗地主规则范文

斗地主规则范文

斗地主规则范文斗地主是一种普遍流行的扑克牌游戏,也是中国常见的棋牌游戏之一、游戏的目标是通过打出手中的牌尽量先出完牌的人获得胜利。

斗地主有其独特的规则和玩法,下面是斗地主的详细规则。

一、基本概念和组成斗地主使用一副扑克牌,除去大小王,共计52张牌。

游戏通过打出牌获得分数,并且每局游戏结束后,玩家的牌会被计分。

斗地主游戏一般3个人进行,每个人分发17张牌,剩下的3张牌放到中间作为底牌。

二、牌的大小在斗地主中,牌的大小有一定的规则,大家需要清楚这些规则以便在游戏中能够很好地判断牌的优劣。

1.单牌:从大到小依次为大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、32.对子:两张相同点数的牌,如:443.三张:三张相同点数的牌,如:7774.三带一:三张相同点数的牌加上一张单牌,如:777+35.三带二:三张相同点数的牌加上一对,如:777+449.炸弹:四张同点数的牌,如:AAAA。

10.王炸:一对王牌(大王和小王),最大的组合。

三、发牌和叫地主游戏开始时,地主是通过抢地主的形式来确定的。

地主可以得到底牌并且有额外的权利。

先不抢地主的位置是按逆时针的顺序依次进行的。

发牌完毕后,首先由地主的下家开始叫地主。

他可以选择抢地主,这样就成为地主,并且得到底牌;如果不抢,轮到下一个玩家进行叫地主,直到有人抢地主为止。

如果没有人抢地主,最后叫地主的人就成为地主。

四、游戏流程1.打出牌型:游戏开始后,地主首先出牌,然后逆时针轮到其他玩家出牌,每位玩家需要打出比上家大的牌,如果没有合适的牌可以出,玩家可以选择不出,以此继续等待下一轮的牌。

2.倍数和加倍:玩家在游戏中可以选择翻倍,翻倍后下一位玩家需要出更大的牌才能继续游戏。

倍数的加倍可以增加游戏的刺激性,但也带来了风险。

3.游戏结束和计分:当一个玩家打出所有手中的牌后,游戏就结束了。

地主和农民的一方会根据打出的牌和底牌来计算分数,分数最高的玩家获得胜利。

五、特殊牌型和规则斗地主中还有一些特殊的牌型和规则,可以极大地增加游戏的乐趣和挑战。

斗地主算法的设计与实现--如何判断一手牌的类型(单,对子,三不带,三带一,四代二等)

斗地主算法的设计与实现--如何判断一手牌的类型(单,对子,三不带,三带一,四代二等)

斗地主算法的设计与实现--如何判断一手牌的类型(单,对子,三不带,三带一,四代二等)斗地主游戏算法牌型项目研发本篇主要讲解斗地主中如何判断一手牌的牌型。

牌型火箭:即双王(大王和小王),最大的牌。

炸弹:四张点数相同的牌,如:7777。

单牌:任意一张单牌。

对牌:任意两张点数相同的牌。

三张:任意三张点数相同的牌,如888。

三带一:点数相同的三张牌+一张单牌或一对牌。

如:333+6 或444+99。

单顺:任意五张或五张以上点数相连的牌,如:45678或78910JQK。

不包括2和双王。

双顺:三对或更多的连续对牌,如:334455、7788991010JJ。

不包括2 点和双王。

三顺:二个或更多的连续三张牌,如:333444 、555666777888。

不包括2 点和双王。

飞机带翅膀:三顺+同数量的单牌或同数量的对牌。

如:444555+79 或333444555+7799JJ四带二:四张牌+两手牌。

(注意:四带二不是炸弹)。

如:5555+3+8 或4444+55+77 。

友情提示:本篇是接着上1篇讲述的,建议先看看上1篇一张牌Card的构造过程。

斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌/*** 游戏规则牌的类型共有10种:** 1. 单2.对子3.3不带4.3带1 5.炸弹6.顺子7.4带2 8.连队9.飞机10.对王** @author LeiWen@,,* /FansUnion**/1.单1/**2 * 判断牌是否为单3 *4 * @param myCards5 * 牌的集合6 * @return 如果为单,返回true;否则,返回false。

7 */8public static boolean isDan(List<Card> myCards) { 9// 默认不是单10boolean flag = false;11if (myCards != null && myCards.size() == 1) {12 flag = true;13 }14return flag;15 }2.对子16/**17 * 判断牌是否为对子18 *19 * @param myCards20 * 牌的集合21 * @return 如果为对子,返回true;否则,返回false。

斗地主牌力计算原理9分

斗地主牌力计算原理9分

斗地主牌力计算原理9分摘要:1.斗地主牌力计算原理简介2.牌力计算的基本方法3.牌型与牌力关系4.实战中如何运用牌力计算原理5.总结正文:斗地主牌力计算原理是玩家在游戏中判断自己手牌实力,制定合理策略的关键。

通过了解牌力计算原理,玩家可以更好地把握游戏节奏,提高胜率。

1.斗地主牌力计算原理简介斗地主牌力计算原理主要依据的是牌型和牌力之间的关系。

牌力分为基本牌力和额外牌力。

基本牌力主要取决于牌的大小,即炸弹、王炸等;额外牌力包括顺子、连对等组合牌型。

牌力计算原理的核心思想是通过计算牌型分值,综合评估手牌实力。

2.牌力计算的基本方法牌力计算的基本方法是将手牌中的牌型分值相加。

牌型分值根据牌的大小和组合情况而定。

例如,一个炸弹的分值是8 分,一个顺子的分值是1 分。

在计算牌力时,需要考虑手牌中所有牌型的分值总和。

3.牌型与牌力关系牌型与牌力之间存在密切关系。

牌力主要由基本牌力和额外牌力组成。

基本牌力包括炸弹、王炸等;额外牌力包括顺子、连对等组合牌型。

在实际游戏中,玩家需要根据手牌情况,合理搭配牌型,发挥最大牌力。

4.实战中如何运用牌力计算原理在实战中,玩家需要根据牌力计算原理,分析自己手牌的实力,制定相应的出牌策略。

例如,在牌力占优的情况下,玩家可以采取进攻策略,逼迫对手出牌;在牌力处于劣势时,玩家应采取防守策略,尽量保留牌力,等待时机。

5.总结斗地主牌力计算原理是玩家在游戏中判断自己手牌实力,制定合理策略的关键。

通过了解牌力计算原理,玩家可以更好地把握游戏节奏,提高胜率。

斗地主基本算法思想

斗地主基本算法思想

三人斗地主算法基本思想一、牌型1 火箭:大小王在一起的牌型,即双王牌,此牌型最大,什么牌型都可以打;2 炸弹:相同点数的四张牌在一起的牌型,比如四条A;除火箭外,它可以打任何牌型,炸弹对炸弹时,要比大小;3 单支一手牌:单张牌,如一支3;4 对子一手牌:相同点数的两张牌在一起的牌型,比如55;5 三条:相同点数的三张牌在一起的牌型,比如三条4;6 三带一手:三条+一手牌的牌型,比如AAA+9或AAA+77;11 四带二:四条+两手牌;比如AAAA+7+9或9999+33+55;二、牌型分析1 单顺的确定a 选取五连,先取出最小的一个五连,再在剩余的牌中取出最小的一个五连,依此类推,直到没有五连为止;b 扩展五连,将剩余的牌与已经取出的牌进行比对,如果某张剩余的牌与已知的连牌能组成更大的连牌,则将其合并;一直到无法合并为止;c 合并连牌,如果某两组连牌能无缝连接成更大的连牌,则将其合并成一组;经过上述选取、扩展和合并,则将一手牌中的所有连牌提取出来了,举例如下:第一步,选取出34567,678910两个连牌组;剩余的牌还有79JQKA2第二步,剩余的JQKA能和678910组成新的连牌678910JQKA;第三步,已知的两个连牌组不能合并成新的、更大的连牌组,则这手牌就被分成了34567、678910JQKA两个连牌组和7、9、2三张单牌;2 双顺的确定将一副牌中所有的对子检测出来,然后将对子排序,按照检测三连的方式可以将所有的双顺都提取出来;3 三条的确定一副牌中的所有三条都能比较方便地提取出来;4 三顺的确定在三条的基础上进行比较,如果有相连的三条,则将其合并成尽可能大的三顺;5 炸弹的确定所有的四头都能很方便地确定;6 火箭的确定只要牌张包含大小王,就将其组成火箭;7 牌张的分类方法a 先确定火箭:判断是否有大小王;b 再确定炸弹:判明是否有四头;c 再确定三条:在除了炸弹以外的牌中判断是否包含三条;f 再确定双顺:首先,如果两单顺牌完全重合,则将其重新组合成双顺;其次,在除炸弹、三顺、三条、单顺以外的牌中检测是否包含双顺;如果有,将其提取出来;g 再确定对子:在炸弹、三顺、三条、连牌、双顺以外的牌中检测是否存在对子,如果存在将其提取出来;h 再确定单牌:除了炸弹、三顺、三条、连牌、双顺、对子以外的所有牌张都是单牌;8 对子的确定参见上一节的“再确定对子”;9 单牌的确定参见上一节的“再确定单牌”;三、一手牌的手数分析通过对上面牌型的计算,可以容易得出这手牌需要9手才能出完,因此这手牌的手数就是9;四、绝对手数和相对手数的概念因为在斗地主游戏中存在火箭或炸弹的可能,所以理论上只有火箭才不可能被别人压住,所以,可以不考虑相对手数的概念;以后都简称手数;五、叫牌原则分析因为在斗地主中,火箭、炸弹、王和2可以认为是大牌,所以叫牌需要按照这些牌的多少来判断;下面是一个简单的原则:假定火箭为8分,炸弹为6分,大王4分,小王3分,一个2为2分,则当分数大于等于7分时叫三倍;大于等于5分时叫二倍;大于等于3分时叫一倍;小于三分不叫;六、出牌的一般原则1 出牌的原则一般按照从小到大的原则,即首先出包含最小牌的组合单牌、对子、双顺、连牌、三顺、三条等,炸弹、火箭不包括在内;2 三条的出牌原则:因为三条出牌可以带一张单牌或一个对子,所以在出三条时需要检测是否有单牌,如果有,则带一张最小的单牌,如果没有,则再检测是否存在对子,如果有,则跟一个最小的对子,如果单牌和对子都没有,则出三条; 在带牌时,除非是只剩两手牌,否则不能带王或2;3 三顺的出牌原则:因为三顺出牌可以带两张或更多单牌或两个或更多对子,所以与出三条一样,需要检测是否有单牌或对子;如果有足够多的单牌或对子, 则将其带出;如果有单牌,但没有足够多的单牌,则检查是否有6连以上的连牌,如果有将连牌的最小张数当作单牌带出;如果有对子,但没有足够多的对子,则检查是否有4连以上的双顺,如果有将双顺的最小对子当作对子带出; 在带牌时,除非是只剩两手牌,否则不能带王或2;4 连牌的出牌原则:直接出;5 双顺的出牌原则:直接出;6 对子的出牌原则:因为对子可以用三条、三顺等带出,所以在出对子时,应该先检测一下三条+三顺中三条的数量,如果所有三条数量 <= 对子+单牌数量总和-2时,出对子,否则出三带2等等;7 单牌的出牌原则:因为单牌可以用三条、三顺等带出,所以在出单牌时,应该先检测一下三条+三顺中三条的数量,如果所有三条数量 <= 对子+单牌数量总和-2时,出单牌,否则出三带1等等;七、跟牌的一般原则1 如果手中有独立的,与所出的牌一样牌型的牌时,先跟之;2 2可以作为单牌、对子、三条等形式跟出;3 当手中没有相应牌跟时,如果是本方人员出的牌,可以不跟,如果是对方出的牌,则必须拆牌跟,如果再没有,出炸弹或火箭,否则PASS;4 如果手中的牌除了炸弹;火箭外还剩一手牌,则如果牌型相符,则先跟之,否则炸之;5 单牌的跟牌原则:如果手中有单牌,则跟之,否则拆2跟之,否则拆对牌跟之,否则拆6连以上的单顺顶张跟之,否则拆三条跟之,否则拆三顺跟之,否则拆5连单顺跟之,否则拆双顺跟之,否则炸之,否则PASS;6 对牌的根牌原则:如果手中有对子,则跟之,否则拆4连以上的双顺顶张跟之,否则拆三条跟之,否则拆双顺跟之,否则拆三顺跟之,否则炸之,否则PASS;7 三条、三带1、三带2等牌的根牌原则:如果手中有相同牌型的牌则跟之,否则拆三顺跟之,否则炸之,否则PASS;注意,只有在手中牌在出了以后还剩一手牌时,或直接出完的情况下,才允许带王或2; 在没有足够牌带的情况下,参照单牌;对子的拆牌原则进行拆牌处理;8 三顺及三顺带牌的根牌原则:如果有相应的牌型,则跟之,否则可以将大的三顺拆成小的三顺跟之,否则炸之,否则PASS;注意,只有在手中牌在出了以后还剩一手牌时,或直接出完的情况下,才允许带王或2; 在没有足够牌带的情况下,参照单牌;对子的拆牌原则进行拆牌处理;9 连牌的跟牌原则:如果有相应的牌型,则跟之,否则拆相同张数的双顺,否则拆相同张数的三顺,否则拆不同张数的连牌,否则拆不同张数的双顺,否则拆不同张数的三顺,否则炸之,否则PASS;10 双顺的跟牌原则:有相同牌型的牌,则跟之,否则拆不同张数的双顺,否则拆不同张数的三顺,否则拆相同张数的三顺,否则炸之,否则PASS;11 炸弹的跟牌原则:有超过所出炸弹的炸弹,或有火箭,则炸之,否则PASS;12 炸弹带两手牌的跟牌原则:如果有炸弹,则炸之,否则PASS;八、打牌原则解析1 坐庄打法:因为坐庄的只是自己一个人,不存在配合问题,所以一般按照前面的原则出牌即可;a 在出牌时,如果偏家有一个人只剩一张牌时,尽量不出单牌,否则单牌由大到小出;b 在跟牌时,如果偏家有一个人只剩一张牌时,跟手中最大的牌;2 偏家打法:偏家因为牵涉到配合问题,所以打法有一些不同;a 在出牌时,如果是庄家的上家,且庄家只剩一张牌时,尽量不出单牌,否则单牌由大到小出;b 在跟牌时,如果是庄家的上家,且庄家只剩一张牌时,跟手中最大的牌;c 当一个偏家打出的是单牌时,一般情况下能跟就跟;如果手中必须跟2或以上的牌时,选择PASS;d 当一个偏家打出的是对子时,一般情况下能跟就跟;如果手中必须跟AA或以上的牌时,选择PASS;e 如果一个偏家打出的牌是除了单牌及对子以外的牌型,则选择PASS;f 如果处在下家的偏家只剩一张牌时,在出牌时出手中最小的牌;跟牌还按照一般的原则;五子棋算法探讨转贴近来随着计算机的快速发展,各种棋类游戏被纷纷请进了电脑,使得那些喜爱下棋,又常常苦于没有对手的棋迷们能随时过足棋瘾;而且这类软件个个水平颇高,大有与人脑分庭抗礼之势;其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱;而我们今天将向大家介绍的是五子棋的算法; 当我们与电脑对战时,您知道这些软件是怎样象人脑一样进行思考的吗总的来说我们假定您熟悉五子棋的基本规则,要让电脑知道该在哪一点下子,就要根据盘面的形势,为每一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋型如:“冲四”、“活三”等,然后通览全盘选出最重要的一点,这便是最基本的算法;当然,仅靠当前盘面进行判断是远远不够的,这样下棋很容易掉进玩家设下的陷阱,因为它没有考虑以后的变化;所以在此基础上我们加入递归调用,即:在电脑中预测出今后几步的各种走法,以便作出最佳选择,这也是我们下棋时常说的“想了几步”;如此一来您的程序便具有一定的水平了;什么不信过来试试吧总体思路弄清之后,下面进行具体讨论:一:先来看看数据结构,我们需要哪些变量首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个 1515的二维数组 Table1515 1515是五子棋棋盘的大小,数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础;在此之后还要为电脑和玩家双方各建立一张棋型表Computer15154和Player15154,用来存放棋型数据,就是刚才所说的重要程度,比如用‘20’代表“冲四”的点,用‘15’代表“活三”的点,那么在计算重要性时,就可以根据20>15得出前者比后者重要,下子时电脑便会自动选择“冲四”的点;那为什么棋型表要使用三维数组呢因为棋盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型,所以一个点总共有4个记录;这样做的另一个好处是可以轻易判断出复合棋型,例如:如果同一点上有2个‘15’就是双三、有一个‘15’和一个‘20’就是四三;怎么样3个数组构成了程序的基本数据骨架,今后只要再加入一些辅助变量便可以应付自如了;应该不会太难吧OK有了这么多有用的数据,我们就可以深入到程序的流程中去了; 二:程序流程我们主要讨论五子棋的核心算法,即:部分,而其他像图形显示、键盘鼠标控制等,因较为简单,所以就不作过多介绍了; 首先,请仔细阅读图1:我们看到本程序由六个基本功能模块构成,各模块的详细分析如下:1 初始化:首先,建立盘面数组Table1515、对战双方的棋型表Computer15154和Player15154 并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘;2 主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色;3 玩家下子:当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在Table1515数组的相应地方记录‘2’,以表明该子是玩家下的;4 盘面分析填写棋型表:本程序核心模块之一,算法的根本依据其具体实现方法如下:您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点;但是,电脑不会像人一样分析问题,要让它知道哪是“活三”、哪是“冲四”,就得在棋盘上逐点计算,一步一步的教它; 先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找;左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computerxyn中就行了x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向;而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了;然后再用同样的方法填写对方棋型表; 注意:所有棋型的编号都要事先定义好,越重要的号数越大 OK 怎么样有点累了吧不过千万别泄气因为好戏还在后头; Let’s go5 电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了;其中最简单的计算方法,就是遍历棋型表Computer1515 4和Player15154找出其中数值最大的一点,在该点下子即可;但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病; 要解决这个问题,我们引入‘今后几步预测法’,具体方法是这样的:首先, 让电脑分析一个可能的点,如果在这儿下子将会形成对手不得不防守的棋型例如:‘冲四’、‘活三’;那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测;这时再调用模块4对预测后的棋进行盘面分析,如果出现了‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了当然对黑棋而言‘双三’、‘双四’是禁手,另当别论;否则照同样的方法向下分析,就可预测出第二步、第三步…… 等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能侍机发动反击,何乐而不为呢但是必须告诉大家的是:预测法的运算量相当之大,据我的经验,用Pentium-100预测3步的走法平均需要15秒以上时间,所以建议预测量在5步以内;可别小瞧了这5步,有时它甚至会走出让您拍手叫绝的妙着呢6 胜负判断:务须多言,某方形成五子连即获胜;若黑棋走出‘双三’、‘双四’或长连即以禁手判负; 到现在为止,整个五子棋软件就基本完成了,其水平大约在中级上下;当然,这种算法并不是最好的,但我相信它的基本思路是正确的;。

欢乐斗地主算牌的奥秘文字详解

欢乐斗地主算牌的奥秘文字详解

欢乐斗地主算牌的奥秘文字详解欢乐斗地主算牌的奥秘,上次我们讲过斗地主中有记牌,算,猜牌,拆牌,防牌,传牌,顶牌等众多技巧,今天小编就带大家一起来学习算一技。

算牌是指通过自己手中的牌以及别人出的牌来揣测对家手中可能会有什么牌。

算牌是建立在已经记好牌的基础上进行的,对于经验老道的玩家来说,算牌是取得胜局的一门重要技巧。

一副牌中,一共有54张牌,而自己手中17张牌和3张底牌,剩下的34张牌就是我们需要算的牌,自己的牌型是什么,那么外面的牌型一般也差不多。

建立在此基础上去进行算牌,就变得非常易懂啦。

首先是算炸弹。

一副牌拿到手中,应该先将牌按顺序列出,然后找出手中所缺之牌(四张中一张都没有的)并牢记,在没出牌之前,这些都是有可能成为炸弹的,直至出牌后再一一排除,尤其得注意大小王,因为他们是最易成炸且威力最大,小炸弹疏忽忘记可以原谅,王炸可就范不得了。

接着要算大牌。

大牌一般指王到K,有时也只算到A,如果自己大牌多也可以多算点,比如自己有对2那么有人出了个2,外面自然还有一个2,在别人走2的时候便在心里想还有一个2,并可以大致分析一下剩下的2大概在谁手里。

最后是算剩牌。

当手中剩4-7张牌时便属于剩牌,此时应当根据几种牌型去进行计算,玩得深的玩家很容易想到几张牌对应几种牌型。

剩牌的计算难度较高,只要考虑全面,做到万无一失也能稳中求胜。

如果算牌上有难度的话,建议在“找乐助手”中玩,这里免费的记牌器肯定会帮到你。

算牌的几种例子:假如你一开始出了一张3,下家很爽快的出了一张4,如果你手里没有4的话,你的上家手里一定有三个4;如果你出A,别人直接出小王,那么,外面有对2的可能性是极高的。

一副牌那么多,时间又那么短暂,要完全记好牌并计算难度很高,所以算牌要领在于多分析、多练习,并在实际操作中慢慢领悟算牌的奥秘。

最新斗地主算牌原理

最新斗地主算牌原理

精品资料
斗地主算牌原理
........................................
斗地主算牌原理
第一个原理:54张牌,打一张明一张。

算牌原理为:一局牌里,只有54张牌。

两个王、四个2,其它一样为四个,出一张就少一张。

打一张就明一张。

任何一局牌:三人斗地主自己看得到的牌为:
一是自己的牌
二是叫的底牌
自己的牌为17张
底牌为3张
所以明着的牌都有20张,还有34张在外面。

基于这个情况,让算牌就成了可能。

第二个原理:随机平均原理
牌型:自己的牌型是什么,那么外面的牌型一般也差不多。

这种就是在剖除运气因素了,虽然运气是斗地主最大的变因,不过理论上来说,没人会相信自己比对面的运气差吧。

所以看到手上的牌型,也可以相应的算对面的牌,虽然失误比较多,不过再根据场上的情况随机应变就是了。

第三个原理:任何人都想赢牌,任何人都想尽快将牌出完
打出来的牌,都回想办法收回去或者顺着过。

如地主第一手打单牌,表示地主手上还有单牌,同时20张牌都有可能拆成单牌。

所以,地主打单时,根据自己的牌型。

自己上手后考虑给牌换个方向。

地主打单,你就打双,或者连子,三带等。

第四个原理:牌型原理
地主最多可以出20手单牌
10手对子
5手3带1
5手炸弹
4手连子
农民最多可以出17手单牌
8手对子
4手3带1
4手炸弹
3手连子
常见牌型:
5张左右的单牌+3到6手对子+1两手连子+1两手三带,同时里面包含3个主。

斗地主游戏之洗牌算法

斗地主游戏之洗牌算法

⽃地主游戏之洗牌算法 ⽃地主之类的游戏⼤家都玩过,有没有想过,游戏是如何给我们发牌的呢? 我们先将问题做⼀下抽象:我们将扑克牌抽象为数字,那么洗牌的问题就转化为给定⼀个长度为54的整型数列,请将其顺序随机打乱,保证每个数出现在任意⼀个位置的概率相同。

朴素的想法——抽牌每次随机从牌堆中选⼀个位置抽牌,如果该位置的牌已被抽⾛,则继续随机选取位置,直到将所有牌抽完。

显然,这种做法时间复杂度很⾼。

那么不妨稍微优化下。

每次随机从牌堆中选⼀个位置抽牌,然后将该位置后⾯的牌依次向前移动⼀个位置,下⼀次从新牌堆(数量-1)中抽取,循环到抽完所有牌为⽌。

这样也能完成要求,单这样的做法,对于数据规模⽐较⼩的数据可以接受,但数据量⼀旦变⼤,反⽽不如不优化的算法效率⾼。

我们还得继续想办法优化。

每次随机从牌堆中选⼀个位置抽牌,然后将最后⼀张牌移动到被选择的位置,下⼀次从新牌堆(数量-1)中抽取,循环到抽完所有牌为⽌。

这样优化完以后,时间复杂度降低到了O(N),应该能满⾜要求了。

经典的洗牌算法——交换 上⾯的算法需要额外的辅助空间,那么能不能就地洗牌呢?答案当然是可以的。

还是每次随机⼀个位置,然后将该位置上的牌与 i 位置上的牌交换,直到 i 遍历玩所有位置为⽌。

1void MySwap(int &x, int &y)2 {3int temp = x;4 x = y;5 y = temp;6 }78void Shuffle(int n)9 {10for(int i=n-1; i>=1; i--)11 {12 MySwap(num[i], num[rand()%(i+1)]);13 }14 }洗牌算法 该洗牌算法的时间复杂度为O(N),空间复杂度为O(N)。

斗地主的技术与诀窍

斗地主的技术与诀窍

斗地主的技术与诀窍一、记牌。

记牌与算牌是斗地主的基本功。

最基本的,是记住自己手里没有的牌,时刻关注别人的出牌情况,记住是否出过这些牌,由此可以推算出别人手里有没有炸弹。

记住地主是否出过亮在牌面上的三张底牌,可以判断出地主手里的牌型。

记住别人手里还有几张王、2、A,并根据每个人的出牌情况推算出这些牌分别在哪一家的手里,有助于你判断是否跟牌顶牌。

记住10和7的出牌情况,可以判断别人手里没有顺子。

二、叫牌。

一定要切记,不是什么牌都可以叫地主的,很多牌友就因为乱叫牌,而让别人恨得咬牙切齿。

什么样的牌才可以叫地主呢?大体上有以下3种情况:第一种情况:手上有炸,基本上是要叫地主的(除非你没王没2)。

第二种情况:手上有大王,基本上也要叫的(除非你没2,而且缺牌很多,即便是拿了3张底牌,也基本连不起来)。

第三种情况:手上有3个2和一对A,也是可以叫的(这个有点危险,因为对手可能有王炸)。

三、拆牌。

一副牌,起手后首先要考虑的是如何拆牌,合理的拆牌可以大幅提高胜率。

由于牌局的变化,拆牌并不是一成不变的,但不管怎么拆也就那两三种而已,否则就成了一把散牌了。

在出牌过程中,也可以大体判断出别人手里的牌。

拆牌一般遵循大而少的原则。

“大”是指牌面要大,大的牌面可以尽可能地去压别人的牌;“少”是指牌路要少,要在最少的路数内让自己的牌走完。

在想出顺子的时候,有时候可能要拆对子。

需要注意的是,六张以下的顺子最多拆两对,八张以下的顺子最多拆3个对子。

如果要拆的对子太多,一直拆牌就不划算了,切记拆对子最多不能超过3个。

四、探牌。

探牌是指用手上的牌去探路,探出对方手中有哪些大牌。

举个简单的例子,如果你出小对的时候,对手不要,说明他手里要么是对子很大,要么是不想拆三张,要么就是有长顺。

这时,你就可以尽情地朝着对手的软肋打了。

如果你出一张小单牌,对手直接用大牌压住,说明他手里的牌很顺,所以迫切想要出牌权。

这时如果你手里有更大的牌,一定要压他。

斗地主中的数学知识

斗地主中的数学知识

斗地主中涉及的数学知识
1.概率论:概率论在斗地主游戏中非常重要。

玩家需要根据已知的牌和剩余的牌的概率来推测其他玩家手中可能的牌型。

通过使用概率计算,可以对对手的手牌进行估计,从而更好地决定是否出牌。

例如,在扑克牌中,玩家手中有一张3,剩下的牌中还有3张A,那么玩家猜测其他玩家手中的A的概率就是3/49,即3张A剩下的牌数与总共剩下的牌数的比例。

2.组合数学:斗地主中的牌型有很多种,如顺子、连对、飞机等。

玩家需要通过组合数学的知识,计算不同牌型出现的概率。

例如,在剩下的牌中,有3个2、3个3、4个4,而玩家手中有一对2,他可以计算出剩下的牌中能够组成三个2的概率是3/47*2/46*1/45≈0.0027,即约0.27%。

这样,玩家就可以根据这个概率来判断是否出牌。

3.算术运算:斗地主中需要进行一些基本的算术运算,如计算牌的大小、计算得分等。

例如,在斗地主中,不同牌型有不同的大小。

玩家需要通过对牌的点数的比较来判断牌的大小,如单牌的大小是按照点数来比较。

4.策略与博弈论:斗地主是一个策略性的游戏,玩家需要根据当前的局势和对手的策略来制定自己的策略。

博弈论
可以提供关于最优策略的理论指导。

例如,在斗地主中,玩家需要根据当前自己的手牌、地主位置、地主已出的牌等信息,制定出牌的策略。

博弈论可以提供一些关于最优出牌策略的指导,例如,出大牌压制对手、尽量保留低于对手的牌等。

这些是斗地主游戏中与数学相关的知识,掌握这些知识可以帮助玩家更好地分析局势、制定策略,提高胜率。

斗地主牌力计算原理9分

斗地主牌力计算原理9分

斗地主牌力计算原理9分斗地主牌力计算原理在标准的斗地主规则中,每张牌都有一定的牌力,总牌力是所有出牌的总和。

一般来说,牌力越大,表明牌越有价值。

以下是斗地主常见牌型的牌力计算原理(以9分为例):1. 单牌:2-7分,根据牌面大小递增。

2. 对子:16-39分,根据对子点数递增。

例如,对2为16分,对A为39分。

3. 三张牌:20-49分,根据三张牌的点数递增。

例如,三个2为20分,三个A为49分。

4. 三带一:24-59分,根据三张牌的点数递增。

例如,三个2带一张3为24分,三个A带一张2为59分。

5. 三带二:30-64分,根据三张牌的点数递增。

例如,三个2带一对2为30分,三个A带一对J为64分。

6. 炸弹:82分,所有炸弹都是82分。

7. 连对:48分起步,根据连对的长度递增。

例如,三对2为48分,七对A为80分。

8. 顺子:72分起步,根据顺子的长度递增。

例如,五张连续的牌为72分,十张连续的牌为92分。

9. 飞机:96分起步,根据飞机的长度递增。

例如,飞机带两单张为96分,飞机带两对子为125分。

10. 四带二:90-98分,根据四张牌的点数递增。

例如,四个2带两单张为90分,四个A带两对子为98分。

总牌力计算:将每一手牌的牌力相加,根据出牌的情况来计算总牌力。

通常来说,拥有相同点数和牌型的牌,越大的牌力越高。

根据总牌力的大小,可以判断出牌的优劣。

需要注意的是,牌力计算原理只是一种参考方法,具体的牌力计算方式可能会因游戏规则或者玩家自定义而有所不同。

斗地主的心算、技法

斗地主的心算、技法

斗地主的心算、技法1.炸弹在游戏中玩家所受炸弹之苦,相信大家深有体会,也颇有感触。

不管你是怎样的水平,要算牌,算炸弹都是第一步。

拿上牌,在出之前,应该将手中的牌按顺序列出,然后找出手中所缺之牌(4张中一张没有的)并牢记,在没出牌之前,这些都是有可能成为炸弹的,直至出牌后再一一排除。

尤其得注意大小王,因为他们是最易成炸且威力最大,其它的可以疏忽忘记,唯王不可。

例:自己无2,出A见小王,则极可能有2222。

2.算头子六张头子中谁出过也应该牢记,通过手中所拿的头子和所出的牌就可以基本得到剩余头子的信息。

例1:自己地主大+22先手出A下家出小,则必有一家22成对。

例2:自己地主大+2先手出单下家出2,则极可能上家有22。

3.算牌对于斗地主,不光是要记牌,还要有一定的对对手手中牌的判断能力,而记牌,除了上提到的牢记头子和自己手中的缺牌之外,还有一些牌,是属于菜鸟进阶必记之牌。

既然说到这里,咱们就来对记牌分个种类:A类——任何人都必须记住的:头子,自己的缺牌,890JQA类就不再谈了,但是为什么多了个7呢,其实7是很重要的一张牌,至于为什么下面大家自然会体会到的。

C类暂不考虑,一是不容易记住,二是就算记住了其中的变数也太多,不容易算牌。

对于B类,可以简单分析一下:B类中34A是最容易记住的,56K相对要困难一点,但是也要尽力记。

对于这几张牌主要列出以下几个例子(均以自己当地主):例1:自己无3,下家先手,出3。

则上家极有可能为333(若下家无带3之顺),肯定至少有33(若下家有带3之顺);此时若四个4都已出完,则,下家必无带3之顺,可确定上家为333。

(此情况小牌均相似)故:若自己有三带或不大的对子,都不必太着急,关系不太厉害的时候大可让上家占牌,他一出自己也可放走。

例2:自己有7777或6666。

此时断掉了带3的小顺,则那两家极可能为345之单、双,若345中也有炸弹,那就自认倒霉吧。

故,就算此时牌只是中等也可根据情况要一把,当然,若自己不想要的话,打别人的地主就更容易了。

斗地主技巧

斗地主技巧

地主与农民角色定位
地主
拥有优先出牌权,需要对抗两位 农民,先出完牌的一方获胜。
农民
两人为一方,配合对抗地主,任 一人先出完牌即该方获胜。
基本出牌策略
连对
至少三对(含三对)以上连续 的对子,如334455。
炸弹
四张相同的牌,如4444,可压 过除王牌外的任何牌型。
单牌
按大小顺序出牌,可出单张或 对子。
不断尝试新策略
在掌握基本技巧的基础上,勇于尝试新策略,寻找更 适合自己的打法。
线上线下比赛参与建议
01
02
03
04
参加线上比赛
利用网络平台参加斗地主比赛 ,与来自全国各地的玩家切磋
技艺。
关注线比赛规则
在比赛中要严格遵守比赛规则 ,尊重对手和裁判,保持良好
02 选牌与整理技巧
CHAPTER
起始手牌评估与选择
01
02
03
评估手牌强度
根据起始手牌的牌型、牌 面大小等因素,评估手牌 的整体强度,为后续出牌 策略提供依据。
选择合适角色
根据手牌情况,选择适合 扮演地主还是农民的角色 ,提高胜率。
关注对手牌型
观察对手的起始手牌,推 测其可能的牌型和策略, 为后续的出牌做好准备。
分析牌面剩余牌数
评估实力差距
结合自己和队友的牌型,判断与地主 之间的实力差距,为后续策略制定提 供依据。
根据剩余牌数和已出牌型,推测地主 手中可能的牌型组合。
农民间信息传递方式探讨
约定出牌暗号
01
与队友提前约定一些出牌暗号,如出特定牌型表示牌力强弱、
控制与否等。
利用出牌顺序传递信息
02
通过调整出牌顺序,向队友传递自己手中的牌型信息,如优先

斗地主积分规则

斗地主积分规则

斗地主积分规则
斗地主是一种流行的棋牌游戏,被广泛地欢迎和热爱。

它不仅充满乐趣,而且富有挑战性,能够大大提高你的思维能力。

这是一款容易上手但难以精通的游戏,一旦熟悉它的规则,你就能享受斗地主带来的乐趣!
斗地主的积分规则旨在更好地管理玩家的游戏表现,以便公平参与比赛。

根据积分规则,玩家可以获得不同的积分,可以和其他玩家进行赛段比赛,从而产生更加精彩、多样化的比赛。

斗地主的积分规则是这样的:
1.每位玩家凭借出牌技巧计算得出的分数,最高分的玩家获胜:
每个牌的分数以面额为基础,以张数来计算,分数计算公式如下:炸弹翻倍:1~9点各2点;10~K点各4点。

大小王视为炸弹,即16点;
三带一:三张一样的牌,再加一张任意牌,可加倍计分;
单牌:3~10点各1点;J、Q、K点各2点;大小王各4点;
2.本局比赛完毕后,玩家可以根据自己赢得局数多少计算积分:
若获得1局胜利:2分+20%分数;
若获得2局胜利:4分+40%分数;
若获得3局胜利:6分+60%分数;
若获得4局胜利:8分+80%分数;
若获得5局胜利:10分+100%分数;
3.总积分排名:
积分排名只取前三名,前三名的玩家可以获得更多的积分,以此来鼓励更多的玩家参与比赛,深入参与,使比赛更加精彩。

第一名:积分10分+100%积分
第二名:积分8分+80%积分
第三名:积分6分+60%积分
积分排名还可以根据用户规模调整,以获得更高的积分奖励。

以上就是斗地主的积分规则,它既能够衡量玩家的能力,又能激励玩家不断努力获取更高的积分。

斗地主的积分规则让游戏更具有挑战性,让玩家能够更好地享受斗地主游戏中的乐趣!。

斗地主技巧全解从基础到进阶一网打尽

斗地主技巧全解从基础到进阶一网打尽

斗地主技巧全解从基础到进阶一网打尽斗地主作为一款深受大众喜爱的纸牌游戏,想要玩得好,掌握一些技巧是必不可少的。

接下来,就让我们从基础到进阶,全面了解斗地主的技巧。

基础技巧1、记牌记牌是斗地主的基本功。

要记住已经出了哪些大牌,比如大小王、2、A 等,还要留意 7 和 10 这样的关键牌,因为 7 和 10 可以决定顺子的长度。

通过记牌,能大致推测出对手手中的牌型,从而做出更明智的决策。

2、算牌在记牌的基础上进行算牌。

比如,地主出了一张 A,上家顶了一张2,那么你可以推测地主手中可能还有 2。

又或者,自己手中有顺子,但是中间缺了一张关键牌,通过观察出牌情况,可以判断这张牌是否在其他玩家手中。

3、出牌顺序一般来说,先出小牌,把手中的牌理顺。

如果有单牌比较多,优先出单牌,尽量把小单牌跑掉。

如果有顺子、连队等牌型,要选择合适的时机出,不要过早暴露自己的牌型。

4、顶牌作为农民,如果地主出牌,上家要适当顶牌,尤其是地主出小牌的时候,上家要用稍大的牌顶,不让地主过小牌。

但也要注意不要把自己的大牌过早消耗掉。

5、观察对手留意对手的出牌习惯和表情,虽然在网络斗地主中无法看到表情,但可以通过出牌节奏和方式来判断对手的牌力和心态。

进阶技巧1、配合默契(针对农民)农民之间的配合至关重要。

比如,当一个农民出了一张大牌,另一个农民要根据情况选择是否帮忙顶牌或者出顺子等牌型来压制地主。

如果一个农民手中的牌比较好,可以适当吸引地主的火力,为队友创造机会。

2、骗牌通过出牌来迷惑对手,让对手误判你的牌型。

比如,你手中有一对王,但是先出一张小王,让地主以为你没有大王,从而放松警惕。

3、试探出牌在不确定对手牌型的情况下,可以出一些试探性的牌。

比如,出一张中等大小的牌,观察对手的反应,如果对手轻松放过,可能说明他手中的牌比较大或者牌型不整齐。

4、控制节奏在游戏中,要学会控制节奏。

如果自己的牌好,可以加快出牌速度,给对手压力。

如果牌不好,要适当放慢节奏,等待机会。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三人斗地主算法基本思想一、牌型1 火箭:大小王在一起的牌型,即双王牌,此牌型最大,什么牌型都可以打。

2 炸弹:相同点数的四张牌在一起的牌型,比如四条A。

除火箭外,它可以打任何牌型,炸弹对炸弹时,要比大小。

3 单支(一手牌):单张牌,如一支3。

4 对子(一手牌):相同点数的两张牌在一起的牌型,比如55。

5 三条:相同点数的三张牌在一起的牌型,比如三条4。

6 三带一手:三条+一手牌的牌型,比如AAA+9或AAA+77。

7 单顺:五张或更多的连续单支牌组成的牌型,比如45678或345678910JQKA。

2和大小王不可以连。

8 双顺:三对或更多的连续对子组成的牌型,比如334455或445566778899。

2和大小王不可以连。

9 三顺:二个或更多的连续三条组成的牌型,比如777888或444555666777。

2和大小王不可以连。

10 飞机带翅膀:三顺+同数量的一手牌,比如777888+3+6或444555666+33+77+88。

11 四带二:四条+两手牌。

比如AAAA+7+9或9999+33+55。

二、牌型分析1 单顺的确定a) 选取五连,先取出最小的一个五连,再在剩余的牌中取出最小的一个五连,依此类推,直到没有五连为止。

b) 扩展五连,将剩余的牌与已经取出的牌进行比对,如果某张剩余的牌与已知的连牌能组成更大的连牌,则将其合并。

一直到无法合并为止。

c) 合并连牌,如果某两组连牌能无缝连接成更大的连牌,则将其合并成一组。

经过上述选取、扩展和合并,则将一手牌中的所有连牌提取出来了,举例如下:假定一手牌是:2AKQJ1099877766543第一步,选取出34567,678910两个连牌组。

剩余的牌还有79JQKA2第二步,剩余的JQKA能和678910组成新的连牌678910JQKA。

第三步,已知的两个连牌组不能合并成新的、更大的连牌组,则这手牌就被分成了34567、678910JQKA两个连牌组和7、9、2三张单牌。

2 双顺的确定将一副牌中所有的对子检测出来,然后将对子排序,按照检测三连的方式可以将所有的双顺都提取出来。

3 三条的确定一副牌中的所有三条都能比较方便地提取出来。

4 三顺的确定在三条的基础上进行比较,如果有相连的三条,则将其合并成(尽可能大的)三顺。

5 炸弹的确定所有的四头都能很方便地确定。

6 火箭的确定只要牌张包含大小王,就将其组成火箭。

7 牌张的分类方法a) 先确定火箭:判断是否有大小王。

b) 再确定炸弹:判明是否有四头。

c) 再确定三条:在除了炸弹以外的牌中判断是否包含三条。

d) 再确定三顺:在已经确定的三条中判断是否包含相邻的三条,如果有,则将其组成三顺。

注意,应该使三顺的数量尽可能大。

即如果有444555666,则将其合成一个三顺,而不是分成444555一个三顺和666一个三条。

e) 再确定单顺:判断单顺时必须去除四个2以外的所有炸弹。

首先判断是否存在除了三条牌(这里的三条是指所有的三条)以外的连牌,如果有,则将其提取出来。

其次,将剩余的牌与每一个三条(不包含三顺)进行试组合,如果能够重新组成单顺和对子,则将原有的三条取消,重新组合成连牌和单顺(例子4566678重新组成45678和66)。

最后,将已知的连牌、三条(不包含三顺)和剩下的牌张再试组合,将所有如45678(已知的连牌)999(三条)10J(单牌),重新组合成45678910J和99。

通过以上的方法,就能将连牌和三条很好地重新组合。

f) 再确定双顺:首先,如果两单顺牌完全重合,则将其重新组合成双顺。

其次,在除炸弹、三顺、三条、单顺以外的牌中检测是否包含双顺。

如果有,将其提取出来。

g) 再确定对子:在炸弹、三顺、三条、连牌、双顺以外的牌中检测是否存在对子,如果存在将其提取出来。

h) 再确定单牌:除了炸弹、三顺、三条、连牌、双顺、对子以外的所有牌张都是单牌。

8 对子的确定参见上一节的“再确定对子”。

9 单牌的确定参见上一节的“再确定单牌”。

三、一手牌的手数分析为了使斗地主机器人有一定的智能,必须对一手牌的手数进行分析。

所谓一手牌的手数,指的是在没有别人压牌的情况下需要出几把能将牌出完。

这个数字在经过上面的分类后是可以确定的。

还以上面的一手牌22AAKQJ9987776654为例,这手牌按照前面的分析方法可以分析出以下的牌型:22、AA、K、Q、J、987654、9、77、6的牌型通过对上面牌型的计算,可以容易得出这手牌需要9手才能出完,因此这手牌的手数就是9。

四、绝对手数和相对手数的概念因为在斗地主游戏中存在火箭或炸弹的可能,所以理论上只有火箭才不可能被别人压住,所以,可以不考虑相对手数的概念。

以后都简称手数。

五、叫牌原则分析因为在斗地主中,火箭、炸弹、王和2可以认为是大牌,所以叫牌需要按照这些牌的多少来判断。

下面是一个简单的原则:假定火箭为8分,炸弹为6分,大王4分,小王3分,一个2为2分,则当分数大于等于7分时叫三倍;大于等于5分时叫二倍;大于等于3分时叫一倍;小于三分不叫。

六、出牌的一般原则1 出牌的原则一般按照从小到大的原则,即首先出包含最小牌的组合(单牌、对子、双顺、连牌、三顺、三条等,炸弹、火箭不包括在内)。

2 三条的出牌原则:因为三条出牌可以带一张单牌或一个对子,所以在出三条时需要检测是否有单牌,如果有,则带一张最小的单牌,如果没有,则再检测是否存在对子,如果有,则跟一个最小的对子,如果单牌和对子都没有,则出三条。

在带牌时,除非是只剩两手牌,否则不能带王或2。

3 三顺的出牌原则:因为三顺出牌可以带两张(或更多)单牌或两个(或更多)对子,所以与出三条一样,需要检测是否有单牌或对子。

如果有足够多的单牌或对子,则将其带出。

如果有单牌,但没有足够多的单牌,则检查是否有6连以上的连牌,如果有将连牌的最小张数当作单牌带出。

如果有对子,但没有足够多的对子,则检查是否有4连以上的双顺,如果有将双顺的最小对子当作对子带出。

在带牌时,除非是只剩两手牌,否则不能带王或2。

4 连牌的出牌原则:直接出。

5 双顺的出牌原则:直接出。

6 对子的出牌原则:因为对子可以用三条、三顺等带出,所以在出对子时,应该先检测一下三条+三顺(中三条)的数量,如果所有三条数量 <= 对子+单牌数量总和-2时,出对子,否则出三带2等等。

7 单牌的出牌原则:因为单牌可以用三条、三顺等带出,所以在出单牌时,应该先检测一下三条+三顺(中三条)的数量,如果所有三条数量 <= 对子+单牌数量总和-2时,出单牌,否则出三带1等等。

七、跟牌的一般原则1 如果手中有独立的,与所出的牌一样牌型的牌时,先跟之。

2 2可以作为单牌、对子、三条等形式跟出。

3 当手中没有相应牌跟时,如果是本方人员出的牌,可以不跟,如果是对方出的牌,则必须拆牌跟,如果再没有,出炸弹或火箭,否则PASS。

4 如果手中的牌除了炸弹。

火箭外还剩一手牌,则如果牌型相符,则先跟之,否则炸之。

5 单牌的跟牌原则:如果手中有单牌,则跟之,否则拆2跟之,否则拆对牌跟之,否则拆6连以上的单顺顶张跟之,否则拆三条跟之,否则拆三顺跟之,否则拆5连单顺跟之,否则拆双顺跟之,否则炸之,否则PASS。

6 对牌的根牌原则:如果手中有对子,则跟之,否则拆4连以上的双顺顶张跟之,否则拆三条跟之,否则拆双顺跟之,否则拆三顺跟之,否则炸之,否则PASS。

7 三条、三带1、三带2等牌的根牌原则:如果手中有相同牌型的牌则跟之,否则拆三顺跟之,否则炸之,否则PASS。

注意,只有在手中牌在出了以后还剩一手牌时,或直接出完的情况下,才允许带王或2。

在没有足够牌带的情况下,参照单牌。

对子的拆牌原则进行拆牌处理。

8 三顺及三顺带牌的根牌原则:如果有相应的牌型,则跟之,否则可以将大的三顺拆成小的三顺跟之,否则炸之,否则PASS。

注意,只有在手中牌在出了以后还剩一手牌时,或直接出完的情况下,才允许带王或2。

在没有足够牌带的情况下,参照单牌。

对子的拆牌原则进行拆牌处理。

9 连牌的跟牌原则:如果有相应的牌型,则跟之,否则拆相同张数的双顺,否则拆相同张数的三顺,否则拆不同张数的连牌,否则拆不同张数的双顺,否则拆不同张数的三顺,否则炸之,否则PASS。

10 双顺的跟牌原则:有相同牌型的牌,则跟之,否则拆不同张数的双顺,否则拆不同张数的三顺,否则拆相同张数的三顺,否则炸之,否则PASS。

11 炸弹的跟牌原则:有超过所出炸弹的炸弹,或有火箭,则炸之,否则PASS。

12 炸弹带两手牌的跟牌原则:如果有炸弹,则炸之,否则PASS。

八、打牌原则解析1 坐庄打法:因为坐庄的只是自己一个人,不存在配合问题,所以一般按照前面的原则出牌即可。

a) 在出牌时,如果偏家有一个人只剩一张牌时,尽量不出单牌,否则单牌由大到小出。

b) 在跟牌时,如果偏家有一个人只剩一张牌时,跟手中最大的牌。

2 偏家打法:偏家因为牵涉到配合问题,所以打法有一些不同。

a) 在出牌时,如果是庄家的上家,且庄家只剩一张牌时,尽量不出单牌,否则单牌由大到小出。

b) 在跟牌时,如果是庄家的上家,且庄家只剩一张牌时,跟手中最大的牌。

c) 当一个偏家打出的是单牌时,一般情况下能跟就跟。

如果手中必须跟2或以上的牌时,选择PASS。

d) 当一个偏家打出的是对子时,一般情况下能跟就跟。

如果手中必须跟AA或以上的牌时,选择PASS。

e) 如果一个偏家打出的牌是除了单牌及对子以外的牌型,则选择PASS。

f) 如果处在下家的偏家只剩一张牌时,在出牌时出手中最小的牌。

跟牌还按照一般的原则。

五子棋算法探讨(转贴) 近来随着计算机的快速发展,各种棋类游戏被纷纷请进了电脑,使得那些喜爱下棋,又常常苦于没有对手的棋迷们能随时过足棋瘾。

而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。

其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱;而我们今天将向大家介绍的是五子棋的算法。

当我们与电脑对战时,您知道这些软件是怎样象人脑一样进行思考的吗?总的来说(我们假定您熟悉五子棋的基本规则),要让电脑知道该在哪一点下子,就要根据盘面的形势,为每一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋型(如:“冲四”、“活三”等),然后通览全盘选出最重要的一点,这便是最基本的算法。

当然,仅靠当前盘面进行判断是远远不够的,这样下棋很容易掉进玩家设下的陷阱,因为它没有考虑以后的变化。

所以在此基础上我们加入递归调用,即:在电脑中预测出今后几步的各种走法,以便作出最佳选择,这也是我们下棋时常说的“想了几步”。

如此一来您的程序便具有一定的水平了。

什么?不信!过来试试吧!总体思路弄清之后,下面进行具体讨论:一:数据结构先来看看数据结构,我们需要哪些变量?首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个 15*15的二维数组 Table[15][15] (15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。

相关文档
最新文档