JAVA用集合来完成斗地主的洗牌和发牌:
需求分析:
斗地主;3个玩家,每一个玩家17张牌,3张底牌。
第一步:创建一个牌盒,ArrayList
第二部:装牌
定义花色数组 String[] colors = {};
定义点数数组String[] numbers = {A,2,3…};
遍历花色和点数数组
拼接--------->装到牌盒中
第三步 洗牌
第四步
规律:
发牌(遍历集合)
判断
角标值如果大于等于集合的元素-3------>底牌
如果角标%3== 0 第一个人的牌
如果角标 %3 == 1第二个人的牌;
如果角标 %3 == 2第三个人的牌;
第五步:看牌
将看牌封装成一个功能
lookpoler(String name)
Public static void Lookler(String name,ArrayLIstarray);{
}
改造:手上牌有序;
分析图如下:
代码如下:
```java
public class PokerTest {
public static void main(String[] args) {
//创建一个牌盒 HashMap<Integer,String> 单独存储编号ArrayList<Integer>
HashMap<Integer, String> hm = new HashMap<Integer,String>() ;
ArrayList<Integer> array = new ArrayList<Integer>() ;
/*
* 装牌
* 编号从0开始 index
* 定义花色数组和点数数组
* {"♥"...}
* {"3","4"....}
* 将花色和点数进行拼接---->牌
* 给HashMap集合添加编号对应的牌
* 给ArrayList集合单独添加编号
* 编号++
* */
int index = 0 ;
//定义花色
String[] colors = {"♥","♠","♣","♦"} ;
//点数
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","k","A","2"} ;
for(String number :numbers) {
for(String color : colors) {
//花色拼接点数
String poker = color.concat(number) ;
hm.put(index, poker) ;
array.add(index) ;
index ++ ;
}
}
//小王
hm.put(index, "小王") ;
array.add(index) ;
index ++ ;
//大王
hm.put(index, "大王");
array.add(index) ; //index从0开始
//System.out.println(array);
//3)洗牌(洗的是编号) ArrayList<Integer> 使用Collections的public static void shuffle(List<?> list)
Collections.shuffle(array);
//System.out.println(array);
/*
* 发牌(发的是编号)
* 为了保证每个人手上 的牌是排序的--->使用TreeSet<Integer>接收
* 玩家1,玩家2,玩家3 底牌
*
* //A--->B--->C---A--->B--->C-----
遍历集合 集合的.seze() 普通for遍历
判断
角标值如果大于等 集合的元素-3 ----->底牌
如果当前角标 % 3 ==0 第一个玩家的牌
% 3 ==1 第二个玩家的牌
% 3 == 2
* */
TreeSet<Integer> player1 = new TreeSet<Integer>() ;
TreeSet<Integer> player2 = new TreeSet<Integer>() ;
TreeSet<Integer> player3 = new TreeSet<Integer>() ;
TreeSet<Integer> diPai = new TreeSet<Integer>() ;
for(int x = 0 ; x < array.size() ; x ++) {
if(x >= array.size()-3) {
diPai.add(array.get(x)) ;
}else if(x % 3 == 0) {
//玩家1
player1.add(array.get(x)) ;
}else if(x % 3 == 1) {
//玩家2
player2.add(array.get(x)) ;
}else if(x % 3 == 2) {
//玩家3
player3.add(array.get(x)) ;
}
}
//看牌
lookPoker("玩家1", player1, hm);
lookPoker("玩家2", player2, hm);
lookPoker("玩家3", player3, hm);
lookPoker("底牌", diPai, hm);
}
public static void lookPoker(String name,TreeSet<Integer> array,HashMap<Integer, String> hm) {
System.out.print(name+"的牌是:");
//遍历ArrayList<Integer> array集合获取所有的编号
for(Integer i : array) {
//使用这个编号在HashMap<Integer, String> hm找对应的value值
String value = hm.get(i) ;
System.out.print(value+" ");
}
System.out.println();
}
}