1. 程式人生 > >java練習:模擬試下你鬥地主的洗牌、發牌、看牌功能

java練習:模擬試下你鬥地主的洗牌、發牌、看牌功能

/**
 * 需求:模擬實現鬥地主的分牌情形
 * 分析:	1 模擬牌盒,儲存54張牌,0-53 每個數字分別對應一張牌,用Map儲存
 * 			2 將0-53序號隨機分發到三個人手中,欲實現序號的隨機排序,考慮使用Collections.shuffle()
 * 			因此序號使用ArrayList儲存
 * 			3 看牌,並且實現玩家手上的拍由小到大排序,所以考慮使用TreeSet儲存
 */
package fmi1;

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

public class PokerSimulate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//建立牌盒
		String[] color = {"♦","♣","♥","♠"};//花色
		String[] size ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//大小
		//建立集合存牌
		HashMap<Integer, String> hm = new HashMap<Integer,String>();
		//迴圈組牌並存至集合
		int key = 0;
		for(String s1:size){
			for(String s2:color){
				String value = s2 + s1;
				hm.put(key, value);
				key++;
			}
		}
		hm.put(key++, "LKing");
		hm.put(key, "BKing");
		//輸出牌
		printPoke(hm);
		//建立ArrayList實現牌的序號的隨機分佈
		ArrayList<Integer> al = new ArrayList<Integer>();
		//存序號
		for(int i = 0;i < 54;i++){
			al.add(i);
		}
		//洗牌
		Collections.shuffle(al);
		//新建3個玩家和一個底牌,即TreeSet集合
		TreeSet<Integer> gamer1 = new TreeSet<Integer>();
		TreeSet<Integer> gamer2 = new TreeSet<Integer>();
		TreeSet<Integer> gamer3 = new TreeSet<Integer>();
		TreeSet<Integer> dipai = new TreeSet<Integer>();
		//發牌
		for(int i = 0;i<al.size();i++){
			if(i >= al.size()-3)
				dipai.add(al.get(i));
			else if(i%3==0)
				gamer1.add(al.get(i));
			else if(i%3==1)
				gamer2.add(al.get(i));
			else 
				gamer3.add(al.get(i));
		}
//		System.out.println(gamer1);
//		System.out.println(gamer2);
//		System.out.println(gamer3);
//		System.out.println(dipai);
		//看牌
		System.out.println("玩家1:");
		checkPoker(gamer1,hm);
		System.out.println("玩家2:");
		checkPoker(gamer2,hm);
		System.out.println("玩家3:");
		checkPoker(gamer3,hm);
		System.out.println("底牌:");
		checkPoker(dipai,hm);
	}

	private static void checkPoker(TreeSet<Integer> gamer,
			HashMap<Integer, String> hm) {
		for(int key:gamer){
//			System.out.print(key+" ");
			System.out.print(hm.get(key)+" ");
		}
		System.out.println();
		
	}

	private static void printPoke(HashMap<Integer, String> hm) {
		System.out.print("撲克牌:");
		for (int i = 0; i < hm.size(); i++) {
			if (i % 4 == 0)
				System.out.println();
			System.out.print(hm.get(i) + "\t");
		}
		System.out.println();
	}

}
執行結果
撲克牌:
♦3	♣3	♥3	♠3	
♦4	♣4	♥4	♠4	
♦5	♣5	♥5	♠5	
♦6	♣6	♥6	♠6	
♦7	♣7	♥7	♠7	
♦8	♣8	♥8	♠8	
♦9	♣9	♥9	♠9	
♦10	♣10	♥10	♠10	
♦J	♣J	♥J	♠J	
♦Q	♣Q	♥Q	♠Q	
♦K	♣K	♥K	♠K	
♦A	♣A	♥A	♠A	
♦2	♣2	♥2	♠2	
LKing	BKing	
玩家1:
♣3 ♦4 ♠5 ♦6 ♣7 ♥7 ♠7 ♦9 ♣10 ♠J ♣Q ♥Q ♦K ♦A ♦2 ♠2 LKing 
玩家2:
♦3 ♥3 ♠4 ♦5 ♣6 ♦8 ♣9 ♥9 ♥10 ♦J ♣J ♥J ♠Q ♣K ♣A ♥A ♣2 
玩家3:
♠3 ♣4 ♥4 ♣5 ♥5 ♥6 ♦7 ♥8 ♠8 ♠9 ♦10 ♦Q ♥K ♠K ♠A ♥2 BKing 
底牌:
♠6 ♣8 ♠10