斗地主 双列-Map集合

斗地主 双列-Map集合

package Heima_idea_01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/*
 *斗地主案类分析:
 *   1.准备牌:
 *     准备花色+准备点数=扑克==》增强for遍历组装
 *     使用双列Map(HashMap)集合,完成编号(键)与纸牌(值)的映射关系 
 *     编号的作用:shuffle随机洗牌,sort升序排列纸牌
 *   2.洗牌:
 *     洗的是编号(键),因为shuffle只对list集合,所以单独用list集合装编号
 *   3.发牌:
 *      准备4个集合存储三个玩家的纸牌与底牌
 *      先判断留底牌,再%3给三个玩家
 *   4.看牌:
 *     
 * */
public class DouDiZhu_02 {
	public static void main(String[] args) {
		// 1.准备牌
		// 创建Map集合-键找值,键是编号,值是扑克
		Map<Integer, String> puke = new HashMap<Integer, String>();
		// 再踩创建list集合,存储编号。因为shuffle,sort只对list集合
		ArrayList<Integer> pukebianhao = new ArrayList<>();
		// 定义13个点数的数组
		String[] dianshu = { "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6",
				"5", "4", "3" };
		// 定义4个花色的数组
		String[] huase = { "♥", "♠", "♣", "♦" };
		// 提前存储大王、小王
		puke.put(0, "大王");
		puke.put(1, "小王");
		// 向list集合存储大王小王的序号
		pukebianhao.add(0);
		pukebianhao.add(1);
		int index = 2;
		// *遍历数组,花色+点数的组合,(外1里4),存储到Map集合
		for (String d : dianshu) {
			for (String h : huase) {
				puke.put(index, h + d);// 这样就把Map集合组装好了,有键,有值==有编号
				pukebianhao.add(index);
				index++;
			}
		}
		// 控制台检验元素是否完整正确!
		System.out.println("编号=扑克" + puke);
		System.out.println("编号集合" + pukebianhao);
		System.out.println("================================================================================================================================================================");

		// 2.洗牌--将牌的编号打乱
		Collections.shuffle(pukebianhao);

		// 3.发牌:
		// 其实发的是编号
		// 准备4个集合存储三个玩家的纸牌与底牌
		// 先判断留底牌,再%3给三个玩家
		ArrayList<Integer> player01 = new ArrayList<>();
		ArrayList<Integer> player02 = new ArrayList<>();
		ArrayList<Integer> player03 = new ArrayList<>();
		ArrayList<Integer> dipai = new ArrayList<>();
		// 发牌采用的是%3
		for (int i = 0; i < pukebianhao.size(); i++) {
			if (i < 3) {
				// 编号存储到底牌集合
				dipai.add(pukebianhao.get(i));

				// 对编号%3判断发给三个玩家
			} else if (i % 3 == 0) {
				player01.add(pukebianhao.get(i));
			} else if (i % 3 == 1) {
				player02.add(pukebianhao.get(i));
			} else if (i % 3 == 2) {
				player03.add(pukebianhao.get(i));
			}

		}
		// 对玩家手中的牌进行编号排序
		Collections.sort(player01);
		Collections.sort(player02);
		Collections.sort(player03);
		Collections.sort(dipai);
		// 4.看牌:
		// 将玩家手中的编号=键,到Map集合中查找值=扑克
		// 定义成一个方法,在主方法里调用
		look("刘德华", player01, puke);
		look("李晨光", player02, puke);
		look("范冰冰", player03, puke);
		look("底牌    ", dipai, puke);
	}

	// 理解这个方法传入的参数
	public static void look(String name, ArrayList<Integer> wanjia,
			Map<Integer, String> pooker) {// 新的集合命名
		// 遍历ArrayList集合,获取元素=编号,作为键,到Map中找值=扑克
		System.out.print(name + "  ");
		for (Integer key : wanjia) {
			String value = pooker.get(key);
			System.out.print(value + "  ");
		}
		System.out.println();
	}

}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41573718/article/details/88746100