Java模拟斗地主洗牌发牌

需求

使用集合模拟斗地主洗牌发牌:

 准备一个集合来存放花色
 准备一个集合来存放点数 2-10 JQKA
 准备一个集合来存放这拼好的52张牌
 单独插进去大小王 JOKER joker
 打乱顺序之后标记一张牌
 从底部抽三张
 验证一下玩家的人数 3 
 每个玩家的手牌抽象为一个集合
 发牌,检查标记牌在哪个集合中
 补发到对应的集合里 20 17 17 
 按照牌点数和花色排个序,输出

话不多说直接上代码

package 斗地主洗牌发牌;

import java.util.*;
import java.util.Map.Entry;

//斗地主洗牌发牌
public class Landlords2 {
	// 无参构造器
	public Landlords2() {
		// 创建一个集合存放花色
		List<String> flowerColor = new ArrayList<>();
		flowerColor.add("♠");
		flowerColor.add("♥");
		flowerColor.add("♣");
		flowerColor.add("♦");
		// 创建一个集合存放点数
		List<String> count = new ArrayList<>();
		count.add("2");
		count.add("A");
		count.add("K");
		count.add("Q");
		count.add("J");
		count.add("10");
		count.add("9");
		count.add("8");
		count.add("7");
		count.add("6");
		count.add("5");
		count.add("4");
		count.add("3");
		// 创建一个map集合用来存放54张牌
		Map<Integer, String> cards = new HashMap<>();
		cards.put(0, "JOKER");
		cards.put(1, "joker");
		int temp = 2;
		for (int i = 0; i < count.size(); i++) {
			for (int j = 0; j < flowerColor.size(); j++) {
				cards.put(temp++, flowerColor.get(j) + count.get(i));
			}
		}
		Set<Entry<Integer, String>> entrySet = cards.entrySet();
		// 创建一个新的list存放map的key
		List<Integer> num = new ArrayList<>();
		for (int i = 0; i < cards.size(); i++) {
			num.add(i);
		}
		// 打乱list中的顺序
		Collections.shuffle(num);
		// 随机标记一张牌(不能是第一张,也不能是最后三张)
		Random r = new Random();
		int dzp = r.nextInt(50 + 1);
		// 抽出最后三张牌放在一个新的list中
		List<Integer> threeCards = new ArrayList<>();
		threeCards.add(num.get(51));
		threeCards.add(num.get(52));
		threeCards.add(num.get(53));
		List<String> three = new ArrayList<>();
		for (Integer key : threeCards) {
			three.add(cards.get(key));
		}
		// 三个玩家的牌分别创建新的list
		List<Integer> player1 = new ArrayList<>();
		List<Integer> player2 = new ArrayList<>();
		List<Integer> player3 = new ArrayList<>();
		// 遍历num模拟发牌
		for (int i = 0; i < num.size() - 3; i += 3) {
			player1.add(num.get(i));
			player2.add(num.get(i + 1));
			player3.add(num.get(i + 2));
		}
		// 确定地主牌在哪个玩家手里(并加入三张底牌)
		if (player1.contains(dzp)) {
			player1.addAll(threeCards);
			System.out.println("玩家1为地主  底牌为" + three);
		} else if (player2.contains(dzp)) {
			player2.addAll(threeCards);
			System.out.println("玩家2为地主  底牌为" + three);
		} else if (player3.contains(dzp)) {
			player3.addAll(threeCards);
			System.out.println("玩家3为地主  底牌为" + three);
		}
		//三个玩家整理牌(排序)
		Collections.sort(player1);
		Collections.sort(player2);
		Collections.sort(player3);
		//再创建三个list来显示玩家排序好的牌
		List<String> splayer1 = new ArrayList<>();
		List<String> splayer2 = new ArrayList<>();
		List<String> splayer3 = new ArrayList<>();
		for (Integer key : player1) {
			splayer1.add(cards.get(key));
		}
		for (Integer key : player2) {
			splayer2.add(cards.get(key));
		}
		for (Integer key : player3) {
			splayer3.add(cards.get(key));
		}
		System.out.println("玩家1 :  " + splayer1);
		System.out.println("玩家2 :  " + splayer2);
		System.out.println("玩家3 :  " + splayer3);
	}
	//程序主入口
	public static void main(String[] args) {
		new Landlords2();
	}
}

运行结果:
运行结果

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值