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();
	}
}

三人一牌洗牌发牌

操作台运行实例

相关文章:

  • 2021-11-17
  • 2021-11-02
  • 2021-11-05
  • 2021-11-17
  • 2021-11-17
  • 2021-07-06
  • 2021-12-28
  • 2022-12-23
猜你喜欢
  • 2021-11-17
  • 2021-10-27
  • 2021-07-05
  • 2021-11-17
  • 2021-11-13
  • 2021-06-20
相关资源
相似解决方案