为了复习老师前两天讲的课程
对于想看的同学 有漏掉的 望大神们补充
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
/*
* 斗地主洗牌发牌案例
* 1:准备54张牌(每张牌由花色和数字组成)
* 1.1:创建 花色集合 用来存放花色 ♦,♣,♥,♠
* 1.2:创建 数字集合 用来存放数字 3,4,5,6,7,8,9,10,J,Q,K,A,2
* 1.3:创建一个 双列集合 存牌 每张牌 对应一个编号 HashMap<Integer,String> 编号是键 牌面是值
* 1.4:组装牌
* 先遍历数字 再遍历 花色
* 3
* ♦3 ♣3 ♥3 ♠3
* 4
* ♦4 ♣4 ♥4 ♠4
* 5
* ♦5 ♣5 ♥5 ♠5
* 组合完成 牌面 存到map集合 并且 给对应的编号 0 1 2 3
*
* 添加大小王
* 2:洗牌
* public static void shuffle(List<?> list) //打乱元素顺序
* 2.1 创建ArrayList<Integer>集合 用来存储 0~53编号,添加编号到集合中
* 2.2 把集合随机打乱
*
* 3:发牌:
* 3.1 创建玩家1,玩家2,玩家3,底牌,存储牌的编号 ArrayList<Integer>
* 3.2 依次发编号给玩家1,玩家2,玩家3 与 底牌
* 3.3 对3个玩家的集合进行排序
* 3.4 创建玩家1,玩家2,玩家3 和 底牌的 牌面集合 ArrayList<String>
* 3.5 通过map集合牌与编号的对应关系,使用编号 找到对应的牌 ,把牌存储到对应的玩家集合中
*
* 4:看牌
*/
public class PokeXueXi {
public static void main(String[] args) {
// 1.1:创建 花色集合 用来存放花色 ♦,♣,♥,♠
ArrayList<String> colors = new ArrayList<String>();
Collections.addAll(colors, "♦", "♣", "♥","♠");
//System.out.println(colors);
//1.2:创建 数字集合 用来存放数字 3,4,5,6,7,8,9,10,J,Q,K,A,2
ArrayList<String> numbers = new ArrayList<String>();
//使用全部储存方式 Collections.addAll 储存的是 每个字符串.
Collections.addAll(numbers, "3","4","5","6","7","8","9","10","J","Q","K","A","2");
//1.3:创建一个 双列集合 存牌 每张牌 对应一个编号 HashMap<Integer,String> 编号是键 牌面是值
HashMap<Integer, String> poker = new HashMap<Integer, String>();
//创建一个序号
int index = 0;
//对数字进行遍历
for (String number : numbers) {
//对花色进行遍历
for (String color : colors) {
//用每次遍历的花色与数字相加 每种数字四种花色 所以 花色在嵌套循环里
String zuHe= color + number;
//使用双列集合 put获取 序号与花色和数字相结合的 字符
poker.put(index, zuHe);
//每次 序号用一次 自增一次每张牌的序号要不用
index++;
}
}
//添加大小王
poker.put(index++, "小王");
poker.put(index++, "大王");
//System.out.println(poker);
//2:洗牌
//public static void shuffle(List<?> list) //打乱元素顺序
//2.1 创建ArrayList<Integer>集合 用来存储 0~53编号,添加编号到集合中
// 2.2 把集合随机打乱
//创建 序号对象
ArrayList<Integer> indexNmuber = new ArrayList<Integer>();
//对序号 进行遍历 并获取
for(int i = 0; i<54;i++){
//获取 序号 添加到 集合中
indexNmuber.add(i);
}
//对集合进行打乱 也就是打乱序号
Collections.shuffle(indexNmuber);
//System.out.println(indexNmuber);
//3:发牌:
//3.1 创建玩家1,玩家2,玩家3,底牌,存储牌的编号 ArrayList<Integer>
ArrayList<Integer> play = new ArrayList<Integer>();
ArrayList<Integer> play1 = new ArrayList<Integer>();
ArrayList<Integer> play2 = new ArrayList<Integer>();
ArrayList<Integer> diPai = new ArrayList<Integer>();
//3.2 依次发编号给玩家1,玩家2,玩家3 与 底牌
for(int i =0; i<54; i++){
//底牌
if(i>=51){
//获取 前面打乱的序号 get
diPai.add(indexNmuber.get(i));
}else{
if(i%3==0){
play.add(indexNmuber.get(i));
}
if(i%3==1){
play1.add(indexNmuber.get(i));
}
if(i%3==2){
play2.add(indexNmuber.get(i));
}
}
}
// 排序方法 , collections.sort();
//对三名 玩家的牌的序号 进行排序
Collections.sort(play);
Collections.sort(play1);
Collections.sort(play2);
//3.4 创建玩家1,玩家2,玩家3 和 底牌的 牌面集合 ArrayList<String>
ArrayList<String> strPlay = new ArrayList<String>();
ArrayList<String> strPlay1 = new ArrayList<String>();
ArrayList<String> strPlay2 = new ArrayList<String>();
ArrayList<String> strDiPai = new ArrayList<String>();
for (Integer d : diPai) {
String di = poker.get(d);
//获取的是 序号 键所对应的 值
strDiPai.add(di);
}
for (Integer d : play) {
String di = poker.get(d);
//获取的是 序号 键所对应的 值
strPlay.add(di);
}
for (Integer d : play1) {
String di = poker.get(d);
//获取的是 序号 键所对应的 值
strPlay1.add(di);
}
for (Integer d : play2) {
String di = poker.get(d);
//获取的是 序号 键所对应的 值
strPlay2.add(di);
}
System.out.println("赵日天"+strPlay);
System.out.println("叶良辰"+strPlay1);
System.out.println("凤凰羽"+strPlay2);
System.out.println("底牌"+strDiPai);
}
}
|
|