JAVA学习--扎金花

JAVA编写扎金花


import java.util.ArrayList;
import java.util.Random;

/**
 * 砸金花游戏 程序开始时要用户输入赌注,并在一副牌中随机发两手牌, 每手牌三张,然后比较这两手牌的大小,若A比B大, 则用户赢得赌注,反之,则输掉赌注。
 * 每手牌的大小比较规则:
 *  1 三条>同花顺>同花>顺子>对子>单张
 *  2 处于一级别的两手牌比较最大的一张牌的大小
 *  3 若两手牌同为同一级别且最大的一张牌一样,则比较剩下的牌
 */
public class Cards {
    static Random random = new Random();
    /**
     * 所有的牌13*4=52 第一位1表示黑桃,2表示红桃,3表示草花,4表示方块 后两位表示大小14表示A,13表示K。。。。02表示2
     */

    static ArrayList<Integer> allCards = new ArrayList<Integer>() {
        {
            add(114);
            add(113);
            add(112);
            add(111);
            add(110);
            add(109);
            add(108);
            add(107);
            add(106);
            add(105);
            add(104);
            add(103);
            add(102);
            add(214);
            add(213);
            add(212);
            add(211);
            add(210);
            add(209);
            add(208);
            add(207);
            add(206);
            add(205);
            add(204);
            add(203);
            add(202);
            add(314);
            add(313);
            add(312);
            add(311);
            add(310);
            add(309);
            add(308);
            add(307);
            add(306);
            add(305);
            add(304);
            add(303);
            add(302);
            add(414);
            add(413);
            add(412);
            add(411);
            add(410);
            add(409);
            add(408);
            add(407);
            add(406);
            add(405);
            add(404);
            add(403);
            add(402);
        }
    };

    static int personOne[] = new int[3];
    static int personTwo[] = new int[3];

    public static void main(String[] args) {
        // 发牌
        deal();
        // 判断级别
        int i = rank(personOne);
        int j = rank(personTwo);
        // 判断大小
        determine(i, j);

    }

    // 随机发牌
    public static void deal() {
        for (int i = 0; i < 3; i++) {
            int k = random.nextInt(allCards.size());
            personOne[i] = allCards.get(k);
            allCards.remove(k);
        }
        // System.out.println(personOne[0] + " " + personOne[1] + " "+
        // personOne[2] + " ");
        System.out.print("玩家1的牌:");
        change(personOne);

        for (int i = 0; i < 3; i++) {
            int k = random.nextInt(allCards.size());
            personTwo[i] = allCards.get(k);
            allCards.remove(k);
        }
        // System.out.println(personTwo[0] + " " + personTwo[1] + " "+
        // personTwo[2] + " ");
        System.out.print("玩家2的牌:");
        change(personTwo);

    }

    // 所发的牌所属的级别
    public static int rank(int person[]) {
        // 用i的大小表示豹子(i=6)>同花顺(5)>同花(4)>顺子(3)>对子(2)>单张(1)
        int i = 0;
        // 三张牌的花色
        int huase1 = person[0] / 100;
        int huase2 = person[1] / 100;
        int huase3 = person[2] / 100;
        // 三张牌的大小
        int daxiao1 = person[0] - person[0] / 100 * 100;
        int daxiao2 = person[1] - person[1] / 100 * 100;
        int daxiao3 = person[2] - person[2] / 100 * 100;
        // 三张牌中最大的
        int big = daxiao1 > daxiao2 ? daxiao1 : daxiao2;
        int max = big > daxiao3 ? big : daxiao3;
        // 三张牌中最小的
        int small = daxiao1 < daxiao2 ? daxiao1 : daxiao2;
        int min = small < daxiao3 ? small : daxiao3;
        // 三张牌中处于中间的
        int mid;
        if (daxiao1 != max && daxiao1 != min) {
            mid = daxiao1;
        } else if (daxiao2 != max && daxiao2 != min) {
            mid = daxiao2;
        } else {
            mid = daxiao3;
        }

        if (daxiao1 == daxiao2 && daxiao2 == daxiao3) {// 豹子
            i = 6;
            System.out.println("豹子!");
        } else if ((huase1 == huase2 && huase2 == huase3)
                && (max - min == 2 && daxiao1 != daxiao3 && daxiao2 != daxiao3 && daxiao1 != daxiao2)) {// 同花顺
            i = 5;
            System.out.println("同花顺!");
        } else if (huase1 == huase2 && huase2 == huase3) {// 同花
            i = 4;
            System.out.println("同花!");
        } else if (max - min == 2 && daxiao1 != daxiao3 && daxiao2 != daxiao3
                && daxiao1 != daxiao2) {// 顺子
            i = 3;
            System.out.println("顺子!");
        } else if ((daxiao1 == daxiao2) || (daxiao3 == daxiao2)
                || (daxiao1 == daxiao3)) {// 对子
            i = 2;
            System.out.println("对子!");
        } else {// 单张
            i = 1;
            System.out.println("单张!");
        }
        return i;
    }

