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

【自用】JavaSE--集合框架(一)--斗地主案例

不包含打牌的环节,简单的创建初始牌、洗牌、发牌、看牌功能

主代功能 

public class Show {public void start(){//创建角色List<Person> people = new ArrayList<>();people.add(new Person("玩家1"));people.add(new Person("玩家2"));people.add(new Person("玩家3"));//创建初始牌LinkedList<Card> cards = CreatCard();System.out.print("初始牌:");System.out.println(cards);//洗牌System.out.println("洗牌中...");Collections.shuffle(cards);System.out.println("洗牌完成!");System.out.println(cards);System.out.println("开始发牌!");//System.out.println(cards);//给每个玩家发牌,发 51张,一人17张SendCard(people,cards);//给每个玩家手中的牌排序SortCard(people);//展示每个玩家的牌PrintPlayerCard(people);//剩下的牌就是地主牌System.out.print("地主牌:");System.out.println(cards);}//准备好有序的54张牌private LinkedList<Card> CreatCard(){String[] name = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};String[] type = {"黑桃","红桃","梅花","方块"};LinkedList<Card> cards = new LinkedList<>();for(int i=0;i<15;i++){if(i!=13 && i!=14){for(int j=0;j<4;j++){Card card = new Card(name[i],type[j],i);cards.add(card);}}else{Card card = new Card(name[i],"none",i);cards.add(card);}}return cards;}//发牌,发一张删一张,剩下的就是地主牌private void SendCard(List<Person> people,LinkedList<Card> cards){while(cards.size()>3){for(int j=0;j<people.size();j++){people.get(j).getCards().add(cards.removeFirst());}}}//给牌排序private void SortCard(List<Person> people){for(int i=0;i<people.size();i++){List<Card> cards = people.get(i).getCards();Collections.sort(cards, new Comparator<Card>() {@Overridepublic int compare(Card o1, Card o2) {return o1.getSize() - o2.getSize();}});}}//展示每个玩家手中的牌private void PrintPlayerCard(List<Person> people){for(int i=0;i<people.size();i++){System.out.print("玩家"+(i+1)+"的牌:");for(int j=0;j<people.get(i).getCards().size();j++){Card card = people.get(i).getCards().get(j);if(!(card.getName().equals("小王")) && !(card.getName().equals("大王"))){System.out.print(card.getName()+","+card.getType()+" ");}else{System.out.print(card.getName()+" ");}}System.out.println();}}
}

数据模板

//每一张牌的信息
public class Card {private String name; //3 4 5 ... A 2 小王 大王private String type; //黑桃、红桃、梅花、方块private int size;  //每张牌的大小public Card() {}public Card(String name, String type, int size) {this.name = name;this.type = type;this.size = size;}@Overridepublic String toString() {returnname  +"," + type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}
}
//玩家
public class Person{private String name;private ArrayList<Card> cards = new ArrayList<>();public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public ArrayList<Card> getCards() {return cards;}public void setCards(ArrayList<Card> cards) {this.cards = cards;}
}

测试

public class Test {public static void main(String[] args) {Show show = new Show();show.start();}
}

http://www.dtcms.com/a/287589.html

相关文章:

  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版)
  • Python 常见库分类介绍及安装方法
  • 数据库第四次作业
  • 爬虫小知识三:selenium库
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • 基于Eureka和restTemple的负载均衡
  • gitlab私有化部署
  • 月舟科技近调记录
  • Kotlin内联函数
  • 访问 gitlab 跳转 0.0.0.0
  • Kotlin泛型约束
  • QGIS新手教程10:专题图制作与图层渲染技巧全攻略(含分类与渐变)
  • 【通识】PCB文件
  • Elastic Search 8.x 分片和常见性能优化
  • IntelliJ IDEA中Mybatis的xml文件报错解决
  • 在Tailwind Css中如何书写flex布局
  • Linux C 信号操作
  • MCP 协议详细分析一 initialize ping tools/list tools/call
  • 13.5 Meta LLaMA 2核心技术拆解:4T数据训练+30%显存优化,70B模型准确率82.6%
  • Android Auto 即将推出新功能
  • LeetCode|Day19|14. 最长公共前缀|Python刷题笔记
  • Java无服务架构新范式:Spring Native与AWS Lambda冷启动深度优化
  • KVM中使用桥接模式.运维就业技术教程
  • NLP中情感分析与观念分析、价值判断、意图识别的区别与联系,以及四者在实际应用中的协同
  • 枚举类高级用法
  • 实验-链路聚合
  • Java多线程基础详解:从实现到线程安全
  • 面向运维智能的可扩展多智能体AI系统设计
  • Node.js:EventEmitter、Buffer
  • Nestjs框架: RxJS 核心方法实践与错误处理详解