JAVA用集合来完成斗地主洗牌发牌功能

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();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值