用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();
}
}
}
}
运行结果: