当前位置: 首页 > news >正文

Java实现斗地主-做牌以及对牌排序

 卡牌类

public class Card {
    private String size;//大小
    private String color;//花色
    private int value;//权值

    public Card() {
    }

    public Card(String size, String color, int value) {
        this.size = size;
        this.color = color;
        this.value = value;
    }


    public String toString(){
        return size+color;
    }

    /**
     * 获取
     * @return size
     */
    public String getSize() {
        return size;
    }

    /**
     * 设置
     * @param size
     */
    public void setSize(String size) {
        this.size = size;
    }

    /**
     * 获取
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * 获取
     * @return value
     */
    public int getValue() {
        return value;
    }

    /**
     * 设置
     * @param value
     */
    public void setValue(int value) {
        this.value = value;
    }
}

 玩家类

import java.util.List;

public class Player {
    private String name;// 玩家姓名
    private List<Card> cards;// 玩家手牌

    public Player() {
    }

    public Player(String name, List<Card> cards) {
        this.name = name;
        this.cards = cards;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return cards
     */
    public List<Card> getCards() {
        return cards;
    }

    /**
     * 设置
     * @param cards
     */
    public void setCards(List<Card> cards) {
        this.cards = cards;
    }

    public String toString() {
        return "Player{name = " + name + ", cards = " + cards + "}";
    }
}

游戏类(程序入口)

import java.util.*;

public class game {
    public static void main(String[] args) {
        //1.准备花色
        String[] colors = {"♥", "♠", "♣", "♦"};
        //2.准备点数
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        //3.准备牌
        List<Card> cards = new ArrayList<>();
        //4.添加牌 count代表权值
        int count = 0;
        for (String number : numbers) {
            count++;
            for (String color : colors) {
                cards.add(new Card(color, number, count));
            }
        }
        //5.添加大王和小王
        cards.add(new Card("🃏", "", 14));
        cards.add(new Card("👲", "", 15));
        System.out.println(cards);

        //6.洗牌
        Collections.shuffle(cards);//比for循环更优雅
        System.out.println(cards);

        //7.发牌,并且要留3张底牌
        List<Player> players = new ArrayList<>();
        players.addAll(Arrays.asList(new Player("张三", new ArrayList<>()),
        new Player("李四", new ArrayList<>()), new Player("王五", new ArrayList<>())));
        for (int i = 0; i < cards.size()-3; i++) {
            if (i%3==0){
                //如果下标取余是0,则给张三发一张
                players.get(0).getCards().add(cards.get(i));
            }else if (i%3==1){
                //如果下标取余是1,则给李四发一张
                players.get(1).getCards().add(cards.get(i));
            }else {
                //如果下标取余是2,则给王五发一张
                players.get(2).getCards().add(cards.get(i));
            }
        }
        //通过随机数把地主牌放到对应的人里面,如果随机数是0,则张三当地主。
        Random random = new Random();
        int index = random.nextInt(3);
        players.get(index).getCards().addAll(cards.subList(cards.size()-3,cards.size()));
        //根据stream流对玩家的牌进行排序
        players.forEach(player -> {
            player.getCards().sort(Comparator.comparingInt(Card::getValue));
            System.out.println(player);
        });

    }
}

程序运行结果 

 

小结

1.Collections.shuffle(cards);//比for循环更优雅代码量少,同样比stream流优雅,stream不会对对象本身操作,因此排序后还要再重新赋值,故这里不选用stream流实现排序。

2.通过对card类封装value属性可以很好的解决斗地主2比3大的问题,这里体现了面向对象的思想。

相关文章:

  • STM32 SPI Flash读写实验手册
  • KubeKey一键安装部署k8s集群和KubeSphere详细教程
  • 前端js进阶,ES6语法,包详细
  • ViT 模型介绍(一)——综述
  • VS2022配置FFMPEG库基础教程
  • 使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统
  • DeepSeek行业应用实践报告-智灵动力【112页PPT全】
  • Layer2 扩容解决方案详解
  • 人工智能(AI):科技新纪元的领航者
  • 关于使用带elementplus前缀图标的步骤
  • vmvare kali如何配置桥接模式进行上网
  • vscode无法预览Markdown在线图片链接
  • 【机器学习】【KMeans聚类分析实战】用户分群聚类详解——SSE、CH 指数、SC全解析,实战电信客户分群案例
  • CSS笔记一
  • 0_关闭防火墙、设置静态IP
  • C++/JavaScript ⭐算法OJ⭐ 链表相交
  • C++ 游戏开发:从零到英雄的进阶之旅
  • [ComfyUI]Recraft贴图开源方案,实现服装印花自由
  • Debezium 报错:“The db history topic is missing” 的处理方法
  • Fences 5深度解析:一键打造超高效整洁桌面
  • wordpress主题文章页面不显示图片/seo网站排名优化公司哪家好
  • 宁夏建设管理局网站/小说关键词自动生成器
  • 网站的基本组成部分有哪些/b站推广渠道
  • 游戏网站banner怎么做/网络营销推广方案策划书
  • 西昌市网站建设公司/一媒体app软件下载老版本
  • 腾讯的网站建设用了多少钱/最新军事动态最新消息