关于棋牌游戏的福建十三水的一个工具类(牌型分析、大小对比、自动摆牌、获取所有牌型组合)

写的比较简陋,仅仅只是实现了而已,谈不上美观,大神们不要喷我
直接上图(个人研究使用,不允许用于不正当途径)

1、自动摆牌效果图

2、获取葫芦所有牌型组合效果图

3、判断是否包含顺子效果图

4、代码

 /*** 自动摆牌 * @param arr* @return*/public static ThirteenWater automatic(List<Poker> arr){ThirteenWater thirteenWater = new ThirteenWater();List<Poker> copylist = copyPokerList(arr);setPier(copylist,thirteenWater,1);setPier(copylist,thirteenWater,2);setPier(copylist,thirteenWater,3);if(copylist.size() != 0){List<Poker> tail = thirteenWater.getTail();List<Poker> among = thirteenWater.getAmong();List<Poker> head = thirteenWater.getHead();if(tail.size() < 5){for (int i = 0; i < copylist.size(); i++) {if(tail.size() == 5){break;}tail.add(copylist.get(i));copylist.remove(copylist.get(i));i--;}}if(among.size() < 5){for (int i = copylist.size()-1; i > -1; i--) {if(among.size() == 5){break;}among.add(copylist.get(i));copylist.remove(copylist.get(i));}}if(head.size() < 3){for (int i = copylist.size()-1; i > -1; i--) {if(head.size() == 3){break;}head.add(copylist.get(i));copylist.remove(copylist.get(i));}}}return thirteenWater;}/**** * @param arr* @param thirteenWater* @param addType 1尾 2中 3头*/private static void setPier(List<Poker> arr,ThirteenWater thirteenWater,int addType){List<List<Poker>> pokers = new ArrayList<List<Poker>>();int type = 0;int index = 0;//同花顺if(pokers == null || pokers.size() < 1){pokers = getStraightFlush(arr);type = 1;}//铁支if(pokers == null || pokers.size() < 1){pokers = getBranch(arr);type = 2;}//葫芦if(pokers == null || pokers.size() < 1){pokers = getGourd(arr);type = 3;}//同花if(pokers == null || pokers.size() < 1){pokers = getSameColor(arr);type = 4;}//顺子if(pokers == null || pokers.size() < 1){pokers = getStraight(arr);type = 5;}//三条if(pokers == null || pokers.size() < 1){pokers = getThree(arr);type = 6;}//两对if(pokers == null || pokers.size() < 1){pokers = getTwoPairs(arr);type = 7;}//对子if(pokers == null || pokers.size() < 1){pokers = getPairs(arr);type = 8;}if(pokers.size() > 1){switch (type) {case 1://同花顺for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containStraight(pokers.get(i),pokers.get(index))){index = i;}}break;case 2://铁支for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containIronBranch(pokers.get(i),pokers.get(index))){index = i;}}break;case 3://葫芦for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containGourd(pokers.get(i),pokers.get(index))){index = i;}}break;case 4://同花for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containSameColor(pokers.get(i),pokers.get(index))){index = i;}}break;case 5://顺子for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containStraight(pokers.get(i),pokers.get(index))){index = i;}}break;case 6://三条for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containThree(pokers.get(i),pokers.get(index))){index = i;}}break;case 7://两对for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containTwoPairs(pokers.get(i),pokers.get(index))){index = i;}}break;case 8://对子for (int i = 0; i < pokers.size(); i++) {if(ThirteenWaterSizeComparison.containPair(pokers.get(i),pokers.get(index))){index = i;}}break;}}if(pokers != null && pokers.size() > 0){for (int j = 0; j < pokers.get(index).size(); j++) {Poker pokerB = pokers.get(index).get(j);for (int i = 0; i < arr.size(); i++) {Poker pokerA = arr.get(i);if(pokerA.getDeck() == pokerB.getDeck() && pokerA.getDecor() == pokerB.getDecor()){arr.remove(pokerA);i--;}}}}if(pokers != null && pokers.size() > 0){if(addType == 1){thirteenWater.setTail(pokers.get(index));}if(addType == 2){thirteenWater.setAmong(pokers.get(index));}if(addType == 3){thirteenWater.setHead(pokers.get(index));}}else{if(addType == 1){thirteenWater.setTail(new ArrayList<Poker>());}if(addType == 2){thirteenWater.setAmong(new ArrayList<Poker>());}if(addType == 3){thirteenWater.setHead(new ArrayList<Poker>());}}}/*** 获取所有对子组合* @param arr* @return*/public static List<List<Poker>> getPairs(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();for (int i = 0; i < arr.size(); i++) {int a = arr.get(i).getDeck();for (int j = 0; j < arr.size(); j++) {int b = arr.get(j).getDeck();;if(i == j){continue;}if(a == b){List<Poker> aa = new ArrayList<Poker>();aa.add(arr.get(i));aa.add(arr.get(j));result.add(aa);break;}}}return result;}/*** 获取所有两对组合* @param arr* @return*/public static List<List<Poker>> getTwoPairs(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();for (int i = 0; i < arr.size(); i++) {int a = arr.get(i).getDeck();for (int j = 0; j < arr.size(); j++) {int b = arr.get(j).getDeck();if(i == j){continue;}if(a == b){for (int k = 0; k < arr.size(); k++) {int c = arr.get(k).getDeck();if(j == k || k == i){continue;}if(b != c && a != c){for (int l = 0; l < arr.size(); l++) {int d = arr.get(l).getDeck();if(k == l || l == j || l==i){continue;}if(c == d){List<Poker> list = new ArrayList<Poker>();list.add(arr.get(i));   list.add(arr.get(j));list.add(arr.get(k));list.add(arr.get(l));boolean contain = false;for (int m = 0; m < result.size(); m++) {if(result.get(m).get(1).getDeck()+result.get(m).get(2).getDeck() == b+c){contain = true;}}if(!contain){result.add(list);}}}}}}}}//    for (int i = 0; i < result.size(); i++) {//      System.out.println(result.get(i));
//    }return result;}/*** 获取所有三条组合* @param arr* @return*/public static List<List<Poker>> getThree(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();Map<Integer, List<Poker>> notRepeatingMap = new HashMap<>();for (int i = 0; i < arr.size(); i++) {int a = arr.get(i).getDeck();for (int j = 0; j < arr.size(); j++) {int b = arr.get(j).getDeck();if(i == j){continue;}if(a == b){for (int h = 0; h < arr.size(); h++) {int c = arr.get(h).getDeck();if(j == h || h == i){continue;}if(b == c){List<Poker> list = new ArrayList<Poker>();list.add(arr.get(i));  list.add(arr.get(j));list.add(arr.get(h));notRepeatingMap.put(a, list);}}}}}for(Entry<Integer, List<Poker>> entry:notRepeatingMap.entrySet()){  result.add(entry.getValue());}  return result;}/*** 获取所有的顺子组合* @param arr* @return*/public static List<List<Poker>> getStraight(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();Map<Integer,Poker> notRepeatingMap = new HashMap<Integer, Poker>();List<Poker> list = new ArrayList<Poker>();List<Poker> copylist = copyPokerList(arr);//A==13,可以组成12345 & 10JQKA,方便计算添加一个A=0for (int j = 0; j < arr.size(); j++) {if(arr.get(j).getDeck() == 13){Poker poker = new Poker();poker.setDeck(0);poker.setDecor(arr.get(j).getDecor());copylist.add(poker);}}//排序sort(copylist);for (int i = 0; i < copylist.size(); i++) {int poker = copylist.get(i).getDeck();int upPoker = -999;if(notRepeatingMap.size() > 0){upPoker = (int)notRepeatingMap.keySet().toArray()[notRepeatingMap.keySet().toArray().length-1]; }if(Math.abs(poker-upPoker) == 1 || notRepeatingMap.size() < 1 || Math.abs(poker-upPoker) == 0){notRepeatingMap.put(poker, copylist.get(i));}else{if(notRepeatingMap.size() > 0){if(Math.abs(upPoker-poker) != 1 && notRepeatingMap.size() < 5){notRepeatingMap.clear();notRepeatingMap.put(poker, copylist.get(i));}if(Math.abs(upPoker-poker) != 1 && notRepeatingMap.size() > 5){for(Entry<Integer, Poker> entry:notRepeatingMap.entrySet()){  list.add(entry.getValue());}  notRepeatingMap.clear();notRepeatingMap.put(poker, copylist.get(i));}}}}for(Entry<Integer, Poker> entry:notRepeatingMap.entrySet()){    list.add(entry.getValue());} notRepeatingMap.clear();sort(list);for (int i = 0; i < list.size(); i++) {List<Poker> aa = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == list.size()){break;}aa.add(list.get(i+j));   }if(containStraight(aa)){result.add(aa);}}for (int i = 0; i < result.size(); i++) {for (int j = 0; j < result.get(i).size(); j++) {if(result.get(i).get(j).getDeck() == 0){result.get(i).get(j).setDeck(13);}}}return  result;}/*** 获取所有的同花组合* @param arr* @return*/public static List<List<Poker>> getSameColor(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();List<Poker> black = new ArrayList<>();List<Poker> red = new ArrayList<>();List<Poker> flower = new ArrayList<>();List<Poker> square = new ArrayList<>();for (int i = 1; i < 5; i++) {for (int j = 0; j < arr.size(); j++) {if(i==1 && i == arr.get(j).getDecor()){black.add(arr.get(j));}if(i==2 && i == arr.get(j).getDecor()){red.add(arr.get(j));}if(i==3 && i == arr.get(j).getDecor()){flower.add(arr.get(j));}if(i==4 && i == arr.get(j).getDecor()){square.add(arr.get(j));}}}if(black.size() > 5){for (int i = 0; i < black.size(); i++) {List<Poker> aa = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == black.size()){break;}aa.add(black.get(i+j));  }if(aa.size() >= 5){result.add(aa);}}}else if(black.size() == 5){result.add(black);}if(red.size() > 5){for (int i = 0; i < red.size(); i++) {List<Poker> aa = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == red.size()){break;}aa.add(red.get(i+j));  }if(aa.size() >= 5){result.add(aa);}            }}else if(red.size() == 5){result.add(red);}if(flower.size() > 5){for (int i = 0; i < flower.size(); i++) {List<Poker> aa = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == flower.size()){break;}aa.add(flower.get(i+j));  }if(aa.size() >= 5){result.add(aa);}            }}else if(flower.size() == 5){result.add(flower);}if(square.size() > 5){for (int i = 0; i < square.size(); i++) {List<Poker> aa = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == square.size()){break;}aa.add(square.get(i+j));    }if(aa.size() >= 5){result.add(aa);}            }}else if(square.size() == 5){result.add(square);}
//      for (int i = 0; i < result.size(); i++) {//          System.out.println(result.get(i));
//
//      }return result;}/*** 获取所有的葫芦组合* @param arr* @return*/public static List<List<Poker>> getGourd(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();List<List<Poker>> pair = getPairs(arr);List<List<Poker>> three = getThree(arr);if(pair.size() > 0 && three.size() > 0){if(pair.size()+three.size() > 2){for (int i = 0; i < pair.size(); i++) {for (int j = 0; j < three.size(); j++) {if(three.get(j).get(0).getDeck() != pair.get(i).get(0).getDeck()){boolean b = false;for (int j2 = 0; j2 < result.size(); j2++) {if((three.get(j).get(2).getDeck() + pair.get(i).get(0).getDeck()) == result.get(j2).get(2).getDeck()+result.get(j2).get(3).getDeck()){b = true;break;}}if(!b){List<Poker> list = new ArrayList<Poker>();list.add(three.get(j).get(0)); list.add(three.get(j).get(1));  list.add(three.get(j).get(2));  list.add(pair.get(i).get(0));   list.add(pair.get(i).get(1));result.add(list);}}}}}}return result;}/*** 获取所有的铁支组合* @param arr* @return*/public static List<List<Poker>> getBranch(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();Map<Integer, List<Poker>> map = new HashMap<Integer, List<Poker>>();for (int i = 0; i < arr.size(); i++) {int a = arr.get(i).getDeck();for (int j = 0; j < arr.size(); j++) {int b = arr.get(j).getDeck();if(i == j){continue;}if(a == b){for (int h = 0; h < arr.size(); h++) {int c = arr.get(h).getDeck();if(j == h || h == i){continue;}if(b == c){for (int u = 0; u < arr.size(); u++) {int d = arr.get(u).getDeck();if(j == u || u == i || u == h){continue;}if(d == c){List<Poker> list = new ArrayList<Poker>();list.add(arr.get(i));   list.add(arr.get(j));list.add(arr.get(h));list.add(arr.get(u));map.put(a, list);break;}}}}}}}for(Entry<Integer, List<Poker>> entry:map.entrySet()){  result.add(entry.getValue());}  return result;}/*** 获取所有同花顺组合* @param arr* @return*/public static List<List<Poker>> getStraightFlush(List<Poker> arr){List<List<Poker>> result = new ArrayList<List<Poker>>();List<Poker> temporaryRecord = new ArrayList<Poker>();List<Poker> list = new ArrayList<Poker>();List<Poker> copylist = copyPokerList(arr);List<Poker> black = new ArrayList<Poker>();List<Poker> red = new ArrayList<Poker>();List<Poker> plum  = new ArrayList<Poker>();List<Poker> cube = new ArrayList<Poker>();for (int j = 0; j < arr.size(); j++) {if(arr.get(j).getDeck() == 13){Poker poker = new Poker();poker.setDeck(0);poker.setDecor(arr.get(j).getDecor());copylist.add(poker);}}sort(copylist);for (int i = 0; i < copylist.size(); i++) {int a = copylist.get(i).getDeck();int h = -999;if(list.size() > 0){h = list.get(list.size()-1).getDeck();}if(Math.abs(a-h) == 1 || list.size() < 1 || Math.abs(a-h) == 0){list.add(copylist.get(i));}else{if(list.size() > 0){if(Math.abs(h-a) != 1 && list.size() < 5){list.clear();list.add(copylist.get(i));}if(Math.abs(h-a) != 1 && list.size() > 5){for (Poker poker : list) {temporaryRecord.add(poker);}list.clear();list.add(copylist.get(i));}}}}for (Poker poker : temporaryRecord) {list.add(poker);}sort(list);for (int i = 1; i < 5; i++) {for (int k = 0; k < list.size(); k++) {if(i == 1 && i == list.get(k).getDecor()){black.add(list.get(k));}if(i == 2 && i == list.get(k).getDecor()){red.add(list.get(k));}if(i == 3 && i == list.get(k).getDecor()){plum.add(list.get(k));}if(i == 4 && i == list.get(k).getDecor()){cube.add(list.get(k));}}}for (int i = 0; i < black.size(); i++) {List<Poker> uu = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == black.size()){break;}uu.add(black.get(i+j));  }if(containStraight(uu)){result.add(uu);}}for (int i = 0; i < red.size(); i++) {List<Poker> uu = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == red.size()){break;}uu.add(red.get(i+j));    }if(containStraight(uu)){result.add(uu);}}for (int i = 0; i < plum.size(); i++) {List<Poker> uu = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == plum.size()){break;}uu.add(plum.get(i+j)); }if(containStraight(uu)){result.add(uu);}}for (int i = 0; i < cube.size(); i++) {List<Poker> uu = new ArrayList<Poker>();for (int j = 0; j < 5; j++) {if(i+j == cube.size()){break;}uu.add(cube.get(i+j)); }if(containStraight(uu)){result.add(uu);}}for (int i = 0; i < result.size(); i++) {for (int j = 0; j < result.get(i).size(); j++) {if(result.get(i).get(j).getDeck() == 0){result.get(i).get(j).setDeck(13);}}}return result;}

源码下载地址

关于棋牌游戏的福建十三水的一个工具类(牌型分析、大小对比、自动摆牌、获取所有牌型组合)相关推荐

  1. 快速排序查询第k大元素C语言,福建十三水下载苹果 -官方网站

    NioEventLoop启动触发条件: 1.服务端绑定本地端口 2.新连接接入通过chooser绑定一个NioEventLoop 服务端绑定本地端口 绑定本地端口,使用下面方法; ChannelFut ...

  2. 棋牌游戏开发可持续发展 需重视长期运营优化

    近几年,创业者纷纷转入棋牌游戏开发行业,希望在此领域大展拳脚.但是对很多技术小白来说,棋牌游戏开发的价格一直是一个波动的数值,令大家摸不着头脑,这么多开发公司,为啥价格各不相同呢?影响一款棋牌游戏价格 ...

  3. 游戏微服务架构设计:棋牌游戏

    棋牌游戏怎么做分布式? Gate 这个连接用来做负载均衡,只是为了获取连接服的连接地址用,客户端连接后,拿到连接服的IP和端口就断开.其中,如何选择连接服的策略可以是随机.轮询.加权重等. Conne ...

  4. 浅谈2017棋牌游戏的前景 运营 推广(上) 转贴

    现在2017年过了大半,棋牌游戏前景还好不好呢,尤其是去年刚兴起的后期之秀-房卡棋牌模式.上半年,随着棋牌游戏开发公司和棋牌游戏运营者越来越多人入局,让棋牌游戏焕发了新的生机,目前地方的棋牌游戏平台, ...

  5. 丑小鸭到白天鹅的蜕变—棋牌游戏

    棋牌游戏虽然历史悠久,但是在前几天兴起的游戏内,却总也找不到棋牌游戏的身影,而今年棋牌游戏却突然爆发,究竟是什么原因导致的棋牌游戏被人看不起却又突然崛起呢?游戏配音小编总结了以下原因. 第一:棋牌游戏 ...

  6. 棋牌游戏开发UI设计师如何打造受玩家欢迎的界面

    棋牌游戏由于其简单的玩法规则,深受群众喜欢,但这只是棋牌游戏开发侧重的一方面,如果玩家连最开始的下载试玩欲望都没有,又如何了解你的游戏规则呢,因此棋牌游戏开发界面设计,也是影响其是否能够受大众认可的重 ...

  7. 棋牌游戏的真谛是什么

    得益于庞大的用户群体和棋牌游戏娱乐习惯的普及性,棋牌游戏已经成为网络 游戏产业中最稳定.最成熟.最赚钱的游戏品类,运营棋牌游戏,回报丰厚,立足一个县市,年收益可达百万,据2013年<第32次中国 ...

  8. 十三水摆牌高级智能算法

    十三水游戏是浙江,福建,广西一带较为流行的游戏,每家发十三张牌,分三道来摆,头道三张,中道5张,尾道5张.以前有人问到十三张自动摆法有没有水平高的,最近下雨,出不了门,闲来无事,我就尝试下用穷举法来计 ...

  9. 棋牌游戏为什么会这么的“火”

    现如今,棋牌游戏已经成为人们茶余饭后的娱乐消遣方式之一,无论何时何地,你都能在路边,小巷口或者是居民房内看到有人在打牌或者打麻将.这也就是为什么街上到处都能看见棋牌室和麻将馆了,这就是市场跟广大群众的 ...

最新文章

  1. 使用jsDelivr加速GitHub的静态资源
  2. 解决MySQL server has gone away
  3. oracle 事务_从Oracle到PG-PostgreSQL的MVCC机制简介
  4. Java命令行界面(第22部分):argparser
  5. python -- join()
  6. C语言进阶深度学习目录表
  7. 怎么查询共享使用人_企业微信微盘怎么共享使用?企业微信如何设置微盘权限?...
  8. Twitter 宣布抛弃 Mesos,全面转向Kubernetes
  9. rocketmq的有序消费模式和并发消费模式的区别
  10. pythonpid传递函数_python实现PID算法及测试的例子
  11. Win7上USB转串口芯片ch341驱动安装方法
  12. 【字体分享】适合寒露闪屏设计的字体有哪些?
  13. 四位共阳极数码管显示函数_求各位大神指正,四位一体共阳极数码管数字钟程序,仿真能运行,实物就只显8个8,不动...
  14. 最新版CameraX入门(拍照、存储展示、切换前后摄像头、手电筒、闪光灯、手势伸缩、双击放大缩小)
  15. 一个有趣的时间段重叠问题
  16. python语言的实验心得体会范文_实验心得体会-精选范文
  17. 移动端测试——移动端基础
  18. C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码
  19. 百度视频发布年度大数据报告 揭晓热播影视综艺动漫
  20. MySQL存储过程示例

热门文章

  1. 英语口语之七十七[人们总会出乎你的意料]
  2. java visio_java 操作visio-- com4j方式
  3. c语言中常用的字符函数以及字符串函数
  4. 万年历 mysql 公历农历、宜忌冲煞、甲子五行、纳音、星宿、星座、节气等等
  5. 如何使用PDF编辑软件在PDF文件中添加背景图片
  6. CSS——动画{旋转按钮}
  7. c语言中define变量类型,C语言中typedef和define有什么区别
  8. java定义二维数组
  9. 多人开发 Git 分支管理详解
  10. Vue-Router 路由管理器