天天看點

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();
    }
}