斗地主发牌 模拟 实现

        该实现 主要是得到一幅乱序的牌,然后发牌就容易多了,对于花色,在eclipse中还可以将方块和红心用System.err.print将其变红色输出,效果会更好些。

        有时候还是得到的结果还是乱的,但是大部分是正常的,这个很无奈,找不到bug

public class LandLord {

	// 玩家集合
	static List<String> player1 = new ArrayList<>();
	static List<String> player2 = new ArrayList<>();
	static List<String> player3 = new ArrayList<>();
	// 底牌
	static List<String> lowCard = new ArrayList<>();

	static String[] num = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
	static String[] flower = { "♦", "♣", "♥", "♠" };
	static String[] joker = { "大王", "小王" };

	// 地主牌
	static String c;

	// 得到一幅无序的牌
	public static List<String> getAllCard() {
		List<String> list = new ArrayList<>();
		for (int i = 0; i < num.length; i++) {
			for (int j = 0; j < flower.length; j++) {
				list.add(flower[j] + num[i]);
			}
		}

		list.add(joker[0]);
		list.add(joker[1]);

		List<String> list2 = new ArrayList<>();
		int[] a = getDisOrder();

		for (int i = 0; i < a.length; i++) {
			list2.add(list.get(a[i]));
		}

		return list2;
	}

	// 得到一份随机不重复的乱序数组,用以把牌打乱
	public static int[] getDisOrder() {
		int[] a = new int[54];
		for (int i = 0; i < a.length; i++) {
			a[i] = i;
		}
		int index;
		for (int i = 54; i > 0; i--) {
			index = (int) (Math.random() * i);
			swap(a, index, i - 1);
		}

		return a;
	}

	// 交换数组中两张牌的位置
	public static void swap(int[] a, int x, int y) {
		int temp = a[x];
		a[x] = a[y];
		a[y] = temp;
	}

	// 洗牌
	public static void shuffle() {

		List<String> list = getAllCard();
		c = list.get((int) (Math.random() * 51));

		int size = list.size();

		for (int i = 0; i < size - 3; i++) {
			if (i % 3 == 0) {
				player1.add(list.get(i));
			} else if (i % 3 == 1) {
				player2.add(list.get(i));
			} else {
				player3.add(list.get(i));
			}
		}

		lowCard.add(list.get(size - 2));
		lowCard.add(list.get(size - 3));
		lowCard.add(list.get(size - 4));
	}

	// 看牌
	public static void showCard(List<String> list) {
		boolean flag = false;
		for (String str : list) {
			if (str.startsWith(flower[0]) || str.startsWith(flower[2]) || str.startsWith(joker[0])) {
				System.err.print(str + " ");
			} else {
				System.out.print(str + " ");
			}
			if (str.equals(c)) {
				flag = true;
			}
		}
		if (flag) {
			System.err.print("地主");
		}
	}

	// 按顺序显示
	public static List<String> inOrder(List<String> list) {
		List<String> list1 = new ArrayList<String>();
		String temp;
		for (int i = 0; i < 13; i++) {
			for (int j = 0; j < list.size(); j++) {
				temp = list.get(j);
				if (temp.endsWith(num[i])) {
					list1.add(list.get(j));
				}
			}
		}
		for (int j = 0; j < list.size(); j++) {
			temp = list.get(j);
			if (temp.endsWith(joker[0]) || temp.endsWith(joker[1])) {
				list1.add(list.get(j));
			}
		}
		return list1;
	}

	public static void main(String[] args) {
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		shuffle();
		System.out.print("player1: ");
		player1 = inOrder(player1);
		showCard(player1);
		System.out.println();
		System.out.print("player2: ");
		player2 = inOrder(player2);
		showCard(player2);
		System.out.println();
		System.out.print("player3: ");
		player3 = inOrder(player3);
		showCard(player3);
		System.out.println();
		System.out.print("lowCard: ");
		showCard(lowCard);
		System.out.println();
		System.out.println("地主牌: " + c);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41936045/article/details/81147752
今日推荐