    // 判断两人牌面的大小
    public static int determine(int i, int j) {
        if (i > j) {
            System.out.println("玩家1获胜!");
        } else if (i < j) {
            System.out.println("玩家2获胜!");
        } else if (i == j) {
            // 玩家1三张牌的大小
            int Onedaxiao1 = personOne[0] - personOne[0] / 100 * 100;
            int Onedaxiao2 = personOne[1] - personOne[1] / 100 * 100;
            int Onedaxiao3 = personOne[2] - personOne[2] / 100 * 100;
            // 玩家1三张牌中最大的
            int Onebig = Onedaxiao1 > Onedaxiao2 ? Onedaxiao1 : Onedaxiao2;
            int Onemax = Onebig > Onedaxiao3 ? Onebig : Onedaxiao3;
            // 玩家1三张牌中最小的
            int Onesmall = Onedaxiao1 < Onedaxiao2 ? Onedaxiao1 : Onedaxiao2;
            int Onemin = Onesmall < Onedaxiao3 ? Onesmall : Onedaxiao3;
            // 玩家1三张牌中处于中间的
            int Onemid;
            if (Onedaxiao1 != Onemax && Onedaxiao1 != Onemin) {
                Onemid = Onedaxiao1;
            } else if (Onedaxiao2 != Onemax && Onedaxiao2 != Onemin) {
                Onemid = Onedaxiao2;
            } else {
                Onemid = Onedaxiao3;
            }

            // 玩家2三张牌的大小
            int Twodaxiao1 = personTwo[0] - personTwo[0] / 100 * 100;
            int Twodaxiao2 = personTwo[1] - personTwo[1] / 100 * 100;
            int Twodaxiao3 = personTwo[2] - personTwo[2] / 100 * 100;
            // 玩家2三张牌中最大的
            int Twobig = Twodaxiao1 > Twodaxiao2 ? Twodaxiao1 : Twodaxiao2;
            int Twomax = Twobig > Twodaxiao3 ? Twobig : Twodaxiao3;
            // 玩家2三张牌中最小的
            int Twosmall = Twodaxiao1 < Twodaxiao2 ? Twodaxiao1 : Twodaxiao2;
            int Twomin = Twosmall < Twodaxiao3 ? Twosmall : Twodaxiao3;
            // 玩家2三张牌中处于中间的
            int Twomid;
            if (Twodaxiao1 != Twomax && Twodaxiao1 != Twomin) {
                Twomid = Twodaxiao1;
            } else if (Twodaxiao2 != Twomax && Twodaxiao2 != Twomin) {
                Twomid = Twodaxiao2;
            } else {
                Twomid = Twodaxiao3;
            }

            if (Onemax > Twomax) {
                System.out.println("玩家1获胜!");
            } else if (Onemax < Twomax) {
                System.out.println("玩家2获胜!");
            } else if (Onemax == Twomax && Onemid > Twomid) {
                System.out.println("玩家1获胜!");
            } else if (Onemax == Twomax && Onemid < Twomid) {
                System.out.println("玩家2获胜!");
            } else if (Onemax == Twomax && Onemid == Twomid && Onemin > Twomin) {
                System.out.println("玩家1获胜!");
            } else if (Onemax == Twomax && Onemid == Twomid && Onemin < Twomin) {
                System.out.println("玩家2获胜!");
            } else {
                System.out.println("玩家1和玩家2牌一样大!");
            }
        }
        return 0;

    }

    // 将牌以数组转换为字符串表示
    public static void change(int person[]) {
        String huase = null;
        String daxiao = null;
        for (int i = 0; i < 3; i++) {
            int huaSe = person[i] / 100;
            int daXiao = person[i] - person[i] / 100 * 100;
            // System.out.println(huaSe + " " + daXiao);

            switch (huaSe) {
            case 1:
                huase = "黑桃";
                break;
            case 2:
                huase = "红桃";
                break;
            case 3:
                huase = "草花";
                break;
            case 4:
                huase = "方块";
                break;
            }

            switch (daXiao) {
            case 14:
                daxiao = "A";
                break;
            case 13:
                daxiao = "K";
                break;
            case 12:
                daxiao = "Q";
                break;
            case 11:
                daxiao = "J";
                break;
            case 10:
                daxiao = "10";
                break;
            case 9:
                daxiao = "9";
                break;
            case 8:
                daxiao = "8";
                break;
            case 7:
                daxiao = "7";
                break;
            case 6:
                daxiao = "6";
                break;
            case 5:
                daxiao = "5";
                break;
            case 4:
                daxiao = "4";
                break;
            case 3:
                daxiao = "3";
                break;
            case 2:
                daxiao = "2";
                break;
            }
            System.out.print(huase + daxiao + " ");
        }
        System.out.println();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值