java斗牛,咋金花

无聊时间,打发下游戏

简单说下思路

目录

1.创建牌对象

2.创建52张牌,不包含大小王

3.洗牌

4.发牌


1.创建牌对象

2.创建52张牌,不包含大小王

3.洗牌

4.发牌

java 复制代码
/**
 * 扑克牌
 */
public class Poker {
    /**
     * 花色
     */
    private String cardSuits;

    /**
     * 数字
     */
    private int cardNum;

    /**
     * 人名
     */
    private String peopleName;

    public Poker() {

    }

    public Poker(String cardSuits, int cardNum) {
        this.cardSuits = cardSuits;
        this.cardNum = cardNum;
    }

    public Poker(String cardSuits, int cardNum, String peopleName) {
        this.cardSuits = cardSuits;
        this.cardNum = cardNum;
        this.peopleName = peopleName;
    }

    public String getCardSuits() {
        return cardSuits;
    }

    public void setCardSuits(String cardSuits) {
        this.cardSuits = cardSuits;
    }

    public int getCardNum() {
        return cardNum;
    }

    public void setCardNum(int cardNum) {
        this.cardNum = cardNum;
    }

    public String getPeopleName() {
        return peopleName;
    }

    public void setPeopleName(String peopleName) {
        this.peopleName = peopleName;
    }
}
java 复制代码
import java.util.*;

public class CardUtils {

    public static String[] strSuits = {"♠", "♥", "♣", "♦"};

    public static void main(String[] args) {
        //组装52张扑克
        List<Poker> pokerList = getPokerList();

        //洗牌
        Set<Poker> pokerSet = getPokerSet(pokerList);

        //发牌
        licensing(5,pokerSet);

    }

    /**
     * 获取一副新牌
     *
     * @return
     */
    public static List<Poker> getPokerList() {
        //组装52张扑克
        List<Poker> pokerList = new ArrayList<>();
        for (int i = 0; i < strSuits.length; i++) {
            for (int j = 1; j <= 13; j++) {
                Poker poker = new Poker(strSuits[i], j);
                pokerList.add(poker);
            }
        }

        System.out.println("======新牌=====未打乱顺序 begin======");
        pokerList.forEach(l -> System.out.print(l.getCardSuits() + l.getCardNum() + "===="));
        System.out.println();
        System.out.println("======新牌=====未打乱顺序  end======");
        System.out.println();

        return pokerList;
    }

    /**
     * 洗牌
     *
     * @param pokerList
     * @return
     */
    public static Set<Poker> getPokerSet(List<Poker> pokerList) {
        //打乱顺序
        Set<Poker> pokerSet = new HashSet<>();
        Random random = new Random();
        while (pokerSet.size() < pokerList.size()) {
            pokerSet.add(pokerList.get(random.nextInt(pokerList.size())));
        }

        //重新洗牌之后的顺序
        System.out.println("======洗牌======打乱顺序 begin======");
        pokerSet.forEach(l -> System.out.print(l.getCardSuits() + l.getCardNum() + "===="));
        System.out.println();
        System.out.println("======洗牌======打乱顺序  end======");
        System.out.println();

        return pokerSet;
    }


    /**
     * 发牌(不得超过10人)
     *
     * @param num      几人再玩
     * @param pokerSet 打乱顺序的牌
     */
    public static void licensing(int num, Set<Poker> pokerSet) {
        if (num < 2 || num > 10) {
            System.out.println("参与人数不得小于2人或者大于10人");
            return;
        }
        //针对每个人的集合====几个人玩就循环几次
        List<List<Poker>> peopleList = new ArrayList();
        for (int i = 0; i < num; i++) {
            List<Poker> list = new ArrayList<>();
            peopleList.add(list);
        }
        //已发过的牌
        List<Poker> tempList = new ArrayList<>();

        //发牌    3人  每人5张
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < peopleList.size(); j++) {
                List<Poker> pokers = peopleList.get(j);
                Poker poker = pokerSet.iterator().next();
                poker.setPeopleName("持牌者" + j);
                pokers.add(poker);
                tempList.add(poker);
                pokerSet.remove(poker);
                continue;
            }
        }

        System.out.println("======已发过的牌 begin======");
        tempList.forEach(l -> System.out.print(l.getCardSuits() + l.getCardNum() + "===="));
        System.out.println();
        System.out.println("======已发过的牌 end======");
        System.out.println();
        System.out.println("======剩余的牌 begin======");
        pokerSet.forEach(l -> System.out.print(l.getCardSuits() + l.getCardNum() + "===="));
        System.out.println();
        System.out.println("======剩余的牌 end======");
        System.out.println();
        peopleList.forEach(pl -> {
            System.out.println("======分割线======" + pl.get(0).getPeopleName());
            pl.forEach(poker -> System.out.print(poker.getCardSuits() + poker.getCardNum() + "===="));
            System.out.println();
        });
    }
}
相关推荐
我喜欢就喜欢7 分钟前
RapidFuzz-CPP:高效字符串相似度计算的C++利器
开发语言·c++
莫彩10 分钟前
【Modern C++ Part7】_创建对象时使用()和{}的区别
开发语言·c++
经典199214 分钟前
spring boot 详解以及原理
java·spring boot·后端
星光542215 分钟前
飞算JavaAI:给Java开发装上“智能引擎”的超级助手
java·开发语言
课堂剪切板38 分钟前
ch07 题解
算法·深度优先
June bug44 分钟前
【Python基础】变量、运算与内存管理全解析
开发语言·python·职场和发展·测试
醇醛酸醚酮酯44 分钟前
Qt项目锻炼——TODO(五)
开发语言·qt
学习3人组44 分钟前
JVM GC长暂停问题排查
java
R_AirMan1 小时前
深入浅出Redis:一文掌握Redis底层数据结构与实现原理
java·数据结构·数据库·redis
蹦蹦跳跳真可爱5891 小时前
Python----OpenCV(几何变换--图像平移、图像旋转、放射变换、图像缩放、透视变换)
开发语言·人工智能·python·opencv·计算机视觉