扑克模拟,牌型判断java版

Card类

package com.company;

public class Card {
    private String     color;
    private Integer    value;
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public Integer getValue() {
        return value;
    }
    public void setValue(Integer value) {
        this.value = value;
    }
    public String ToString()
    {
        String strValue = "";
        switch(value)
        {
            case 1:
            {
                strValue = "A";
                break;
            }
            case 11:
            {
                strValue = "J";
                break;
            }
            case 12:
            {
                strValue = "Q";
                break;
            }
            case 13:
            {
                strValue = "K";
                break;
            }
            default:
                strValue = value.toString();
                break;
        }
        return color+strValue;
    }

}

主类

package com.company;

import java.util.ArrayList;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

public class Main {

    public static void Judge(Card[] hands)
    {
        boolean bIsSameColor = false;
        boolean bIsShunzi = false;

        Set<String> setColors = new HashSet<String>();

        for(int i=0; i < hands.length; i++)
        {
            setColors.add(hands[i].getColor());
        }

        if(setColors.size()==1)
        {
            bIsSameColor=true;
            //System.out.println("同花");
        }

        List<Integer> lstValues = new ArrayList<Integer>();
        Set<Integer> setValues = new HashSet<Integer>();

        for(int i=0; i < hands.length; i++)
        {
            lstValues.add(hands[i].getValue());
            setValues.add(hands[i].getValue());
        }
        //顺子,必须满足3个条件
        //1.这手牌先排好序(由大到小)sortHands[5]
        //2.这手牌里面牌值不能有重复项
        //3.如果sortHands[0]-sortHands[4]==4
        Collections.sort(lstValues);
        int nDiff = lstValues.get(4)-lstValues.get(0);
        if(setValues.size()==5&&nDiff==4)
        {
            bIsShunzi = true;
            //System.out.println("顺子");
        }

        if(bIsSameColor&&bIsShunzi)
        {
            System.out.println("同花顺");
        }
        else if(bIsSameColor)
        {
            System.out.println("同花");
        }
        else if(bIsShunzi)
        {
            System.out.println("顺子");
        }
        else if(setValues.size()==5)
        {
            System.out.println("杂牌");
        }

        Map<Integer,List<Card>> map = new HashMap<Integer,List<Card>>();

        for(int i = 0; i < hands.length; i++)
        {

            int nValue = hands[i].getValue();//红桃9
            if(map.containsKey(nValue))
            {
                List<Card> lstCards = map.get(nValue);
                lstCards.add(hands[i]);

            }
            else//不包含
            {
                List<Card> lstCards = new ArrayList<Card>();
                lstCards.add(hands[i]);
                map.put(nValue, lstCards);
            }
        }

        if(map.size()==4)
        {
            System.out.println("一对");
        }
        else if(map.size() == 2)//4带1,3带2
        {
            boolean bIsFourWithOne = false;
            for(Map.Entry<Integer, List<Card>> e : map.entrySet() )
            {
                if(e.getValue().size() == 4)
                {
                    bIsFourWithOne = true;
                }
            }
            if(bIsFourWithOne == true)
            {
                System.out.println("四带一");
            }
            else
            {
                System.out.println("三带二");
            }

//            Map<String,String> map2;
//            map2.add("apple","苹果");
//            map2.add("orange","桔子");
//            map2.values();
        }
        else if(map.size() == 3)//311,221
        {
            boolean bIsThreeOneOne = false;
            for(Map.Entry<Integer, List<Card>> e : map.entrySet() )
            {
                if(e.getValue().size() == 3)
                {
                    bIsThreeOneOne = true;
                }
            }
            if(bIsThreeOneOne == true)
            {
                System.out.println("311");
            }
            else
            {
                System.out.println("221");
            }
        }
//        int i = 7;
//        Card c = card1;

//        (3,[方块3])
//        (5,[红桃5])
//        (9,[黑桃9,草花9,红桃9])
//
//
//
//        (13,[红桃13,方块13])
//        (5,[草花5,黑桃5])
//        (2,[红桃2])
//
//        (4,[黑桃4,草花4,红桃4,方块4])
//        (9,[草花9])
//        //4带1,3带2,311,221,2111
//        map.size()==4//2111
//        if(map.size()==2)
//            abs(map.value[0].size()-map.value[1].size())==3
//            //4带1
//            abs(map.value[0].size()-map.value[1].size())==1
//            //,3带2
//        if(map.size()==3)
//
//            //311,221
    }
    public static void generateHands(Card[] pokes,Card[] hands)
    {
        for(int i = 0; i < hands.length; i++)
        {
            hands[i] = pokes[i];
        }
    }
    public static void outputCards(Card[] pokes)
    {
        for(int i = 0; i < pokes.length; i++)
        {
            if(i%13==0)
                System.out.println();
            System.out.print(pokes[i].ToString()+" ");

        }
    }
    public static void shuffle(Card[] pokes)
    {
        Random r = new Random();

        for(int i = 0; i < pokes.length; i++)
        {
            int n = r.nextInt(i+1);
            Card cTemp;
            cTemp = pokes[i];
            pokes[i] = pokes[n];
            pokes[n] = cTemp;
        }
    }
    public static void main(String[] args) {
        //System.out.println("helloworld");

        String[] Colors = {"红桃","方片","黑桃","草花"};
        Integer[] Values = {1,2,3,4,5,6,7,8,9,10,11,12,13};

        Card[] pokes = new Card[52];
        Card[] hands = new Card[5];

        int nIndex = 0;
        for(int i = 0; i < Colors.length; i++)
        {
            for(int j = 0; j < Values.length; j++)
            {
                pokes[nIndex] = new Card();
                pokes[nIndex].setColor(Colors[i]);
                pokes[nIndex].setValue(Values[j]);
                nIndex++;
            }
        }

        outputCards(pokes);

        shuffle(pokes);

        generateHands(pokes,hands);

        outputCards(hands);

        Judge(hands);
    }
}

