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

server/2025/2/26 17:31:45/

 卡牌类

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/server/170806.html

相关文章

请谈谈 React 中的状态管理,如何使用 Context API 和 Redux 进行状态管理?

一、Context API 深度应用 1. 核心实现原理 通过createContext创建上下文对象&#xff0c;使用Provider组件包裹需要共享状态的组件树&#xff0c;子组件通过useContext Hook或Consumer组件消费数据。 代码示例&#xff08;主题切换场景&#xff09;&#xff1a; // 创建上…

【Mysql】我在广州学Mysql 系列——Mysql 性能优化

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天又是美好的星期一了&#xff0c;新的工作又要开始了&#xff0c;努力&#xff01;&#xff01;奋斗&#xff01;&#xff01;&#x1f606; 本文是针对Mysql 性能优化知识进行学习与讨论&#xff0c;后续将添加更多相关知识噢…

华为昇腾910b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250&#xff0c;先看看配置。之前是部署的讯飞大模型&#xff0c;发现资源利用率太低了。把5台减少到3台&#xff0c;就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘&#xff0c;500G的系统盘&#xff0c; 2块3T固态…

Http模块及练习

### 作业 1. 静态文件服务器 js const http await import(http) const fs await import(fs) const proc ((req,res)>{ let file ./public${req.url} let FilePath file.replace(favicon.ico,"") // 检查文件是否存在 if (!fs.existsSync(FilePa…

二叉树练习题

目录 练习题1&#xff1a;单值二叉树 1.判断二叉树是单值二叉树的思路 2.代码实现 练习题2&#xff1a;检查两颗树是否相同 1.判断两棵树是相同的树的思路 2.代码实现 练习题3&#xff1a;翻转二叉树 1.翻转二叉树的思路 2.代码实现 练习题4&#xff1a;对称二叉树 …

Lua 面向对象

Lua 面向对象 Lua 是一种轻量级的编程语言&#xff0c;广泛用于游戏开发、嵌入式系统等领域。Lua 提供了多种编程范式&#xff0c;其中面向对象编程&#xff08;OOP&#xff09;是其中一种重要的编程范式。本文将详细介绍 Lua 的面向对象编程&#xff0c;包括类的定义、继承、…

供应链金融的学习梳理

一、采购供应链 采购供应链是企业供应链管理的起点&#xff0c;其主要目标是确保原材料和零部件的供应质量和效率&#xff0c;同时降低采购成本。在这个环节中&#xff0c;供应商关系管理系统&#xff08;SRM&#xff09;和电子采购系统&#xff08;EPS&#xff09;是两个关键…

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 反序列化

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;PHP 序列化 — Serialize 序列化就是将对象的状态信息转化为可以存储或传输的形式的过程&#xff0c;在 PHP 中&#xff0c;通常使用 serialize() 函数来完成序列化的操作…