斗地主玩法

public class Card {
	/*大体思路
	1扑克牌一共有54张,首先创建一个集合来存储扑克牌编号,再创建一个Map集合来存储扑克牌编号与扑克牌牌面的映射关系,
	牌面有花色4个,数字13个,利用for循环,将52张牌的编号和映射关系分别添加进Arraylist集合和map集合。大王小王的编号和映射独立添加。
	2 洗牌 Collections.shuffle(poker)  //poker 为保存编号的集合
	3发牌,编号除以3取余,余1发给第一个人,。。余三发给第三个人。创建三个人的集合,将余1的存第一个人集合,。。。
	4看牌。看代码注释。。。。
	    斗地主的步骤:
	        1. 准备牌 
	        2. 洗牌
	        3. 发牌
	        4. 看牌
	 */
	public static void main(String[] args) {
		// 1. 准备牌
		// 创建一个ArrayList集合,保存扑克牌的编号
		ArrayList<Integer> poker = new ArrayList<>();
		// 创建一个Map集合,保存编号和扑克牌的对应关系
		// key是编号,value是对应的扑克牌
		HashMap<Integer, String> map = new HashMap<>();
		// 往ArrayList添加编号,往HashMap集合添加对应关系。
		// 定义数组,保存花色
		String[] colors = {"♠", "♥", "♣", "♦"};
		// 定义数组,保存数字
		String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "k",
				"A", "2"};
		// 定义牌的编号,从0开始
		int index = 0;
		// 对数字和花色进行组合,然后添加到对应的集合
		for (String num : nums) {
			for (String color : colors) {
				// 往ArrayList集合中添加编号
				poker.add(index);
				// 往Map集合中添加对应关系
				map.put(index, color + num);
				// 把index++
				index++;
			}
		}
		// 添加小王
		poker.add(index);
		map.put(index, "小王");
		index++;
		// 添加大王
		poker.add(index);
		map.put(index, "大王");
		// 2. 洗牌
		// 调用Collections工具类的shuffle方法,打乱集合的顺序。
		// 洗牌我们直接洗编号。
		Collections.shuffle(poker);
		// 3. 发牌
		// 定义三个集合,保存三个玩家手中的牌(真正保存的是编号)
		ArrayList<Integer> playOne = new ArrayList<>();
		ArrayList<Integer> playTwo = new ArrayList<>();
		ArrayList<Integer> playThree = new ArrayList<>();
		// 定义一个集合,保存底牌
		ArrayList<Integer> diPai = new ArrayList<>();
		// 开始发牌,真正发给每个玩家的都是编号。
		// 遍历存放编号的集合,把里面的编号按照规律发给每一个玩家.
		// 根据编号在集合中的索引进行发牌.
		for (int i = 0; i < poker.size(); i++) {
			// 拿到每张牌(真正拿到的是编号)
			Integer card = poker.get(i);
			// 处理底牌
			if (i >= 51) {// 51 52 53
				// 如果不足三张牌了,就添加到底牌集合中
				diPai.add(card);
				continue;
			}
			// 判断并发牌
			if (i % 3 == 0) {// 如果这张牌的编号的索引  对3取余结果是0,就发给第一个人
				playOne.add(card);
			} else if (i % 3 == 1) {// 如果这张牌的编号的索引 对3取余结果是1,就发给第二个人
				playTwo.add(card);
			} else {// 如果这张牌的编号的索引 对3取余结果是2,就发给第3个人
				playThree.add(card);
			}
		}
		// 4. 调用方法进行看牌
		lookCard("刘德华", playOne, map);
		lookCard("周星驰", playTwo, map);
		lookCard("周润发", playThree, map);
		lookCard("底牌", diPai, map);
	}/*
			定义方法,完成看牌。
			参数:
			    玩家的姓名。
			    玩家手里的牌(真正是编号)
			    保存编号和牌对应关系的Map集合。
			步骤:
			在方法中,我们对玩家手中的编号进行排序。
			打印各种东西...
			 */

	public static void lookCard(String name, ArrayList<Integer> list,
			HashMap<Integer, String> map) {
		// 对玩家手里的牌进行排序
		Collections.sort(list);
		// 对这个集合进行反转,就变成了从小到大进行排序
		Collections.reverse(list);// reverse方法用来对集合中的内容进行反转
		// 开始打印
		System.out.print(name + ": ");
		// 打印玩家的每一张牌
		// 遍历ArrayList集合,也就是每个玩家手中的牌的编号,然后根据这个编号去Map集合中找到对应真正的牌。
		for (Integer cardNumber : list) {
			// 调用map的get方法,根据牌的编号找到这张牌真正是是什么
			String card = map.get(cardNumber);
			System.out.print(card + " ");
		}
		System.out.println();
	}

}

猜你喜欢

转载自blog.csdn.net/Super_Robot/article/details/89480835
今日推荐