斗地主 双列-Map集合
package Heima_idea_01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/*
*斗地主案类分析:
* 1.准备牌:
* 准备花色+准备点数=扑克==》增强for遍历组装
* 使用双列Map(HashMap)集合,完成编号(键)与纸牌(值)的映射关系
* 编号的作用:shuffle随机洗牌,sort升序排列纸牌
* 2.洗牌:
* 洗的是编号(键),因为shuffle只对list集合,所以单独用list集合装编号
* 3.发牌:
* 准备4个集合存储三个玩家的纸牌与底牌
* 先判断留底牌,再%3给三个玩家
* 4.看牌:
*
* */
public class DouDiZhu_02 {
public static void main(String[] args) {
// 1.准备牌
// 创建Map集合-键找值,键是编号,值是扑克
Map<Integer, String> puke = new HashMap<Integer, String>();
// 再踩创建list集合,存储编号。因为shuffle,sort只对list集合
ArrayList<Integer> pukebianhao = new ArrayList<>();
// 定义13个点数的数组
String[] dianshu = { "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6",
"5", "4", "3" };
// 定义4个花色的数组
String[] huase = { "♥", "♠", "♣", "♦" };
// 提前存储大王、小王
puke.put(0, "大王");
puke.put(1, "小王");
// 向list集合存储大王小王的序号
pukebianhao.add(0);
pukebianhao.add(1);
int index = 2;
// *遍历数组,花色+点数的组合,(外1里4),存储到Map集合
for (String d : dianshu) {
for (String h : huase) {
puke.put(index, h + d);// 这样就把Map集合组装好了,有键,有值==有编号
pukebianhao.add(index);
index++;
}
}
// 控制台检验元素是否完整正确!
System.out.println("编号=扑克" + puke);
System.out.println("编号集合" + pukebianhao);
System.out.println("================================================================================================================================================================");
// 2.洗牌--将牌的编号打乱
Collections.shuffle(pukebianhao);
// 3.发牌:
// 其实发的是编号
// 准备4个集合存储三个玩家的纸牌与底牌
// 先判断留底牌,再%3给三个玩家
ArrayList<Integer> player01 = new ArrayList<>();
ArrayList<Integer> player02 = new ArrayList<>();
ArrayList<Integer> player03 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
// 发牌采用的是%3
for (int i = 0; i < pukebianhao.size(); i++) {
if (i < 3) {
// 编号存储到底牌集合
dipai.add(pukebianhao.get(i));
// 对编号%3判断发给三个玩家
} else if (i % 3 == 0) {
player01.add(pukebianhao.get(i));
} else if (i % 3 == 1) {
player02.add(pukebianhao.get(i));
} else if (i % 3 == 2) {
player03.add(pukebianhao.get(i));
}
}
// 对玩家手中的牌进行编号排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
// 4.看牌:
// 将玩家手中的编号=键,到Map集合中查找值=扑克
// 定义成一个方法,在主方法里调用
look("刘德华", player01, puke);
look("李晨光", player02, puke);
look("范冰冰", player03, puke);
look("底牌 ", dipai, puke);
}
// 理解这个方法传入的参数
public static void look(String name, ArrayList<Integer> wanjia,
Map<Integer, String> pooker) {// 新的集合命名
// 遍历ArrayList集合,获取元素=编号,作为键,到Map中找值=扑克
System.out.print(name + " ");
for (Integer key : wanjia) {
String value = pooker.get(key);
System.out.print(value + " ");
}
System.out.println();
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c117c1918bc52971fb286c45bf537916.png)