collections類實例——通過數組和集合兩種方法實現鬥地主的洗牌和發牌

通過數組實現:

/*
*  @author:肖佳嘉
*  @Date : 2019-04-12
*  @class :Collections
*/

package porker;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Porke {

	public static void main(String[] args) {
		/*模擬鬥地主進行洗牌和發牌
		 * 1、創建一副牌
		 * 	   牌色 牌號
		 * 2、洗牌
		 * 3、抽取出三張底牌
		 * 4、定義玩家
		 * 5、發牌*/
		
		//設置牌色
	    String [] color = {"黑桃","紅桃","方塊","梅花",};
	    //設置牌號
	    String [] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
	    //創建一副牌
	    ArrayList<String> poker = new ArrayList<>(); 
	    for(String s1 : color) {
	    	for(String s2 : number) {
	    		poker.add(s1.concat(s2));
	    	}
	    }
	    poker.add("大王");
	    poker.add("小王");
	    //System.out.println(poker);
	    //洗牌
	    Collections.shuffle(poker);
	    //定義三個玩家,定義三張底牌
	    ArrayList<String> A = new ArrayList<>();
	    ArrayList<String> B = new ArrayList<>();
	    ArrayList<String> C = new ArrayList<>();
	    ArrayList<String> hand = new ArrayList<>();
	    //
	    for(int i = 0;i<poker.size();i++) {
	    	//抽出三張底牌
	    	if(i>=poker.size()-3) {
	    		hand.add(poker.get(i));
	    	}else if (i%3 == 0) {     //發牌
				A.add(poker.get(i));
			} else if (i%3 == 1) {
				B.add(poker.get(i));
			}else {
				C.add(poker.get(i));
			}	
	    }
	    System.out.println("A player:"+A);
	    System.out.println("B player:"+B);
	    System.out.println("C player:"+C);
	    System.out.println("hand :"+hand);
	    
	}
	
}

測試結果:
A player:[紅桃K, 梅花6, 方塊Q, 紅桃3, 黑桃8, 梅花4, 黑桃A, 紅桃A, 大王, 紅桃9, 黑桃10, 黑桃4, 紅桃7, 紅桃10, 紅桃8, 梅花5, 梅花7]

B player:[方塊2, 黑桃J, 方塊5, 紅桃4, 梅花9, 小王, 黑桃2, 梅花2, 黑桃Q, 梅花A, 方塊9, 方塊6, 黑桃6, 黑桃K, 方塊10, 方塊A, 梅花K]

C player:[紅桃5, 梅花Q, 方塊7, 紅桃6, 方塊3, 梅花J, 方塊J, 紅桃J, 梅花3, 紅桃2, 黑桃7, 黑桃5, 紅桃Q, 黑桃3, 方塊4, 方塊K, 黑桃9]
hand :[梅花8, 方塊8, 梅花10]

通過集合實現:

package com.heima.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class Test3 {

	/**
	 * * A:案例演示
	 * 模擬鬥地主洗牌和發牌並對牌進行排序的代碼實現
	 * 
	 *  分析:
	 * 1,買一副撲克,其實就是自己創建一個集合對象,將撲克牌存儲進去
	 * 2,洗牌
	 * 3,發牌
	 * 4,看牌
	 */
	public static void main(String[] args) {
		//1,買一副撲克,其實就是自己創建一個集合對象,將撲克牌存儲進去
		String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
		String[] color = {"紅桃","黑桃","方片","梅花"};
		HashMap<Integer, String> hm = new HashMap<>();					//存儲索引和撲克牌
		ArrayList<Integer> list = new ArrayList<>();					//存儲索引
		int index = 0;
		
		//拼接撲克牌並索引和撲克牌存儲在hm中
		for(String s1 : num) {											//獲取數字
			for(String s2 : color) {									//獲取顏色
				hm.put(index, s2.concat(s1));
				list.add(index);										//將索引0到51添加到list集合中
				index++;
			}
		}
		//將小王添加到雙列集合中
		hm.put(index, "小王");
		list.add(index);												//將52索引添加到集合中
		index++;
		hm.put(index, "大王");
		list.add(index);												//將52索引添加到集合中
		
		//2,洗牌
		Collections.shuffle(list);
		//3,發牌
		TreeSet<Integer> gaojin = new TreeSet<>();
		TreeSet<Integer> longwu = new TreeSet<>();
		TreeSet<Integer> me = new TreeSet<>();
		TreeSet<Integer> dipai = new TreeSet<>();
		
		for(int i = 0; i < list.size(); i++) {
			if(i >= list.size() - 3) {
				dipai.add(list.get(i));							//將三張底牌存儲在底牌集合中
			}else if(i % 3 == 0) {
				gaojin.add(list.get(i));
			}else if(i % 3 == 1) {
				longwu.add(list.get(i));
			}else {
				me.add(list.get(i));
			}
		}
		
		//看牌
		lookPoker(hm, gaojin, "高進");
		lookPoker(hm, longwu, "龍五");
		lookPoker(hm, me, "馮佳");
		lookPoker(hm, dipai, "底牌");
	}
	/*
	 * 看牌
	 * 1,返回值類型void
	 * 2,參數列表HashMap,TreeSet,String name
	 */
	public static void lookPoker(HashMap<Integer, String> hm,TreeSet<Integer> ts ,String name) {
		System.out.print(name + "的牌是:");
		for(Integer i : ts) {						//i代表雙列集合中的每一個鍵
			System.out.print(hm.get(i) + " ");
		}
		System.out.println();
	}
}

測試結果
高進的牌是:紅桃3 方片3 方片5 黑桃6 方片6 方片8 黑桃10 梅花10 方片J 梅花J 紅桃Q 紅桃K 黑桃A 方片A 黑桃2 梅花2 大王
龍五的牌是:黑桃3 梅花4 黑桃5 黑桃7 梅花7 紅桃8 紅桃9 黑桃9 方片9 紅桃10 方片10 黑桃K 方片K 梅花A 紅桃2 方片2 小王
馮佳的牌是:梅花3 紅桃4 黑桃4 方片4 紅桃6 梅花6 紅桃7 方片7 黑桃8 梅花8 紅桃J 黑桃J 黑桃Q 方片Q 梅花Q 梅花K 紅桃A
底牌的牌是:紅桃5 梅花5 梅花9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章