package ArrayDome;
/**
*
* @project 三人一牌洗牌发牌
* @author SueLiuran
* @version 1.0
* @date 2018年12月29日 下午4:06:21
* @purpose 斗地主
*/
public class cardsDome {
public static void main(String[] args) {
final int N = 54;//设置int常量N
int[] cards = new int[N];//数组1 用于储存牌面 定量54个元素
String S1 = null, S2 = null, S3 = null;//String变量 用于打印牌面
String[] cardColors = { "黑桃", "红心", "方块", "梅花", "红", "黑" };//String花色数组
String[] JQK = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "JOKER" };//String点数数组
//第一个for循环 给牌面数组定义1-54的int整数元素
for (int i = 0; i < cards.length; i++) {//cards.length数组的长度,数组多长就循环几次
cards[i] = i + 1;//给数组赋值,cards[i]= i+1; 数组对应循环要素的元素,循环要素加1,第几次循环就赋值几
}
//打印洗牌前的牌序
System.out.println("洗牌前的排序:\n");
for (int i = 0; i < cards.length; i++) {
//给牌面定义花色
if (cards[i] >= 1 && cards[i] <= 52) {//如果数组cards的元素是1-52之间的数
if (cards[i] % 13 == 0) {//如果数组元素是13的倍数
S1 = cardColors[(cards[i] - 1) / 13] + " ";//花色数组中下标为牌面数组元素减1除以13的值
} else {
S1 = cardColors[cards[i] / 13] + " ";//花色数组中下标为牌面数组元素除以13的值
}
} else if (cards[i] == 53) {//如果牌面数组的值为53则赋花色数组中下标为4的值
S1 = cardColors[4] + " ";
} else if (cards[i] == 54) {//如果牌面数组的值为54则赋花色数组中下标为5的值
S1 = cardColors[5] + " ";
}
//给牌赋点数
if (i == 52 || i == 53) {//如果牌面数组下标为52或53,则赋点数数组中下标为13的值
S2 = JQK[13] + "";
} else {//否则,则赋点数数组中下标为牌面元素取模13的值
S2 = JQK[i % 13] + "";
}
//打印对齐换行符号,每张牌后面打印一个制表符 打印四张牌换行
if ((i + 1) % 4 == 0) {
S3 = "\t\n\n";
} else if (i != 53) {
S3 = "\t";
} else if (i == 53) {
S3 = "";
}
//打印牌面
String S4 = S1 + S2 + S3;
System.out.printf("%S", S4);
}
//洗牌,数组元素的索引随机交换
for (int i = 0; i < cards.length; i++) {
int newIndex = (int) (Math.random() * 53);
int temp = cards[i];
cards[i] = cards[newIndex];
cards[newIndex] = temp;
}
final int B = 18;//int常量B 用于定义每个玩家的手牌
//String数组D123 用于储存每个玩家的手牌 长度为18
String[] D1 = new String[B];
String[] D2 = new String[B];
String[] D3 = new String[B];
//int变量 用于计数 每个玩家手中的牌量
int F = 0;
int G = 0;
int H = 0;
//跟上一个循环差不多遍历打乱后的牌面数组 就是多个用来给每个玩家分牌的if结构
for (int i = 0; i < cards.length; i++) {
if (cards[i] >= 1 && cards[i] <= 52) {
if (cards[i] % 13 == 0) {
S1 = cardColors[(cards[i] - 1) / 13] + " ";
} else {
S1 = cardColors[cards[i] / 13] + " ";
}
} else if (cards[i] == 53) {
S1 = cardColors[4] + " ";
} else if (cards[i] == 54) {
S1 = cardColors[5] + " ";
}
if (cards[i] == 53 || cards[i] == 54) {
S2 = JQK[13] + "";
} else if (cards[i] >= 1 && cards[i] <= 52) {
S2 = JQK[cards[i] % 13] + "";
}
String S4 = S1 + S2;
//轮流给每位玩家发牌
if ((i + 1) % 3 == 0) {//如果i+1也就是循环次数能被3整除则给玩家1发牌
D1[F] = S4;
F++;
} else if ((i + 1) % 3 == 1) {//如果i+1也就是循环次数取模3等于1则给玩家2发牌
D2[G] = S4;
G++;
} else if ((i + 1) % 3 == 2) {//如果i+1也就是循环次数取模3等于2则给玩家3发牌
D3[H] = S4;
H++;
}
}
//打印每位玩家手中的牌面 包括每张牌后的制表符对齐 以及每四张牌换行
System.out.println("\n\n玩家1的牌:\n");
for (int i = 0; i < D1.length; i++) {
System.out.print(D1[i]);
if ((i + 1) % 4 == 0) {
System.out.print("\t\n\n");
} else if (i != 53) {
System.out.print("\t");
} else if (i == 53) {
System.out.print("");
}
}
System.out.println("\n\n玩家2的牌:\n");
for (int i = 0; i < D2.length; i++) {
System.out.print(D2[i]);
if ((i + 1) % 4 == 0) {
System.out.print("\t\n\n");
} else if (i != 53) {
System.out.print("\t");
} else if (i == 53) {
System.out.print("");
}
}
System.out.println("\n\n玩家3的牌:\n");
for (int i = 0; i < D3.length; i++) {
System.out.print(D3[i]);
if ((i + 1) % 4 == 0) {
System.out.print("\t\n\n");
} else if (i != 53) {
System.out.print("\t");
} else if (i == 53) {
System.out.print("");
}
}
System.out.println();
}
}
操作台运行实例