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

纸牌游戏(基于集合,和自定义排序实现)

寻找需要的类

        1.房间类,用来控制游戏的开始

        2.纸牌类,包含花色,大小,用来排序的value值。

流程:创建54张牌,51张随机发三个玩家(创建一个集合存牌),最后三张随机发个一个玩家当地主,创建排序方法对牌进行排序。

card类

        

package com.jjt.game_an_li;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class card {private String size;private String color;private int value;//重写打印方式@Overridepublic String toString() {return  color + size;}
}

 //运行的主函数

package com.jjt.game_an_li;public class an_li_dou_di_zhu {public static void main(String[] args) {//目标开发斗地主游戏//1.每张牌都是一个对象,定义牌类//游戏房间也是一个对象//三个玩家一个房间room_card room = new room_card();room.start();//启动房间}
}

 

   房间类

package com.jjt.game_an_li;import java.util.*;
import java.util.stream.Collectors;public class room_card {//启动游戏,准备54张牌,给房间使用//定义容器装牌private List<card> cards=new ArrayList<>();}

初始化:我们需要准备54张牌,方法构造器,代码块

代码块初始化

        

   //初始化54张排牌,(与创建对象时候一起调用,比构造器快)利用示例代码块,初始化{//准备点数String[] sizes={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};//准备花色String[] colors={"♥","♠","♣","♦"};//准备牌//indexd代表牌的价值方便排序int index=1;for(String size:sizes){for(String color:colors){cards.add(new card(color,size,index));}index++;}
//        cards.add(new card("","大王"));
//        cards.add(new card("","小王"));//高级写法,Collections的方法Collections.addAll(cards, new card("","大王",index+2),new card("","小王",index+1));}

start开始方法 

public void start(){//打乱顺序Collections.shuffle(cards);System.out.println("洗牌后:"+cards);//发牌:定义三个玩家 令狐冲、令狐白、令狐黄,每个人都有17张牌,利用map容器Map<String,List<card>> players=new HashMap<>();List<card> player1=new ArrayList<>();players.put("令狐冲",player1);List<card> player2=new ArrayList<>();players.put("令狐白",player2);List<card> player3=new ArrayList<>();players.put("令狐黄",player3);//只发51张牌,剩余3张牌当底牌for(int i=0;i<cards.size();i++){//随机发牌card card = cards.get(i);//发牌规则switch (i%3){case 0:player1.add(card);break;case 1:player2.add(card);break;case 2:player3.add(card);break;}//}//拿三张底牌List<card> lastcards=cards.subList(cards.size()-3,cards.size());//三张底牌随机给一个玩家int index1=new Random().nextInt(3);switch (index1){case 0:player1.addAll(lastcards);break;case 1:player2.addAll(lastcards);break;case 2:player3.addAll(lastcards);break;}//对排排序(实现类的自定义排序)//Collections自定义排序//写一个排序方法sortcard(player1);sortcard(player2);sortcard(player3);//使用Stream流对玩家List<card> player1=new ArrayList<>();的牌进行排序//排完序后需要返回集合利用collect,不建议,最好用Collectors。sort自定义排序//看牌遍历map集合for(Map.Entry<String,List<card>> entry:players.entrySet()){String name = entry.getKey();List<card> value = entry.getValue();System.out.println(name+"的牌:"+value);}}//牌排序方法public void sortcard(List<card> cards){Collections.sort(cards, new Comparator<card>() {public int compare(card o1, card o2){//牌里面有很多排序规则,不好写怎么办,重新写一个排序规则,给每个牌设置一个大小判断数字return o2.getValue()-o1.getValue();}});}

相关文章:

  • MIAOYUN受邀参加“创投天府·周周见”活动,以AI原生技术赋能科创产业新生态
  • 2000-2023年各地级市进出口总额/地级市对外经济贸易数据
  • Python图像处理基础(四)
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何控制高斯椭球
  • 详解osgb的顶点,纹理,索引,UV读取与存储
  • PyQt学习系列04-多线程与异步编程
  • 3362. 零数组变换 III
  • Honeywell CV-DINA-DI1624-2A 数字输入模块
  • 【Web前端】JavaScript入门与基础(一)
  • 【软件测试】第三章·软件测试基本方法(逻辑覆盖、路径覆盖)
  • Redis 缓存使用的BigKey问题
  • Cesium基础对象介绍
  • MySQL别名规则与应用场景
  • 矩阵详解:线性代数在AI大模型中的核心支柱
  • 【ICL】上下文学习
  • 英语写作中“假设”suppose, assume, presume 的用法
  • Arthas(阿尔萨斯)
  • C++高效求解非线性方程组的实践指南
  • 第一个Python程序
  • 主类网络和无类网络,什么是主类网络边界
  • 大连开发网站建设/属于seo网站优化
  • 仪征市建设发展有限公司网站/怎么建立网站平台
  • 重庆网站优化排名/中国没有限制的搜索引擎
  • 域名解析网站登录/福州专业的seo软件
  • 沈阳科技网站建设/郑州网站建设外包
  • 石家庄网站排名/网站改版公司哪家好