德州扑克同花顺Demo(Java实现)

同花顺 java 实现

需求:

一副扑克有52张牌,每张牌由一个花色和一个数字构成。
花色为以下四者之一:

方片 D
黑桃 S
红桃 H
梅花 C

数字为以下13者之一,且大小顺序如下:

2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A

花色是大小无序的,但数字有序,2最小,A最大。
一手牌有5张。根据花色和数字的不同,其大小按照以下规则决定。
满足下面规则的手牌会大于满足上面规则的手牌。

同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌

散牌
不符合其他任何规则的五张牌。 比较最大一张牌的大小,如果相同,比较第二大的牌的牌点数,如果五张牌的牌点数都相同,则为平局。
对子
有两张同样大小的牌片。 比较两张大小一样的牌的牌点数,如果相同,依次比较剩余的三张牌大小。若大小都相同,则为平局。
两对
有两个对子牌。 比较大对子的大小,若相同,比较小对子的大小,若还相同,比较单张牌的大小,若还相同,则为平局。
三条
有三张同样大小的牌片。 比较三张大小一样的牌的牌点数大小。
顺子
五张相连的牌。 比较最大的牌点数。若大小都相同,则为平局。
同花
五张牌的花色相同。 按照散排规则比较大小。
葫芦
三条+对子。 比较三张大小一样的牌的牌点数。
铁支
有四张同样大小的牌片。 比较四张大小一样的牌的牌点数。
同花顺
同一种花色的顺子。 比较最大的牌的牌的大小。若大小都相同,则为平局。

任务

你的工作是为两手牌判断大小。

实现

包含四个文件类:
Pai类:包含两个成员变量,数字和色号。
Player类:包含两个成员变量,玩家姓名及牌池。
Kanpai类及Fapai类:完成输出及随机发牌的功能性任务。
Main主函数:构建52张牌并打乱。
Compare类:完成两个玩家牌大小的比较,首先要将两个玩家手中 的牌进行排序,在按照 ” 同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌 “ 顺序进行比较。
备注:Compare类已罗列,完整代码点击此处

package demo;
import java.util.ArrayList;
import java.util.Collections;

