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

ops/2025/3/1 8:36:15/

 卡牌类

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;}
}

 玩家类

java">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 + "}";}
}

游戏类(程序入口)

java">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大的问题,这里体现了面向对象的思想。


http://www.ppmy.cn/ops/162185.html

相关文章

51单片机-串口通信编程

串行口工作之前&#xff0c;应对其进行初始化&#xff0c;主要是设置产生波特率的定时器1、串行口控制盒中断控制。具体步骤如下&#xff1a; 确定T1的工作方式&#xff08;编程TMOD寄存器&#xff09;计算T1的初值&#xff0c;装载TH1\TL1启动T1&#xff08;编程TCON中的TR1位…

【FL0087】基于SSM和微信小程序的民宿短租系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

北京大学DeepSeek提示词工程与落地场景(PDF无套路免费下载)

近年来&#xff0c;大模型技术飞速发展&#xff0c;但许多用户发现&#xff1a;即使使用同一款 AI 工具&#xff0c;效果也可能天差地别——有人能用 AI 快速生成精准方案&#xff0c;有人却只能得到笼统回答。这背后的关键差异&#xff0c;在于提示词工程的应用能力。 北京大…

吃一堑长一智

工作中经历&#xff0c;有感触记录下 故事一 以前在一家公司时&#xff0c;自己是一名开发人员&#xff0c;遇到问题请教领导解决方案&#xff0c;当时领导给了建议&#xff0c;后来上线后出问题了&#xff0c;背了锅。心里想的是领导说这样做的呀&#xff0c;为什么出问题还…

Python测试框架Pytest的参数化

上篇博文介绍过&#xff0c;Pytest是目前比较成熟功能齐全的测试框架&#xff0c;使用率肯定也不断攀升。 在实际工作中&#xff0c;许多测试用例都是类似的重复&#xff0c;一个个写最后代码会显得很冗余。这里&#xff0c;我们来了解一下pytest.mark.parametrize装饰器&…

多模块 Maven 项目的管理(一)

为什么选择多模块 Maven 项目 在 Java 项目开发的版图中&#xff0c;Maven 早已成为构建和依赖管理的中流砥柱 。而随着项目规模的不断膨胀&#xff0c;功能的日益复杂&#xff0c;单模块 Maven 项目逐渐显得力不从心&#xff0c;多模块 Maven 项目应运而生&#xff0c;成为大…

【网络安全 | 漏洞挖掘】利用文件上传功能的 IDOR 和 XSS 劫持会话

未经许可,不得转载。 本文涉及漏洞均已修复。 文章目录 前言正文前言 想象这样一个场景:一个专门处理敏感文档的平台,如保险理赔或身份验证系统,却因一个设计疏漏而成为攻击者的“金矿”。在对某个保险门户的文件上传功能进行测试时,我意外发现了一个可导致大规模账户接管…

在VSCode 中使用通义灵码最新版详细教程

在 VSCode 中使用通义灵码&#xff1a;最新版详细教程与使用场景 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发的轻量级、功能强大的开源代码编辑器&#xff0c;支持多种编程语言&#xff0c;深受开发者喜爱。而通义灵码&#xff08;TONGYI Lingma…