java控制台模拟斗地主洗牌发牌

一个小的控制台项目,用于模拟斗地主洗牌和发牌,运行效果如下图所示。
主要的技术是Collections.shuffle方法和实现Comparator接口,还使用了一个静态内部类
第【1】次运行结果:


上家的
♠3 ♣3 ♥5 ♣5 ◇5 ♥6 ♠7 ◇8 ♠9 ◇9 ◇10 ♠J ◇J ♥Q ♠K ♥A ♣A
我的
♠4 ♥4 ◇4 ♠5 ♠6 ◇7 ♥8 ♥9 ♣9 ♠10 ♥J ♠Q ♣K ♠A ♠2 ◇2 小王
下家的
♥3 ◇3 ♣4 ♣6 ◇6 ♣7 ♠8 ♣8 ♥10 ♣10 ♣Q ◇Q ♥K ◇K ♥2 ♣2 大王
预留的3张:
♥7 ♣J ◇A


第【2】次运行结果:


上家的
♣3 ◇3 ♠4 ♥4 ♣7 ♠8 ◇8 ♣9 ♣10 ◇10 ♥J ◇Q ♣A ◇A ♥2 ♣2 ◇2
我的
♣4 ♥5 ◇5 ♥7 ♥8 ♣8 ♥9 ♥10 ♠J ♣J ◇J ♠Q ♥Q ♥K ♣K ♠A ♥A
下家的
♠3 ♥3 ◇4 ♠5 ♣5 ♠6 ♥6 ♣6 ♠7 ◇7 ♠9 ◇9 ♠10 ♠K ◇K 小王 大王
预留的3张:
♣Q ♠2 ◇6


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

/**
 * 模拟斗地主洗牌,发牌
 */
public class Main {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		List<String> left = new ArrayList<>();
		List<String> me = new ArrayList<>();
		List<String> right = new ArrayList<>();
		List<String> reserved = new ArrayList<>();
		Map<String, Integer> map = new HashMap<>();
		String[] values = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
		String[] colors = { "♠", "♥", "♣", "◇" };
		for (int i = 0; i < values.length; i++) {
			for (int j = 0; j < colors.length; j++) {
				list.add(colors[j] + values[i]);
			}
		}
		// 添加大王和小王
		list.add("小王");
		list.add("大王");
		// 将list的元素添加到map中,用以维护单张扑克牌的大小
		for (int i = 0; i < list.size(); i++) {
			map.put(list.get(i), i);
		}
		// 洗牌
		Collections.shuffle(list);
		// 发牌
		for (int i = 0; i < list.size(); i++) {
			if (i > 50) {
				reserved.add(list.get(i));
			} else if (i % 3 == 0) {
				left.add(list.get(i));
			} else if (i % 3 == 1) {
				me.add(list.get(i));
			} else if (i % 3 == 2) {
				right.add(list.get(i));
			}

		}
		// 每个人手里有什么牌
		System.out.println("上家的");
		// 创建一个比较器,对每个人手里的牌进行排序
		Comparator<String> comparator = new Main.Comparator01(map);
		// 进行排序
		Collections.sort(left, comparator);
		Collections.sort(me, comparator);
		Collections.sort(right, comparator);
		for (String string : left) {
			System.out.print(string + "  ");
		}
		System.out.println();
		System.out.println("我的");
		for (String string : me) {
			System.out.print(string + "  ");
		}
		System.out.println();
		System.out.println("下家的");
		for (String string : right) {
			System.out.print(string + "  ");
		}
		System.out.println();
		System.out.println("预留的3张:");
		for (String string : reserved) {
			System.out.print(string + "  ");
		}
	}

	private static class Comparator01 implements Comparator<String> {
		Map<String, Integer> map;

		public Comparator01(Map<String, Integer> map) {
			super();
			this.map = map;
		}

		@Override
		public int compare(String o1, String o2) {
			// 每次比较的时候,都回去查表
			Integer v1 = map.get(o1);
			Integer v2 = map.get(o2);
			return v1 - v2;
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值