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