斗地主基本算法思想

合集下载

斗地主牌力计算原理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的可能性是极高的。

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

  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’代表对方的子;这张表也是今后分析的基础。

相关文档
最新文档