题目
关键字: 掌握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) 编写不同方法完成不同功能。
代码
package poker;
import java.util.Arrays;
import java.util.Scanner;
public class PokerGeme {
static int max;
static int extra;
static int[][] playercards;
static int[][] cards;
static String[] cardNum= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
static int i;
static int j;
public static void cardsInitial(int m,int n) {
//玩家初始化
max=(52*m)/n+1;
extra=(52*m)%n;
playercards=new int [n][];
for(i=0;i<n;i++) {
if(i<extra)
playercards[i]=new int[max];
else
playercards[i]=new int[max-1];
}
//牌初始化,0~12为方块,13~25为草花,26~38为红心,39~51为黑桃
cards=new int[m][52];
for(i=0;i<m;i++)
for(j=0;j<52;j++) {
cards[i][j]=j;
}
}
public static void shuffle(int m) {
//洗牌
for(i=0;i<m;i++)
for(j=0;j<52;j++) {
int index=(int)(Math.random()*52);
int temp=cards[i][j];
cards[i][j]=cards[i][index];
cards[i][index]=temp;
}
}
public static void giveCards(int m,int n) {
//发牌
for(i=0;i<extra;i++) {
playercards[i][max-1]=cards[m-1][52-i-1];
}
int w=0; //第几副牌
int k=0; //第几张牌
for(i=0;i<(52*m)/n;i++) { //轮着发max-1轮
for(j=0;j<n;j++) { //每轮一人发一张
playercards[j][i]=cards[w][k];
k++;
if(k==52) {
k=0;
w++;
}
}
}
}
public static void printResult(int m,int n) {
//输出每个人的牌,每个人的牌要从大到小输出
for(i=0;i<n;i++) {
Arrays.sort(playercards[i]);
int hei=0,hong=0,cao=0,fang=0;
System.out.println("第"+(i+1)+"个人:");
for(j=(i<extra?max-1:max-2);j>=0;j--) {
if(playercards[i][j]>=39) {
if(hei==0) {
System.out.print("黑桃:");
hei=1;
}
System.out.print(cardNum[playercards[i][j]%13]+" ");
}
else if(playercards[i][j]>=26) {
if(hong==0) {
System.out.print("\n"+"红心:");
hong=1;
}
System.out.print(cardNum[playercards[i][j]%13]+" ");
}
else if(playercards[i][j]>=13) {
if(cao==0) {
System.out.print("\n"+"草花:");
cao=1;
}
System.out.print(cardNum[playercards[i][j]%13]+" ");
}
else if(playercards[i][j]>=0) {
if(fang==0) {
System.out.print("\n"+"方块:");
fang=1;
}
System.out.print(cardNum[playercards[i][j]%13]+" ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("输入扑克牌幅数:");
int m=input.nextInt();
System.out.print("输入人数:");
int n=input.nextInt();
cardsInitial(m,n);
shuffle(m);
giveCards(m,n);
printResult(m,n);
input.close();
}
}
结果测试
输入扑克牌幅数:2
输入人数:6
第1个人:
黑桃:Q 8 5
红心:6 4 3 A
草花:10 8 7 6 5 A
方块:10 8 7 3 A
第2个人:
黑桃:K 10 6 6 3
红心:J J 10 9 5
草花:Q 6 5 2
方块:J 6 4 A
第3个人:
黑桃:J J 2
红心:9 5 2
草花:Q J J 4
方块:Q 9 7 6 5 4 2
第4个人:
黑桃:K 9 7 7 4 A
红心:K 8 4 3
草花:K 9 8 7 2
方块:8 5
第5个人:
黑桃:Q 10 8
红心:K Q Q 2
草花:K 10 9 4 A
方块:K Q 10 9 3
第6个人:
黑桃:9 5 4 3 2 A
红心:10 8 7 7 6 A
草花:3 3
方块:K J 2