collections類實例(完整解析版)——通過數組和集合兩種方法實現鬥地主的洗牌和發牌

package porker;

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

public class Porke2 {
	/**
	 * * A:案例演示
	 * 模擬鬥地主洗牌和發牌並對牌進行排序的代碼實現
	 * 
	 *  分析:
	 * 1,買一副撲克,其實就是自己創建一個集合對象,將撲克牌存儲進去
	 * 2,洗牌
	 * 3,發牌
	 * 4,看牌
	 */
	public static void main(String[] args) {
		//模擬買一副牌
		HashMap<Integer,String> poker = new HashMap<>();
		//模擬序號
		ArrayList<Integer> list = new ArrayList<>();
		//設置標號
		int index = 0;
		//設置花色
		String [] color = {"♠", "♥", "♣", "♦"};
		//設置號碼
		String [] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q","K", "A", "2"};
		//合成一副牌
		for(String s1 : color) {
			for(String s2 : number) {
				//根據編號將牌添加進poker集合中
				poker.put(index, s1.concat(s2));
				//將編號添加到編號集合中
				list.add(index);
				//每一次添加完編號集合都將編號加1
				index++;			
			}
		}
		//添加大王和小王
		poker.put(index, "小王");
		list.add(index);
		index++;
		poker.put(index, "大王");
		list.add(index);
		
		//洗牌(將List編號集合打亂)
		Collections.shuffle(list);
		//設置玩家
		TreeSet<Integer> player_A = new TreeSet<>();
		TreeSet<Integer> player_B = new TreeSet<>();
		TreeSet<Integer> player_C = new TreeSet<>();
		TreeSet<Integer> player_Hand = new TreeSet<>();
		//給玩家發牌
		for(int i =0 ; i<list.size();i++) {
			if(i>=list.size()-3) {
				//給player_Hand集合添加打亂後抽取到的編號
				player_Hand.add(list.get(i));
			}else if (i % 3 == 0 ) {
				//給player_A集合添加打亂後抽取到的編號
				player_A.add(list.get(i));
			}else if (i % 3 ==1 ) {
				//給player_B集合添加打亂後抽取到的編號
				player_B.add(list.get(i));
			}else  {
				//給player_C集合添加打亂後抽取到的編號
				player_C.add(list.get(i));
			}
		}
		
		//玩家明牌
		ShowPoker(poker, player_A, "筱某佳一號");
		ShowPoker(poker, player_B, "筱某佳二號");
		ShowPoker(poker, player_C, "筱某佳三號");
		ShowPoker(poker, player_Hand, "底牌");
	}
	//設置明牌方法
		public static void ShowPoker(HashMap<Integer, String> Poker , TreeSet<Integer> Player,String name ) {
			//將每一個玩家的poker集合打印
			System.out.print(name+" 的牌是");
			//將玩家抽取到的打亂的編號給 i 進行迭代
			for(Integer i : Player) {
				//迭代得到的i給poker集合獲取,每一個編號已經是對應好了一種牌(第34行代碼實現)
				System.out.print(Poker.get(i)+" ");
			}
			//換行
			System.out.println();
		}

}

測試結果:
筱某佳一號 的牌是♠5 ♠J ♠K ♠A ♥3 ♥7 ♥8 ♥J ♥2 ♣4 ♣8 ♣9 ♣K ♣A ♦7 ♦K ♦2
筱某佳二號 的牌是♠3 ♠4 ♠7 ♠9 ♥5 ♥6 ♥10 ♥A ♣10 ♣Q ♣2 ♦3 ♦6 ♦J ♦A 小王 大王
筱某佳三號 的牌是♠6 ♠8 ♠10 ♠2 ♥4 ♥9 ♥Q ♥K ♣3 ♣6 ♣7 ♣J ♦4 ♦5 ♦9 ♦10 ♦Q
底牌 的牌是♠Q ♣5 ♦8

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