java发牌程序

实验5:发牌程序

题目类别: B作业

关键字: 掌握Java数组、方法的基本定义

内容要求:

  1. 编写程序,项目名和类名均为PokerGame。
  2. 实现功能:
    (1) 共有m幅扑克牌,每幅扑克牌不包括大王和小王共52张牌。
    (2) 可能有n个人参与扑克游戏,2<=n<=52。
    (3) 程序运行时输入扑克牌幅数m和人数n,然后所有牌分别依次分发给n个人。不能整除时,每个人的牌数可以不同,如3个人1幅牌,则第1个人18张,第2个和第3个人17张牌。
    (4) 发牌完成后按花色(顺序为黑桃、红心、草花、方块)和牌面大小输出每个人得到的牌。
    例如:

输入扑克牌幅数:1
输入人数:3
输出如下:

第1个人:
黑桃:K 10 5 A
红心:10 3 2
草花:K 10 8 6 3 A
方块:Q J 5 2
第2个人:

第3个人:

  1. 实现要求:
    (1) 使用数组存放发牌情况。
    (2) 编写不同方法完成不同功能。

思路:
1.分牌,洗牌
2.m副牌%n个人,剩余的牌依次分给不同的人
3.平均分牌
4.排序,先输出牌多的人(牌多的人从max-1到0),后输出牌少的人(牌少的人从max-2到0)

package poker;
import java.util.Scanner;
import java.util.Arrays;

public class PokerGame {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		
		System.out.println("输入扑克牌副数:");
		int m = input.nextInt();
		
		System.out.println("输入人数:");
		int n = input.nextInt();
		
		int[][] xp = new int[m][52];//洗牌用
		String[] hs = {
     "黑桃","红心","草花","方块"};//花色
		String[] ph = {
     "A","2","3","4","5","6","7","8","9","10","J","Q","K"};//牌号
		int i,j;
		
		int max = (52*m)/n + 1;//每个人的最大牌数;
		int extra = (52*m)%n;//多出来的牌数;
		int[][] rpkps = new int[n][];//人数
		
		//分配空间,拥有多一张牌数的人空间大一;
		for( i = 0;i<extra;i++) {
     
			rpkps[i] = new int[max];
		}
		for(j=extra;j<n;j++)
			rpkps[j] = new int[max-1];
		
		//牌初始化
		for(i=0;i<m;i++)
			for(j=0;j<52;j++)
				xp[i][j]=j;
		
		//洗牌
		for(int k=0;k<m;k++) {
     
			for(i=0;i<52;i++) {
     
			int index = (int)(Math.random()*52);
		    int temp = xp[k][i];
		    xp[k][i] = xp[k][index];
		    xp[k][index] = temp;
		  }
	   }
		
		//多出来的几张牌,依次发给不同的人
		for(i=0;i<extra;i++) {
     
			rpkps[i][max-1] = xp[m-1][51-extra];
		}
		
		//平均分牌
		int w=0;//第几副牌
		int k=0;//牌数
		for(i=0;i<(52*m)/n;i++) {
     
				for(j=0;j<n;j++) {
     
					rpkps[j][i]=xp[w][k];
					k++;
					if(k==52) {
     
						k=0;
						w++;
				}
			}
		}
		
		for(i=0;i<n;i++)
			Arrays.sort(rpkps[i]);
		
		//先输出多的牌
		for(i=0;i<extra;i++) {
     
		    //输出花色名字:
			int hei=0;
			int hong=1;
			int cao=2;
			int fang=3;
			
			System.out.println("第"+(i+1)+"个人");
			for(j=max-1;j>=0;j--) {
     
				if(rpkps[i][j]>=39) {
     
				if(hei == 0) {
     
					System.out.print(hs[hei]+":");
					hei = 1;
				}
				System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=26&&rpkps[i][j]<=38) {
     
					if(hong == 1) {
     
						System.out.print("\n"+hs[hong]+":");
						hong = 2;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=13&&rpkps[i][j]<=25) {
     
					if(cao == 2) {
     
						System.out.print("\n"+hs[cao]+":");
						cao = 3;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=0&&rpkps[i][j]<=12){
     
					if(fang == 3) {
     
						System.out.print("\n"+hs[fang]+":");
						fang = 4;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
			}
			    System.out.println();
	    }
		
		
		for(i=extra;i<n;i++) {
     
			int hei=0;
			int hong=1;
			int cao=2;
			int fang=3;
			System.out.println("第"+(i+1)+"个人");
			for(j=max-2;j>=0;j--) {
     
				if(rpkps[i][j]>=39) {
     
				if(hei == 0) {
     
					System.out.print(hs[hei]+":");
					hei = 1;
				}
				System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=26&&rpkps[i][j]<=38) {
     
					if(hong == 1) {
     
						System.out.print("\n"+hs[hong]+":");
						hong = 2;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=13&&rpkps[i][j]<=25) {
     
					if(cao == 2) {
     
						System.out.print("\n"+hs[cao]+":");
						cao = 3;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
				else if(rpkps[i][j]>=0&&rpkps[i][j]<=12){
     
					if(fang == 3) {
     
						System.out.print("\n"+hs[fang]+":");
						fang = 4;
					}
					System.out.print(ph[rpkps[i][j]%13]+" ");
				}
			}
			    System.out.println();
		}
		input.close();
    }
}

你可能感兴趣的:(java,java,发牌程序)