欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用Java模拟洗扑克牌

程序员文章站 2022-04-02 10:25:07
...

怎么用程序去模拟洗牌呢!

我们可以这样想,一副扑克牌一共有54张牌,除去大小王,那么还剩下52张牌

52张牌又可以分为4种花色,每种花色对应13张牌

分别为:A,1  ,2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,J,Q,K

一开始如果我们买了一副新的扑克牌,那么它会是按照顺序的,我们为了公平起见当然是要洗牌,洗的牌越乱越公平

所以我们定义一个数组用来存放52张牌

数组下标分别对应0-51,并且给予赋值也是0-51

这样的好处:

我们可以知道我如果在定义一个String类型的数组存储花色

以及一个String类型的数组存储牌的大小当然是A-K之间

那么我们可以通过开始存放0-51的下标所存储的元素/13就可以得到对应的花色数组的下标

那么用0-51的下标所存储的元素%13就可以得到是哪一张牌的大小了

大致这是洗牌前的操作

final int N = 52;
		int cards[] = new int[N];
		String huase[] = {"红桃","黑桃","方块","梅花"};                         //一副扑克牌有4种不同的花色
		//一副扑克牌的牌面是1-10,J,Q,K13种情况
		String cardsNumber[] = {
			"A","2","3","4","5","6","7","8","9","10","J","Q","K"	                      
		};
        //首先,我们需要进行数组赋值,按照规律来0-12红桃,13-25黑桃,26-38方块,39-51梅花
		for(int i = 0;i<cards.length;i++) {
			cards[i] += i; 
		}
		//洗牌前的顺序
		System.out.println("洗牌前的顺序:");
		for(int i = 0;i<cards.length;i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}

然后我们可以操作随机数来生成0-51的数

源代码如下:

public class WashCardsDemo {

	public static void main(String[] args) {
		// 定义一个常量N,为数组大小
		final int N = 52;
		int cards[] = new int[N];
		String huase[] = {"红桃","黑桃","方块","梅花"};                         //一副扑克牌有4种不同的花色
		//一副扑克牌的牌面是1-10,J,Q,K13种情况
		String cardsNumber[] = {
			"A","2","3","4","5","6","7","8","9","10","J","Q","K"	                      
		};
        //首先,我们需要进行数组赋值,按照规律来0-12红桃,13-25黑桃,26-38方块,39-51梅花
		for(int i = 0;i<cards.length;i++) {
			cards[i] += i; 
		}
		//洗牌前的顺序
		System.out.println("洗牌前的顺序:");
		for(int i = 0;i<cards.length;i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}
		//模拟洗牌,通过产生0-51的随机数来模拟洗牌
		for(int i = 0;i<cards.length;i++) {
			cards[i] = (int)((Math.random())*52);    //产生0-51的随机数,相当于打乱牌的顺序
		}
		//洗牌后
		System.out.println("洗牌后的顺序:");
		for (int i = 0; i < cards.length; i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}
	}

}
运行结果:

用Java模拟洗扑克牌