1. 程式人生 > >實現鬥地主發牌(java)

實現鬥地主發牌(java)


/**
*這是一個java實現的鬥地主,發牌結果的程式,實現3個人十三張牌,然後底牌3張。
*/
import java.util.Arrays;
public class pokerDemo{
	public static void main(String[] args) {
		
		
		/*生成一副牌的數字,簡稱牌庫*/
		int[]pkCode=new int[54];											
		
		for(int i=0;i<54;i++){
			pkCode[i]=i;
		}
		
		
		/*花色*/
		String[]color={"方","梅","紅","黑"};								
		
		
		/*數字*/
		String[]num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};	
		
		
		/*生成陣列實現空的54個位置,存放隨機洗牌後的牌,簡稱牌位*/
		int[]pk=new int[54];
		
		
		for(int i=0;i<pk.length;i++){
		
			/*隨機生成數字*/
			int index=(int)(Math.random()*(pk.length-i));					
			
			
			/*將生成的下標對應的牌存入54個空牌位。然後將原來牌庫中拿到的牌移除,並重新洗牌*/
			pk[i]=pkCode[index];
			remove(pkCode,index);
		}
		
		
		/*生成三個使用者以及底牌三張*/
		int[]pk1=new int[17];
		int[]pk2=new int[17];
		int[]pk3=new int[17];
		int[]dz=new int[3];
		
		/*將得到的牌拷貝倒陣列當中 ,用於排列*/
		System.arraycopy(pk, 0, pk1, 0, 17);
		System.arraycopy(pk, 17, pk2, 0, 17);
		System.arraycopy(pk, 34, pk3, 0, 17);
		System.arraycopy(pk, 51, dz, 0,3);
		
		sort(pk1);
		sort(pk2);
		sort(pk3);
		sort(dz);
		
		
		/*宣告最後存放牌結果的陣列*/
		String []pk1Char = new String[17];
		String []pk2Char = new String[17];
		String []pk3Char = new String[17];
		String []dzChar = new String[3];
		
		/*呼叫花色生成方法,並複製結果到最後的結果String 陣列當中*/
		copy(pk1,pk1Char,color,num);
		copy(pk2,pk2Char,color,num);
		copy(pk3,pk3Char,color,num);
		copy(dz,dzChar,color,num);
		
		
		/*列印輸出結果*/
		System.out.println(Arrays.toString(pk1Char));			
		System.out.println(Arrays.toString(pk2Char));
		System.out.println(Arrays.toString(pk3Char));
		System.out.println(Arrays.toString(dzChar));
	}
	
	/*排序*/
	public static void sort(int[]a){
		for(int i=1;i<a.length;i++){
			for(int j=0;j<i;j++){
				if(a[j]<a[i]){
					int temp=a[j];
					a[j]=a[i];
					a[i]=temp;
				}
			}
		}
	}
	/*移除,從牌庫中移除隨機生成後牌*/
	public static void remove(int[]a,int index){
		for(int i=index;i<a.length-1;i++){
			a[i]=a[i+1];
		}
	}
	
	
	/*生成花色,複製到最後的發牌結果中*/
	public static void copy(int[]a,String[]d
			,String[]color,String[]num){
		for(int i=0;i<a.length;i++){
			int index=a[i];
			
			
			/*53張為小王*/
			if(index==52)d[i]="小王";
			
			/*54張為大王*/
			else if(index==53)d[i]="大王";
			
			
			else{
			/*花色根據下標對4取餘的結果來得到四種花色中的隨機值*/
				d[i]=color[index%4]+num[index/4];
			}
		}
	}
}