源代码链接
package yan.study.game.puke;import cn.yan.study.utils.YanStrUtils;
import cn.yan.study.utils.cache.ConcurrentHashMapCacheUtils;import java.util.*;public class NiuNiuGame {/**
     * 获取一手牌的牛
     */
    public static NiuResult getNiuResult(List<Card> personCards) {/**
         * 先把大于等于10的拿出去
         * 再找三个加起来等于10的倍数的
         * 再找两个加起来等于10的倍数的
         * 最后算牛几
         */
        NiuResult result = new NiuResult();List<Card> moreThanNine = new ArrayList<Card>();List<Card> lessThanTen = new ArrayList<Card>();Card heitao9 = new Card(Card.POKER_COLOR_LIST.get(0), Card.POKER_VALUE_LIST.get(5));Card fanpianA = new Card(Card.POKER_COLOR_LIST.get(3), Card.POKER_VALUE_LIST.get(0));for (Card card : personCards) {if (card.compareTo(heitao9) > 0 && card.compareTo(fanpianA) < 0) {moreThanNine.add(card);} else {lessThanTen.add(card);}}Integer niuNumber = getNiuNumber(lessThanTen);result.setNiuNumber(niuNumber);List<Card> sortCards = new ArrayList<Card>();Collections.sort(moreThanNine, Collections.<Card>reverseOrder());sortCards.addAll(moreThanNine);Collections.sort(lessThanTen, Collections.<Card>reverseOrder());List<Card> aList = new ArrayList<Card>(); // 记录A的牌
        for (Card card : lessThanTen) {if (card.getValue().equals(Card.POKER_VALUE_LIST.get(0))) {aList.add(card);}}if (aList.size()>0) {lessThanTen.removeAll(aList);lessThanTen.addAll(aList);}sortCards.addAll(lessThanTen);result.setCardSortList(sortCards);return result;}/**
     * 获取牛的数字
     */
    private static int getNiuNumber(List<Card> lessThanTen) {if (lessThanTen.size() == 0) {return 10;}if (lessThanTen.size() == 1) {return getOneCardNum(lessThanTen.get(0));}if (lessThanTen.size() == 2) {return getNiuFrom2(lessThanTen);}if (lessThanTen.size() == 3) {return getNiuFrom3(lessThanTen);}if (lessThanTen.size() == 4) {return getNiuFrom4(lessThanTen);}if (lessThanTen.size() == 5) {return getNiuFrom5(lessThanTen);}return -1;}/**
     * 从两张牌里面找牛
     */
    private static int getNiuFrom2(List<Card> lessThanTen) {if (lessThanTen.size() == 2) {int niuNumber = (getOneCardNum(lessThanTen.get(0)) + getOneCardNum(lessThanTen.get(1))) % 10;if (niuNumber == 0) {return 10;}return niuNumber;} else {return -1;}}/**
     * 从三张里面找牛
     */
    private static int getNiuFrom3(List<Card> lessThanTen) {if (lessThanTen.size() == 3) {// 3
            int niuNumber = (getOneCardNum(lessThanTen.get(0)) + getOneCardNum(lessThanTen.get(1)) + getOneCardNum(lessThanTen.get(2))) % 10;if (niuNumber == 0) {return 10;}// 2+1
            List<List<Card>> subListCards2 = YanCollectionUtils.getAllSubList(lessThanTen, 2);for (List<Card> listCard : subListCards2) {niuNumber = getNiuFrom2(listCard);if (niuNumber == 10) {List<Card> subList = YanCollectionUtils.getSubList(lessThanTen, listCard);return getOneCardNum(subList.get(0));}}return -1;} else {return -1;}}/**
     * 4账牌里面找牛  3 + 1 2 + 2
     */
    private static int getNiuFrom4(List<Card> lessThanTen) {if (lessThanTen.size() == 4) {// 3 + 1
            List<List<Card>> subListCards3 = YanCollectionUtils.getAllSubList(lessThanTen, 3);for (List<Card> listCard : subListCards3) {int niuNumber = getNiuFrom3(listCard);if (niuNumber == 10) {Card card = YanCollectionUtils.getSubList(lessThanTen, listCard).get(0);return getOneCardNum(card);}}// 2 + 2
            List<List<Card>> subListCards2 = YanCollectionUtils.getAllSubList(lessThanTen, 2);for (List<Card> listCard : subListCards2) {int niuNumber = getNiuFrom2(listCard);if (niuNumber == 10) {List<Card> subList = YanCollectionUtils.getSubList(lessThanTen, listCard);return getNiuFrom2(subList);}}return -1;} else {return -1;}}/**
     * 从五张里面找牛 3+2 2+2+1
     */
    private static int getNiuFrom5(List<Card> lessThanTen) {if (lessThanTen.size() == 5) {// 3+2
            List<List<Card>> subListCards3 = YanCollectionUtils.getAllSubList(lessThanTen, 3);for (List<Card> listCard : subListCards3) {int niuNumber = getNiuFrom3(listCard);if (niuNumber == 10) {List<Card> subList = YanCollectionUtils.getSubList(lessThanTen, listCard);return getNiuFrom2(subList);}}// 2+2+1
            List<List<Card>> subListCards2 = YanCollectionUtils.getAllSubList(lessThanTen, 2);for (List<Card> listCard : subListCards2) {int niuNumber = getNiuFrom2(listCard);if (niuNumber == 10) {List<Card> subList = YanCollectionUtils.getSubList(lessThanTen, listCard);niuNumber = getNiuFrom2(subList);if (niuNumber == 10) {Card card = YanCollectionUtils.getSubList(lessThanTen, listCard).get(0);return getOneCardNum(card);}}}return -1;} else {return -1;}}/**
     * 取一张的值
     */
    private static int getOneCardNum(Card card) {if (card.getValue().equals(Card.POKER_VALUE_LIST.get(0))) {return 1;}return Integer.valueOf(card.getValue());}/**
     * 创建游戏
     */
    public static String createGame(int count, List<String> names) {if (count > names.size()) {throw new RuntimeException("params is error");}String gameUUid = YanStrUtils.getYanString("niuniuGame");List<Person> gamePersonList = new ArrayList<Person>();for (int i = 0; i< count; i++) {Person person = new Person(names.get(i));gamePersonList.add(person);}ConcurrentHashMapCacheUtils.setCache(gameUUid, gamePersonList);return gameUUid;}/**
     * 一次发完所有的牌
     */
    public static void sendCard(String gameUUid) {List<Card> pokers = PokerUtils.getNewPokers();pokers = PokerUtils.deleteCard(Arrays.asList(new Card(Card.POKER_COLOR_LIST.get(1), Card.MAX_KING), new Card(Card.POKER_COLOR_LIST.get(0), Card.SMALL_KING)), pokers);PokerUtils.Shuffle(pokers);List<Person> gamePersonList = (List<Person>) ConcurrentHashMapCacheUtils.getCache(gameUUid);int personCount = gamePersonList.size();for (int cardCount = 0; cardCount < 5; cardCount++) {for (int index = 0; index < personCount; index++) {List<Card> cardList = gamePersonList.get(index).getCardList();cardList.add(pokers.get(0));pokers.remove(0);}}ConcurrentHashMapCacheUtils.setCache(gameUUid, gamePersonList);}public static void showResult(String gameUUid) {List<Person> gamePersonList = (List<Person>) ConcurrentHashMapCacheUtils.getCache(gameUUid);// TODO 排序失败 以后有时间再玩
        Collections.sort(gamePersonList, new Comparator<Person>() {public int compare(Person o1, Person o2) {List<Card> personOneCards = o1.getCardList();List<Card> personTwoCards = o2.getCardList();NiuResult oneResult = getNiuResult(personOneCards);NiuResult twoResult = getNiuResult(personTwoCards);return oneResult.compareTo(twoResult);}});Person winPerson = gamePersonList.get(0);System.out.println("this is winner ...");showPerson(winPerson);System.out.println("all person info is ....");for (int index =0; index < gamePersonList.size(); index++) {Person person = gamePersonList.get(index);showPerson(person);}}public static void showPerson(Person person) {System.out.println("person name is : " + person.getName());System.out.println("card is :");for (Card card : person.getCardList()) {System.out.println(card);}System.out.println("result is : " + getNiuResult(person.getCardList()));}public static void main(String[] args) {String gameUUid = createGame(4, Arrays.asList("yan", "test", "root", "system"));sendCard(gameUUid);showResult(gameUUid);}private static class NiuResult implements Comparable {/**
         * 牛的数目
         */
        private Integer niuNumber;/**
         * 有序手牌
         */
        private List<Card> cardSortList;public Integer getNiuNumber() {return niuNumber;}public void setNiuNumber(Integer niuNumber) {this.niuNumber = niuNumber;}public List<Card> getCardSortList() {return cardSortList;}public void setCardSortList(List<Card> cardSortList) {this.cardSortList = cardSortList;}/**
         * 先判断牛的大小 在判断牌的大小 最后比最大的牌的花色
         * @param o
         * @return
         */
        public int compareTo(Object o) {if (!(o instanceof NiuResult)) {return -1;}NiuResult niuResult = (NiuResult)o;if (this.getNiuNumber() != niuResult.getNiuNumber()) {return niuResult.getNiuNumber() - this.getNiuNumber();}return PokerUtils.commCompareTo(niuResult.getCardSortList(), this.getCardSortList());}@Override
        public String toString() {return "NiuResult{" +"niuNumber=" + niuNumber +", cardSortList=" + cardSortList +'}';}}
}

