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

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

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

斗地主游戏算法牌型项目研发

本篇主要讲解斗地主中如何判断一手牌的牌型。

牌型

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

炸弹:四张点数相同的牌,如: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 myCards

5 * 牌的集合

6 * @return 如果为单,返回true;否则,返回false。

7 */

8public static boolean isDan(List myCards) { 9// 默认不是单

10boolean flag = false;

11if (myCards != null && myCards.size() == 1) {

12 flag = true;

13 }

14return flag;

15 }

2.对子

16/**

17 * 判断牌是否为对子

18 *

19 * @param myCards

20 * 牌的集合

21 * @return 如果为对子,返回true;否则,返回false。

22 */

23public static boolean isDuiZi(List myCards) {

24// 默认不是对子

25boolean flag = false;

26

27if (myCards != null && myCards.size() == 2) {

28

29int grade1 = myCards.get(0).grade;

30int grade2 = myCards.get(1).grade;

31if (grade1 == grade2) {

32 flag = true;

33 }

34 }

35

36return flag;

37

38 }

3.3带1

/**

39* 判断牌是否为3带1

40 *

41 * @param myCards

42 * 牌的集合

43 * @return如果为3带1,被带牌的位置,0或3,否则返回-1。炸弹返回-1。

44 */

45public static int isSanDaiYi(List myCards) {

46int flag = -1;

47// 默认不是3带1

48if (myCards != null && myCards.size() == 4) {

49// 对牌进行排序

50 CardUtil.sortCards(myCards);

51

52int[] grades = new int[4];

53 grades[0] = myCards.get(0).grade;

54 grades[1] = myCards.get(1).grade;

55 grades[2] = myCards.get(2).grade;

56 grades[3] = myCards.get(3).grade;

57

58// 暂时认为炸弹不为3带1

59if ((grades[1] == grades[0]) && (grades[2] == grades[0])

60 && (grades[3] == grades[0])) {

61return -1;

62 }

63// 3带1,被带的牌在牌头

64else if ((grades[1] == grades[0] && grades[2] == grades[0])) { 65return0;

66 }

67// 3带1,被带的牌在牌尾

68else if (grades[1] == grades[3] && grades[2] == grades[3]) { 69return3;

70 }

71 }

72return flag;

73 }

4.3不带

74/**

75 * 判断牌是否为3不带

76 *

77 * @param myCards

78 * 牌的集合

79 * @return 如果为3不带,返回true;否则,返回false。

80 */

81public static boolean isSanBuDai(List myCards) {

82// 默认不是3不带

83boolean flag = false;

84

85if (myCards != null && myCards.size() == 3) {

86int grade0 = myCards.get(0).grade;

87int grade1 = myCards.get(1).grade;

88int grade2 = myCards.get(2).grade;

89

90if (grade0 == grade1 && grade2 == grade0) {

91 flag = true;

相关文档
最新文档