java斗牛,咋金花

简介: java斗牛,咋金花

1.创建牌对象

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

3.洗牌

4.发牌

/**
 * 扑克牌
 */
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;
    }
}
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();
        });
    }
}


相关文章
|
存储 Java
【Java】斗地主和斗牛游戏
一、前言 1.斗地主: 1.1运行结果: 2.斗地主升级版 2.1原理: 2.2运行结果: 3.斗牛游戏: 3.1运行结果:
177 0
【Java】斗地主和斗牛游戏
|
5天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
4天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
1天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点
|
2天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
4天前
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?
|
5天前
|
缓存 Java
Java并发编程:深入理解线程池
【4月更文挑战第26天】在Java中,线程池是一种重要的并发工具,它可以有效地管理和控制线程的执行。本文将深入探讨线程池的工作原理,以及如何使用Java的Executor框架来创建和管理线程池。我们将看到线程池如何提高性能,减少资源消耗,并提供更好的线程管理。
|
5天前
|
Java UED
Java并发编程:理解并应用线程池
【4月更文挑战第25天】在处理并发问题时,线程池是Java中一种重要的工具。本文将探讨线程池的概念、优势以及如何在Java程序中有效地使用它。我们将详细解释线程池的工作原理,并通过示例来使其更加易于理解。
|
5天前
|
监控 Java 调度
Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现
Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现
|
5天前
|
设计模式 Java
Java多线程实战-从零手搓一个简易线程池(三)线程工厂,核心线程与非核心线程逻辑实现
Java多线程实战-从零手搓一个简易线程池(三)线程工厂,核心线程与非核心线程逻辑实现