实验4(Java):发牌程序

题目

关键字: 掌握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) 编写不同方法完成不同功能。

代码

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值