Java基础:Collections集合、Map集合综合案例 —— 斗地主

public class Poker {

public static void main(String[] args) {

/*

  • 1: 准备牌操作

*/

//1.1 创建牌盒 将来存储牌面的

ArrayList pokerBox = new ArrayList();

//1.2 创建花色集合

ArrayList colors = new ArrayList();

//1.3 创建数字集合

ArrayList numbers = new ArrayList();

//1.4 分别给花色 以及 数字集合添加元素

colors.add(“♥”);

colors.add(“♦”);

colors.add(“♠”);

colors.add(“♣”);

for(int i = 2;i<=10;i++){

numbers.add(i+“”);

}

numbers.add(“J”);

numbers.add(“Q”);

numbers.add(“K”);

numbers.add(“A”);

//1.5 创造牌 拼接牌操作

// 拿出每一个花色 然后跟每一个数字 进行结合 存储到牌盒中

for (String color : colors) {

//color每一个花色

//遍历数字集合

for(String number : numbers){

//结合

String card = color+number;

//存储到牌盒中

pokerBox.add(card);

}

}

//1.6大王小王

pokerBox.add(“小☺”);

pokerBox.add(“大☠”);

// System.out.println(pokerBox);

//洗牌 是不是就是将 牌盒中 牌的索引打乱

// Collections类 工具类 都是 静态方法

// shuffer方法

/*

  • static void shuffle(List<?> list)

  • 使用默认随机源对指定列表进行置换。 
    

*/

//2:洗牌

Collections.shuffle(pokerBox);

//3 发牌

//3.1 创建 三个 玩家集合 创建一个底牌集合

ArrayList player1 = new ArrayList();

ArrayList player2 = new ArrayList();

ArrayList player3 = new ArrayList();

ArrayList dipai = new ArrayList();

//遍历 牌盒 必须知道索引

for(int i = 0;i<pokerBox.size();i++){

//获取 牌面

String card = pokerBox.get(i);

//留出三张底牌 存到 底牌集合中

if(i>=51){//存到底牌集合中

dipai.add(card);

} else {

//玩家1 %3 ==0

if(i%3==0){

player1.add(card);

}else if(i%3==1){//玩家2

player2.add(card);

}else{//玩家3

player3.add(card);

}

}

}

//看看

System.out.println(“令狐冲:”+player1);

System.out.println(“田伯光:”+player2);

System.out.println(“绿竹翁:”+player3);

System.out.println(“底牌:”+dipai);

}

}

Map

==============================================================

案例介绍


按照斗地主的规则,完成

在这里插入图片描述

按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

  1. 组装54张扑克牌将

  2. 54张牌顺序打乱

  3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

  4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

案例需求分析


  1. 准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

  1. 洗牌:

通过数字完成洗牌发牌

  1. 发牌:

将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

  1. 看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

在这里插入图片描述

实现代码步骤


public class Poker {

public static void main(String[] args) {

/*

  • 1组装54张扑克牌

*/

// 1.1 创建Map集合存储

HashMap<Integer, String> pokerMap = new HashMap<Integer, String>();

// 1.2 创建 花色集合 与 数字集合

ArrayList colors = new ArrayList();

ArrayList numbers = new ArrayList();

// 1.3 存储 花色 与数字

Collections.addAll(colors, “♦”, “♣”, “♥”, “♠”);

Collections.addAll(numbers, “2”, “A”, “K”, “Q”, “J”, “10”, “9”, “8”, “7”, “6”, “5”, “4”,

“3”);

// 设置 存储编号变量

int count = 1;

pokerMap.put(count++, “大王”);

pokerMap.put(count++, “小王”);

// 1.4 创建牌 存储到map集合中

for (String number : numbers) {

for (String color : colors) {

String card = color + number;

pokerMap.put(count++, card);

}

}

/*

  • 2 将54张牌顺序打乱

*/

// 取出编号 集合

Set numberSet = pokerMap.keySet();

// 因为要将编号打乱顺序 所以 应该先进行转换到 list集合中

ArrayList numberList = new ArrayList();

numberList.addAll(numberSet);

// 打乱顺序

Collections.shuffle(numberList);

// 3 完成三个玩家交替摸牌,每人17张牌,最后三张留作底牌

// 3.1 发牌的编号

// 创建三个玩家编号集合 和一个 底牌编号集合

ArrayList noP1 = new ArrayList();

ArrayList noP2 = new ArrayList();

ArrayList noP3 = new ArrayList();

ArrayList dipaiNo = new ArrayList();

// 3.2发牌的编号

for (int i = 0; i < numberList.size(); i++) {

// 获取该编号

Integer no = numberList.get(i);

// 发牌

// 留出底牌

if (i >= 51) {

dipaiNo.add(no);

} else {

if (i % 3 == 0) {

noP1.add(no);

} else if (i % 3 == 1) {

noP2.add(no);

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

[外链图片转存中…(img-dA1aZQE9-1724438031312)]

[外链图片转存中…(img-FS2zqJ2A-1724438031312)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-f84ocfF2-1724438031313)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-68GWlzex-1724438031314)]

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值