實驗5:發牌程式
題目類别: B作業
關鍵字: 掌握Java數組、方法的基本定義
内容要求:
- 編寫程式,項目名和類名均為PokerGame。
-
實作功能:
(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) 使用數組存放發牌情況。
(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();
}
}