23.Java小demo——模拟斗地主之买牌 洗牌 发牌

在这里插入图片描述
在这里插入图片描述

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

/**
 *
 * @author yf
 *
 *         2020-12-04 09:23:41
 */
public class SendPockerTest {
	public static void main(String[] args) {
		// 1.买牌
		// 1.1 定义一个双列集合,键:表示牌的编号 值:表示具体的牌 规则:编号越小,牌越小
		Map<Integer, String> pockers = new HashMap<Integer, String>();

		// 1.2 定义一个单列集合 用来存储所有牌的编号
		List<Integer> list = new ArrayList<>();

		// 1.3 具体买牌动作
		// 普通牌,52
		String[] colors = { "♠", "❤", "♣", "♦" };
		String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
		int num = 0; // 表示牌的编号
		// 通过循环嵌套,造普通牌
		for (String number : numbers) { // 外循环 获取所有点数
			for (String color : colors) {// 内循环 获取所有花色
				String pocker = color + number;
				// 将牌的编号 具体的牌放到双列集合中
				pockers.put(num, pocker);
				// 将牌的编号放到单列集合中
				list.add(num);
				// 没添加一张牌 编号要自增1
				num++;
			}
		}

		// 大小王
		// 添加小王
		pockers.put(num, "小王");
		list.add(num++);

		// 添加大王
		pockers.put(num, "大王");
		list.add(num++);

		// 打印牌
		System.out.println("所有的牌:" + pockers);
		System.out.println("所有的编号" + list);
	}

}

在这里插入图片描述

// 2.洗牌
		Collections.shuffle(list);
		System.out.println("洗好牌后,编号为" + list);

		// 3.发牌
		// 3.1 定义4个集合,分别表示3个玩家,底牌
		List<Integer> liuyifei = new ArrayList<>();
		List<Integer> zhaoliying = new ArrayList<>();
		List<Integer> yanfen = new ArrayList<>();
		List<Integer> dipai = new ArrayList<>();

		// 3.2 具体的发牌动作 将索引和3取模 绝对发给谁
		for (int i = 0; i < list.size(); i++) {
			// 获取编号
			Integer pockerNum = list.get(i);
			System.out.println(pockerNum);
			if (i >= list.size() - 3) {
				// 底牌
				dipai.add(pockerNum);
			} else if (i % 3 == 0) {
				liuyifei.add(pockerNum);
			} else if (i % 3 == 1) {
				zhaoliying.add(pockerNum);
			} else if (i % 3 == 2) {
				yanfen.add(pockerNum);
			}
		}

		// 3.3 查看玩家,底牌的编号
		System.out.println("liuyifei" + liuyifei);
		System.out.println("zhaoliying" + zhaoliying);
		System.out.println("yanfen" + yanfen);

在这里插入图片描述

public class SendPockerTest {
	public static void main(String[] args) {
		// 1.买牌
		// 1.1 定义一个双列集合,键:表示牌的编号 值:表示具体的牌 规则:编号越小,牌越小
		Map<Integer, String> pockers = new HashMap<Integer, String>();

		// 1.2 定义一个单列集合 用来存储所有牌的编号
		List<Integer> list = new ArrayList<>();

		// 1.3 具体买牌动作
		// 普通牌,52
		String[] colors = { "♠", "❤", "♣", "♦" };
		String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
		int num = 0; // 表示牌的编号
		// 通过循环嵌套,造普通牌
		for (String number : numbers) { // 外循环 获取所有点数
			for (String color : colors) {// 内循环 获取所有花色
				String pocker = color + number;
				// 将牌的编号 具体的牌放到双列集合中
				pockers.put(num, pocker);
				// 将牌的编号放到单列集合中
				list.add(num);
				// 没添加一张牌 编号要自增1
				num++;
			}
		}

		// 大小王
		// 添加小王
		pockers.put(num, "小王");
		list.add(num++);

		// 添加大王
		pockers.put(num, "大王");
		list.add(num++);

		// 打印牌
		System.out.println("所有的牌:" + pockers);
		System.out.println("所有的编号" + list);

		// 2.洗牌
		Collections.shuffle(list);
		System.out.println("洗好牌后,编号为" + list);

		// 3.发牌
		// 3.1 定义4个集合,分别表示3个玩家,底牌
		List<Integer> liuyifei = new ArrayList<>();
		List<Integer> zhaoliying = new ArrayList<>();
		List<Integer> yanfen = new ArrayList<>();
		List<Integer> dipai = new ArrayList<>();

		// 3.2 具体的发牌动作 将索引和3取模 绝对发给谁
		for (int i = 0; i < list.size(); i++) {
			// 获取编号
			Integer pockerNum = list.get(i);
			System.out.println(pockerNum);
			if (i >= list.size() - 3) {
				// 底牌
				dipai.add(pockerNum);
			} else if (i % 3 == 0) {
				liuyifei.add(pockerNum);
			} else if (i % 3 == 1) {
				zhaoliying.add(pockerNum);
			} else if (i % 3 == 2) {
				yanfen.add(pockerNum);
			}
		}

		/*
		 * // 3.3 查看玩家,底牌的编号 System.out.println("liuyifei:" + liuyifei);
		 * System.out.println("zhaoliying:" + zhaoliying); System.out.println("yanfen:"
		 * + yanfen);
		 */

		// 4.查看具体的牌
		System.out.println("----------------------------");
		String str = printPocker(liuyifei, pockers);
		System.out.println("liuyifei:" + str);
		System.out.println("zhaoliying:" + printPocker(zhaoliying, pockers));
		System.out.println("yanfen:" + printPocker(yanfen, pockers));
	}

	/*
	 * 4. 定义一个方法用来看牌 方法名:printPocker 参数列表:List<Integer>,Map<Integer,String>
	 * 返回值:String
	 */
	public static String printPocker(List<Integer> nums, Map<Integer, String> pockers) {
		// 1.对牌的编号进行升序排列
		Collections.sort(nums);
		// 2.遍历牌的编号集合,获取到每一个编号
		StringBuilder sb = new StringBuilder();
		for (Integer num : nums) {
			// num就是要查找的具体牌的编号
			// 3.根据编号去双列集合中查找该编号对应的具体牌
			String pocker = pockers.get(num);
			// 4.将获取到的牌进行拼接
			sb.append(pocker + " ");
		}

		// 5. 将最后拼接结果返回即可
		String str = sb.toString();
		return str.trim();
	}
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#YF#_长沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值