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

embedded/2025/2/28 18:48:49/

 卡牌类

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/embedded/168854.html

相关文章

35. Spring Boot 2.1.3.RELEASE 应用监控【监控信息可视化】

在 Spring Boot 2.1.3.RELEASE 中实现监控信息可视化可以通过多种方式&#xff0c;下面为你详细介绍使用 Spring Boot Actuator 结合 Grafana 和 Prometheus 以及使用 Spring Boot Admin 这两种常见方法。 方法一&#xff1a;Spring Boot Actuator Grafana Prometheus 1. 添…

LE AUDIO广播学习笔记之BASE

背景需求 首先看一个有着实际需求情形的列子&#xff1a;比如有个足球吧里&#xff0c;屏幕上正在播放一场国际足球赛&#xff0c;这个吧里有英国人&#xff0c;西班牙人&#xff0c;中国人&#xff0c;德国人等等&#xff0c;大家都在一个屏幕上看球赛&#xff0c;这个时候&a…

蓝桥杯 Java B 组之最短路径算法(Dijkstra、Floyd-Warshall)

Day 2&#xff1a;最短路径算法&#xff08;Dijkstra、Floyd-Warshall&#xff09; &#x1f4d6; 一、最短路径算法简介 最短路径问题是图论中的经典问题&#xff0c;主要用于求解 单源最短路径 或 多源最短路径。在实际应用中&#xff0c;最短路径广泛应用于 导航系统、网络…

基于SSM实现的bbs论坛系统功能实现四

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的不断进步和普及&#xff0c;网络社区已成为人们获取信息、交流意见、分享经验的重要场所。BBS&#xff08;Bulletin Board System&#xff0c;电子公告板系统&#xff09;论坛系统作为网络社区的一种重要形式&#xf…

深入浅出Spring Boot框架:从入门到精通

引言 在现代软件开发中&#xff0c;Java 语言及其生态系统一直是构建企业级应用的首选之一。Spring Boot 是 Java 社区中最具影响力的项目之一&#xff0c;它继承了 Spring 框架的优点&#xff0c;并通过简化配置和加速开发流程&#xff0c;使得开发者能够更加专注于业务逻辑的…

每天一个Flutter开发小项目 (4) : 构建收藏地点应用 - 深入Flutter状态管理

引言 欢迎回到 每天一个Flutter开发小项目 系列博客!在前三篇博客中,我们从零开始构建了计数器应用、待办事项列表应用,以及简易天气应用。您不仅掌握了 Flutter 的基础组件和布局,还学习了网络请求、JSON 解析等实用技能,更重要的是,我们一起探讨了高效的 Flutter 学习…

Transformer 代码剖析1 - 数据处理 (pytorch实现)

引言 Transformer 架构自《Attention Is All You Need》论文发表以来&#xff0c;在自然语言处理领域引起了巨大的变革。它摒弃了传统的循环结构&#xff0c;完全基于注意力机制&#xff0c;显著提高了处理序列数据的效率和性能。本文将通过对一个具体的项目代码结构进行详细分…

【Java从入门到起飞】流程控制语句

文章目录 1. 顺序结构2. 分支语句2.1 if-else条件判断结构2.1.1 基本语法2.1.3 if...else嵌套2.1.4 其它说明 2.2 switch-case选择结构2.2.1 基本语法2.2.3 利用case的穿透性2.2.4 if-else语句与switch-case语句比较 3. 循环语句3.1 for循环3.1.1 基本语法 3.2 while循环3.2.1 …