实现斗地主发牌(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];
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值