发牌程序
题目类别: 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) 编写不同方法完成不同功能。
该程序我写完后只是简单的测试了下,所以可能会有bug,但正常数据目前没有出问题
思路:
发牌程序无非就是将牌平均的发到每个人的手上,所以我们可以定义一个数组来存每个人被发到了什么牌。
一副扑克牌有52张牌,包括四种花色,则我们可以将给这52张牌分别给1-52序号,再定义1-13为黑桃,14-26为方块以此类推。这样每一张不同的牌都有各自独立的编号了。例如:10代表着黑桃10;14代表着方块A。
对牌定义好之后,我们需要将牌放进一个数组里面打乱,打乱有很多种方法,我采用的是,随机交换数组里面两个数的位置,交换52次基本上牌就很乱了。
最后再一张张发给不同的人直到牌发完为止,最后输出就好了。
package PokerGame;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class PokerGame {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
System.out.println("输入扑克牌幅数:");
int Pokers = cin.nextInt();
System.out.println("输入人数:");
int peopleNum = cin.nextInt();
int averageCards = (Pokers*52)/peopleNum+1;
int[][] peopleCards;
peopleCards = new int[peopleNum][averageCards];
int totalCards = Pokers*52+1;
int[] randomCards= new int[totalCards];
for(int i=0;i<Pokers*52+1;i++){
randomCards[i]=i+1;
}
int temp1,temp2,temp3;
Random r = new Random();
//随机交换randomCards.length次
for(int i = 0;i < randomCards.length;i++){
temp1 = Math.abs(r.nextInt()) % (randomCards.length-1); //随机产生一个位置
temp2 = Math.abs(r.nextInt()) % (randomCards.length-1); //随机产生另一个位置
if(temp1 != temp2){
temp3 = randomCards[temp1];
randomCards[temp1] = randomCards[temp2];
randomCards[temp2] = temp3;
}
}
//System.out.println(Arrays.toString(randomCards));
//System.out.println(randomCards[0]);
int counts=0;
int currentCards = 0;
while(counts<=Pokers*52-1){
for(int i=0;i<peopleNum;i++){
peopleCards[i][currentCards] = randomCards[counts];
counts+=1;
// System.out.println(counts);
if(counts == Pokers*52)break;
}
currentCards +=1;
}
for(int k= 0; k<peopleNum;k++){
Arrays.sort(peopleCards[k]);
}
// for(int k= 0; k<peopleNum;k++){
// System.out.println(Arrays.toString(peopleCards[k]));
// }
for (int k= 0; k<peopleNum;k++){
int w=k+1;
System.out.println("第"+w+"个人:");
System.out.print("黑桃:");
for(int i=0; i<averageCards;i++){
if((peopleCards[k][i]%52)<=13&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0){
if((peopleCards[k][i]%52)==1) System.out.print("A ");
else if((peopleCards[k][i]%52)==11) System.out.print("J ");
else if((peopleCards[k][i]%52)==12) System.out.print("Q ");
else if((peopleCards[k][i]%52)==13) System.out.print("K ");
else System.out.print(peopleCards[k][i]%13+" ");
}
}
System.out.println();
System.out.print("红心:");
for(int i=0; i<averageCards;i++){
if((peopleCards[k][i]%52)<=26&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0&&(peopleCards[k][i]%52)>13){
if((peopleCards[k][i]%52)==14) System.out.print("A ");
else if((peopleCards[k][i]%52)==24) System.out.print("J ");
else if((peopleCards[k][i]%52)==25) System.out.print("Q ");
else if((peopleCards[k][i]%52)==26) System.out.print("K ");
else System.out.print(peopleCards[k][i]%13+" ");
}
}
System.out.println();
System.out.print("草花:");
for(int i=0; i<averageCards;i++){
if((peopleCards[k][i]%52)<=39&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0&&(peopleCards[k][i]%52)>26){
if((peopleCards[k][i]%52)==27) System.out.print("A ");
else if((peopleCards[k][i]%52)==37) System.out.print("J ");
else if((peopleCards[k][i]%52)==38) System.out.print("Q ");
else if((peopleCards[k][i]%52)==39) System.out.print("K ");
else System.out.print(peopleCards[k][i]%13+" ");
}
}
System.out.println();
System.out.print("方块:");
for(int i=0; i<averageCards;i++){
if(peopleCards[k][i]!=0&&(peopleCards[k][i]%52)>39){
if((peopleCards[k][i]%52)==40) System.out.print("A ");
else if((peopleCards[k][i]%52)==50) System.out.print("J ");
else if((peopleCards[k][i]%52)==51) System.out.print("Q ");
else if((peopleCards[k][i]%52)==0) System.out.print("K ");
else System.out.print(peopleCards[k][i]%13+" ");
}
}
System.out.println();
}
}
}