时间: 2025-01-06 06:22:19

扑克模拟,牌型判断java版的相关文章

斗地主基本牌型判断

/** * Created by xujw on 2017/10/16. * 斗地主 * 单副扑克 * 没有癞子玩法 * 牌对象为{grade:3,face:1} * grade 牌面点数(3-13:3-K, 14:A, 15:2, 16:小王 17:大王) * face 牌面花色(1:黑桃.2:红桃.3:梅花.4:方块) */ var CARD_TYPE_INVALID = -1; // 无效手牌 var CARD_TYPE_SINGLE = 1; // 单张 var CARD_TYPE_DO

斗地主牌型基本算法升级版本

斗地主牌型基本算法升级版本 好久没更新博客了,前段时间和朋友一起开了一个公司 做APP,最后失败了.现在又开始做棋牌游戏了,最近在看网狐的源码,发现里面斗地主的基本算法太强大了,现在想想我原来的算法简直是弱爆了,分享一下 希望能对你有一点点帮助.以下主要涉及到判断牌型,牌型大小比较2块,如果你想了解更多关于棋牌游戏的东西请访问我的 棋牌游戏专栏. 一.判断牌型 定义一个结构来表示每张相同牌的信息. //分析结构 structtagAnalyseResult { BYTE cbFourCount;

棋牌游戏开发之地主算法判断牌型

棋牌游戏开发疑问交流 QQ:325131039(勿发广告) 棋牌游戏开发技术交流群: 490287966(勿发广告) ps: 本文转载自博主 wojiushi3344 每个游戏都有属于自己的规则,当然地主也不例外,常斗地主的朋友可能知道在斗地主里面一共有13种牌型,你所出的牌必须符合13种的一种才能够出得了牌,这个就叫地主的规则.那么我们下面可以通过一个枚举结构来表示每一种的牌型,在这里我们把错误的牌型也当成是一种牌型. [cpp] view plaincopy enum  CARD_TYPE

【教程】模拟登陆百度之Java代码版

[背景] 之前已经写了教程,分析模拟登陆百度的逻辑: [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 然后又去用不同的语言: Python的: [教程]模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码) C#的: [教程]模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码) 去实现对应逻辑. 此处,继续尝试,用Java代码,实现这套,模拟登陆百度,的逻辑. [折腾过程] 1.之前已经整理了一些Java代码: http://c

斗地主算法判断牌型

由于近年来网络棋牌游戏的火爆导致个各个地区的特色棋牌游戏开发进入红火时期,也有越来越多的团队个人开始研究棋牌游戏的开发,所以本文主旨在于各个开发人员之间的交流. 每个游戏都有属于自己的规则,当然斗地主也不例外,常斗地主的朋友可能知道在斗地主里面一共有13种牌型,你所出的牌必须符合13种的一种才能够出得了牌,这个就叫地主的规则.那么我们下面可以通过一个枚举结构来表示每一种的牌型,在这里我们把错误的牌型也当成是一种牌型. 那么在编程中我们该怎么来判断一组牌到底该属于哪一种牌型了?? ?这就是接下来我

扎金花大小比较算法(Java版)

注:以下算法说明仅限一副牌(不包含大小王)的情况 1.扎金花规则说明(大家都懂的,这里做简单描述): 1)玩家每人3张牌: 2)牌面大小2.3.4.5.6.7.8.9.10(用T表示),J.Q.K.A,大小依次递增: 3)牌的花色有黑桃(用H表示).红心(用X表示).梅花(用M表示).方块(用F表示),大小依次递减: 4)牌有豹子(3张牌数字大小相同).同花顺.同花(此种未实现,有兴趣的玩家可以自己加上,或者欢迎和我交流).顺子.对子.散牌几种类型,大小依次递减: 5)玩家先比牌的类型,如先按照

从零开始创建自己的区块链应用(JAVA版)

阅读对象 本文阅读对象,主要是希望和即将从事区块链开发的项目架构师,开发工程师,项目设计或产品设计师.要求阅读者具备一定的"区块链"基础知识.概念和以及相关的技术知识. 如果你只需要对区块链应用做一个更深更直观的了解,通过本文的例子更清晰了解区块链是怎么回事,大概是怎么开发出来的,怎么使用,那么知道一些区块链相关知识即可. 如果你是一个想从事这方面工作的人,尤其是从事开发和架构的技术人员,那么需要的技术知识就相当的多了,无法一一列举,大概一个高级网络开发工程师和中级以上的架构师水平,是

回溯算法解八皇后问题(java版)

八皇后问题是学习回溯算法时不得不提的一个问题,用回溯算法解决该问题逻辑比较简单. 下面用java版的回溯算法来解决八皇后问题. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 思路是按行来规定皇后,第一行放第一个皇后,第二行放第二个,然后通过遍历所有列,来判断下一个皇后能否放在该列.直到所有皇后都放完,或者放哪

AKKA文档(java版)

目前我正在翻译AKKA官网文档.翻译:吴京润 译者注:本人正在翻译AKKA官网文档,本篇是文档第一章,欢迎有兴趣的同学加入一起翻译.更多内容请读这里:https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/lists/ded96c34f7ce4a6bb8b5473f596e1008/show/https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/todos/640e53d