//同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌
public class Compare {
    public static String compare(Player a, Player b) {
        String result = "Black";
        ArrayList<Pai> aList = a.getList();
        ArrayList<Pai> bList = b.getList();

        //判断牌面,先对其按照牌大小排序
        Collections.sort(aList);
        Collections.sort(bList);

        //比较
        if (IsTonghuashun(aList) || IsTonghuashun(bList)) {
            if (IsTonghuashun(aList) && IsTonghuashun(bList)) {
                int i = aList.get(0).getN();
                int j = bList.get(0).getN();
                if (i < j) {
                    return "white";
                } else if (i == j) {
                    return "ping and none";
                } else if (i > j) {
                    return result;
                }
            } else if (!IsTonghuashun(aList) && IsTonghuashun(bList)) {
                return "white";
            } else if (IsTonghuashun(aList) && !IsTonghuashun(bList)) {
                return result;
            }
        }//01.同花顺比较第一张
        else if (IsTiezhi(aList) || IsTiezhi(bList)) {
            if (IsTiezhi(aList) && IsTiezhi(bList)) {
                int i0 = aList.get(0).getN();
                int j0 = bList.get(0).getN();
                int i1 = aList.get(1).getN();
                int j1 = bList.get(1).getN();
                if (i1 < j1) {
                    return "white";
                } else if (i1 > j1) {
                    return result;
                }
            } else if (!IsTiezhi(aList) && IsTiezhi(bList)) {
                return "white";
            } else if (IsTiezhi(aList) && !IsTiezhi(bList)) {
                return result;
            }
        }//02.铁支比较第二张
        else if (IsHulu(aList) || IsHulu(bList)) {
            if (IsHulu(aList) && IsHulu(bList)) {
                int i = aList.get(2).getN();
                int j = bList.get(2).getN();
                if (i < j) {
                    return "white";
                } else if (i > j) {
                    return result;
                }
            } else if (!IsHulu(aList) && IsHulu(bList)) {
                return "white";
            } else if (IsHulu(aList) && !IsHulu(bList)) {
                return result;
            }
        }//03.葫芦比较第三张
        else if (IsTonghua(aList) || IsTonghua(bList)) {
            if (IsTonghua(aList) && IsTonghua(bList)) {
                for (int i = aList.size() - 1; i >= 0; i--) {
                    int x = aList.get(i).getN();
                    int y = bList.get(i).getN();

                    if (x == y) {
                        continue;
                    } else if (x < y) {
                        return "white";
                    } else {
                        return result;
                    }
                }
                return "ping and none";
            } else if (!IsTonghua(aList) && IsTonghua(bList)) {
                return "white";
            } else if (IsTonghua(aList) & !IsTonghua(bList)) {
                return result;
            }
        }//04.同花花色一致时按散牌大小比较
        else if (IsShunzi(aList) || IsShunzi(bList)) {
            if (IsShunzi(aList) && IsShunzi(bList)) {
                int i = aList.get(0).getN();
                int j = bList.get(0).getN();
                if (i < j) {
                    return "white";
                } else if (i == j) {
                    return "ping and none";
                } else if (i > j) {
                    return result;
                }
            } else if (!IsShunzi(aList) && IsShunzi(bList)) {
                return "white";
            } else if (IsShunzi(aList) && !IsShunzi(bList)) {
                return result;
            }
        }//05.顺子比较第一张
        else if (IsSantiao(aList) || IsSantiao(bList)) {
            if (IsSantiao(aList) && IsSantiao(bList)) {
                int i = aList.get(2).getN();
                int j = bList.get(2).getN();
                if (i < j) {
                    return "white";
                } else if (i > j) {
                    return result;
                }
            } else if (!IsSantiao(aList) && IsSantiao(bList)) {
                return "white";
            } else if (IsSantiao(aList) && !IsSantiao(bList)) {
                return result;
            }
        }//06.三条
        else if (IsLiangdui(aList) || IsLiangdui(bList)) {
            if (IsLiangdui(aList) && IsLiangdui(bList)) {
                int a4 = aList.get(4).getN();
                int b4 = bList.get(4).getN();
                int[] a_liangdui = getLiangdui(aList);
                int[] b_liangdui = getLiangdui(bList);
                if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] == b_liangdui[0]) {
                    int aNum = 0, bNum = 0;
                    for (int i = 0; i < aList.size(); i++) {
                        int listNum = aList.get(i).getN();
                        if (listNum != a_liangdui[0] && listNum != a_liangdui[1]) {
                            aNum = listNum;
                            break;
                        }
                    }
                    for (int i = 0; i < bList.size(); i++) {
                        int listNum = bList.get(i).getN();
                        if (listNum != b_liangdui[0] && listNum != b_liangdui[1]) {
                            bNum = listNum;
                            break;
                        }
                    }
                    if (aNum == bNum) {
                        return "ping and none";
                    } else if (aNum < bNum) {
                        return "white";
                    } else if (aNum > bNum) {
                        return result;
                    }


                } else if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] < b_liangdui[0]) {
                    return "white";
                } else if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] > b_liangdui[0]) {
                    return result;
                } else if (a_liangdui[1] < b_liangdui[1]) {
                    return "white";
                } else if (a_liangdui[1] > b_liangdui[1]) {
                    return result;
                }

            } else if (!IsLiangdui(aList) && IsLiangdui(bList)) {
                return "white";
            } else if (IsLiangdui(aList) && !IsLiangdui(bList)) {
                return result;
            }
        }//07.两对
        else if (IsDuizi(aList) || IsDuizi(bList)) {
            int a4 = aList.get(4).getN();
            int b4 = bList.get(4).getN();
            if (IsDuizi(aList) && IsDuizi(bList)) {
                int ax = getDuizi(aList);
                int bx = getDuizi(bList);
                if (ax == bx) {
                    if (a4 == b4) {
                        for (int i = aList.size() - 2; i >= 0; i--) {
                            int x = aList.get(i).getN();
                            int y = bList.get(i).getN();

                            if (x == y) {
                                continue;
                            } else if (x < y) {
                                return "white";
                            } else {
                                return result;
                            }
                        }
                        return "ping and none";
                    } else if (a4 < b4) {
                        return "white";
                    } else if (a4 > b4) {
                        return result;
                    }
                } else if (ax < bx) {
                    return "white";
                } else {
                    return result;
                }
            } else if (!IsDuizi(aList) && IsDuizi(bList)) {
                return "white";
            } else if (IsDuizi(aList) && !IsDuizi(bList)) {
                return result;
            }
        }//08.对子
        else {
            for (int i = aList.size() - 1; i >= 0; i--) {

                int x = aList.get(i).getN();
                int y = bList.get(i).getN();

                if (x == y) {
                    continue;
                } else if (x < y) {
                    return "white";
                } else {
                    return result;
                }
            }
            return "ping and none";
        }//09.散牌(散牌无需判断,最后一种肯定是散牌)
        return result;
    }

    public static boolean IsTonghuashun(ArrayList<Pai> list) {
        boolean b = false;
        //花色判断
        int color = list.get(0).getC();
        int num = list.get(0).getN();
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i).getC() != color) {
                return b;
            }
        }
        //顺子判断
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i).getN() - num != i) {
                return b;
            }
        }
        return true;
    }

    public static boolean IsTiezhi(ArrayList<Pai> list) {
        boolean b = false;
        int num0 = list.get(0).getN();
        int num1 = list.get(1).getN();

        if (num0 != num1) {
            for (int i = 1; i < list.size(); i++) {
                if (list.get(i).getN() - num1 != 0) {
                    return b;
                }
            }
        } else if (num0 == num1) {
            for (int i = 2; i < list.size() - 1; i++) {
                if (list.get(i).getN() - num1 != 0) {
                    return b;
                }
            }
        }
        return true;
    }

    public static boolean IsHulu(ArrayList<Pai> list) {
        boolean b = false;
        int num0 = list.get(0).getN();
        int num1 = list.get(1).getN();
        int num2 = list.get(2).getN();
        int num3 = list.get(3).getN();
        int num4 = list.get(4).getN();

        if (num0 != num2) {
            if (num1 != num0 || num2 != num3 || num2 != num4) {
                return b;
            }
        } else if (num0 == num2) {
            if (num1 != num0 || num3 != num4) {
                return b;
            }
        }
        return true;
    }

    public static boolean IsTonghua(ArrayList<Pai> list) {
        boolean b = false;
        int color = list.get(0).getC();
        int num = list.get(0).getN();
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i).getC() != color) {
                return b;
            }
        }
        return true;
    }

    public static boolean IsShunzi(ArrayList<Pai> list) {
        boolean b = false;
        int num = list.get(0).getN();
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i).getN() - num != i) {
                return b;
            }
        }
        return true;
    }

    public static boolean IsSantiao(ArrayList<Pai> list) {
        boolean b = true;
        int num0 = list.get(0).getN();
        int num1 = list.get(1).getN();
        int num2 = list.get(2).getN();
        int num3 = list.get(3).getN();
        int num4 = list.get(4).getN();
        if (num1 == num2 && num0 == num2) {
            return b;
        } else if (num1 == num2 && num3 == num2) {
            return b;
        } else if (num3 == num2 && num4 == num2) {
            return b;
        }

        return false;
    }

    public static boolean IsLiangdui(ArrayList<Pai> list) {
        boolean b = true;
        int num0 = list.get(0).getN();
        int num1 = list.get(1).getN();
        int num2 = list.get(2).getN();
        int num3 = list.get(3).getN();
        int num4 = list.get(4).getN();
        if (num0 != num1) {
            if (num1 == num2 && num3 == num4) {
                return b;
            }
        } else if (num0 == num1) {
            if (num2 != num3) {
                if (num3 == num4) {
                    return b;
                }
            } else if (num2 == num3) {
                return b;
            }
        }
        return false;
    }

    public static boolean IsDuizi(ArrayList<Pai> list) {
        boolean b = true;
        int num0 = list.get(0).getN();
        int num1 = list.get(1).getN();
        int num2 = list.get(2).getN();
        int num3 = list.get(3).getN();
        int num4 = list.get(4).getN();
        if (num0 == num1 || num1 == num2 || num2 == num3 || num3 == num4) {
            return b;
        }
        return false;
    }

    public static int getDuizi(ArrayList<Pai> list) {
        int dui = 0;
        for (int i = 0; i < list.size() - 1; i++) {
            int x = list.get(i).getN();
            int y = list.get(i + 1).getN();
            if (x == y) {
                dui = x;
                break;
            }
        }
        return dui;
    }

    public static int[] getLiangdui(ArrayList<Pai> list) {
        int[] liangdui = {0, 0};
        int smallNum = list.get(1).getN();
        int bigNum = list.get(3).getN();
        int max;
        if (smallNum > bigNum) {
            max = smallNum;
            bigNum = max;
            smallNum = bigNum;
        }
        liangdui[0] = smallNum;
        liangdui[1] = bigNum;
        return liangdui;
    }
}

备注

笔者第一次使用CSDN,向各位大神学习。请大家给我点赞赞!!!转载请注明出处~~~~哈哈哈,虽然没人看,仪式感总要有的!!!

你可能感兴趣的:(java)