Java 纸牌游戏 牛牛 逻辑代码 实现相关推荐

  1. Java控制台游戏~600行代码实现打怪小游戏

    Java控制台游戏~600行代码实现打怪小游戏(多图预警) 一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边): 二,在这个简单的小游戏里,你可以体验到: 1.打怪: 2.随机玩法寻宝: ...

  2. 飞翔的小鸟--Java小游戏实战(代码完整)

    一.写在前面: <飞扬的小鸟>是一款曾经比较火热的小游戏,本文可以带你你从零开始,一步一步的开发出这款小游戏. 语言 Java 工具 IntelliJ IDEA,JDK 16 准备工作 创 ...

  3. Java梭哈游戏部分实现代码

    转载:https://www.cnblogs.com/jiqing9006/p/6107892.html 同时这段代码在李刚老师疯狂JAVA讲义这本书中也有 import java.util.*;/* ...

  4. 改朝换代游戏(基于数字游戏2048逻辑代码)

    什么2048数字游戏? <2048>,是一款益智小游戏,这款游戏是由年仅19岁的意大利程序员加布里勒希鲁尼(Gabriele Cirulli)开发出来的,官方版本只能在网页上或通过其移动网 ...

  5. java纸牌游戏程序报告_java--纸牌游戏自动出牌

    接着上传的分牌程序,多加些功能 实现为玩家分完牌后,自动出牌,得出赢家 实验结果 要实现自动出牌AI,我的想法是使用回溯法 算法如下: public void OutCard(Play First,P ...

  6. 扑克牌少一张JAVA,纸牌游戏,随机输出三张扑克牌

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //创建一副扑克牌(54张)Card[] cards = new Card[54];int i = 0;for(int rank=Card.THREE;r ...

  7. 24点游戏 java实现_java实现24点纸牌游戏

    本文题目为大家分享了java实现24点纸牌游戏的具体代码,供大家参考,具体内容如下 题目 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢 ...

  8. 复习Java小球游戏代码分享Java面试题MySQL中常用的锁生活【记录一个咸鱼大学生三个月的奋进生活】021

    记录一个咸鱼大学生三个月的奋进生活021 复习Java小球游戏 游戏界面的代码 小球运动线程的代码 运行游戏的代码 运行结果 代码分享 学习Java面试题(MySQL中常用的锁) 照片分享 复习Jav ...

  9. java完成九宫格数独_简单实现java数独游戏

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...

  10. Python|随机函数——纸牌游戏的发牌机制

    本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 在手机日益重要的当今社会,有很多人都在使用手机上的小程序在玩着各类纸牌游戏.那么今天,我讲述 ...

最新文章

  1. 拼多多一度跌破发行价:已遭上海工商约谈 被要求自查自纠
  2. Totem-DesignNet处理器插件开发方法
  3. Loss Function view
  4. three.js 下载安装、开发环境
  5. Centos yum安装snmp
  6. 初中数学最全几何模型_初中数学几何模型大全+经典题型(含答案)
  7. 8421码到5421码的转换_8421码转换为5421码
  8. Uploadify-中文帮助手册
  9. 文档数据库和关系数据库的区别
  10. win10中鼠标点右键或者重命名文件夹系统卡顿解决方法
  11. 前端,后端,前台,后台到底应该怎么理解。
  12. php话费充值接口对接,基于PHP的聚合数据手机话费充值API调用代码示例
  13. 使用RecyclerView实现瀑布流
  14. 标准正态分布变量的累积概率分布函数
  15. XJOI 3679 一道有趣的题 求解求解
  16. “希希敬敬对”团队作业-敏捷冲刺-3
  17. ix | pandas读取表格后的行列取值改值操作
  18. 盘点大厂的那些开源项目 - 滴滴出行
  19. 圣戈班发布全新本地化生物工艺袋产品
  20. 游戏音乐外包中策划应该怎么做?

热门文章

  1. 案例:Java多态实现饮料购买咖啡、可乐、矿泉水
  2. 事务中的多线程引发的怪异现象
  3. SATA学习笔记 14 ---SATA PM
  4. 图解项目绩效考核表实例--绩效考核不用愁
  5. 最小二乘法拟合空间直线的原理及实现
  6. Linux沙箱技术介绍
  7. 关于MATLAB powergui 无法调整为discrete的解决方法
  8. 阿里云国际版虚拟主机上设置网站和域名教程
  9. 保姆级教程,阿里云快速搭建个人网站
  10. 企业级地理数据库(2)创建并加载企业级地理数据库