JAVA实现斗地主洗牌?[Collections类对集合的操作]

这篇博客介绍了如何使用Java编程实现斗地主的发牌算法。首先创建了存储花色和数字的数组,然后通过ArrayList构建牌盒并添加所有牌,接着使用Collections的shuffle()方法洗牌。之后,创建三个ArrayList分别代表三位玩家的牌,并按顺序发牌,最后打印出每位玩家的牌和底牌。这是一个理解Collections类和数组操作的好例子。
摘要由CSDN通过智能技术生成

设计思路(实现原理)

  1. 创建两个String类型数组,其中一个用于存储牌的花色,一个用于存储牌的数字
  2. 创建一个ArrayList集合作为牌盒,将大小王和不同花色不同数字的牌循环添加到集合中
  3. 用Collections工具类的shuffle()方法洗牌
  4. 创建三个ArrayList集合作为三个人的牌的集合,并循环发牌,要留三张底牌
  5. 打印出三个人的牌和集合中留的三张底牌

代码分析

               1. 创建存取四种花色和牌数字的两个数组

// 表示花色的数组
String[] colors = { "黑桃", "红桃", "梅花", "方块" };
// 表示点数的数组
String[] numbers = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
					"J", "Q", "K" };

              2.创建一个ArrayList集合作为牌盒,将大小王和不同花色不同数字的牌循环添加到集合中 

// 找一个牌盒
ArrayList<String> array = new ArrayList<String>();
array.add("大王");//添加大小王
array.add("小王");
// 循环装牌,外层循环四种花色,内层数字牌(这也是大小王先添加的原因)。组成一副扑克
for (String c : colors) {
	for (String n : numbers) {
		    array.add(c.concat(n));
		}
	}

 

                3.用Collections工具类的shuffle()方法洗牌

// 洗牌,对List集合中的元素进行随机排序
Collections.shuffle(array);

 

                4.创建三个ArrayList集合作为三个人的牌的集合,并循环发牌,要留三张底牌 

            // 发牌
            ArrayList<String> linString = new ArrayList<String>();
			ArrayList<String> zhouString = new ArrayList<String>();
			ArrayList<String> meString = new ArrayList<String>();
			// 用普通for循环发牌
			for (int x = 0; x < array.size() - 3; x++) {
				if (x % 3 == 0) {//0表示要给linString发牌
					linString.add(array.get(x));
				} else if (x % 3 == 1) {//1表示要给zhouString发牌
					zhouString.add(array.get(x));
				} else if (x % 3 == 2) {//2表示要给meString发牌
					meString.add(array.get(x));
				}
			}
			// 看牌
			System.out.println("linString:" + linString);
			System.out.println("zhouString:" + zhouString);
			System.out.println("meString:" + meString);

 

        注意:为什么要留3张这个玩斗地主都应该知道吧,我就不多说了哦。 

                5.打印出三个人的牌和集合中留的三张底牌(底牌)

 

            // 看底牌
			System.out.print("三张底牌:");
			for (int x = array.size() - 3; x < array.size(); x++) {
				System.out.print(array.get(x) + "  ");
			}

 完整代码

        import java.util.*;
        public class Example18 {
		public static void main(String[] args) {
			// 表示花色的数组
			String[] colors = { "黑桃", "红桃", "梅花", "方块" };
			// 表示点数的数组
			String[] numbers = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
					"J", "Q", "K" };
			// 找一个牌盒
			ArrayList<String> array = new ArrayList<String>();
			array.add("大王");
			array.add("小王");
			// 循环装牌
			for (String c : colors) {
				for (String n : numbers) {
					array.add(c.concat(n));
				}
			}
			// 洗牌
			Collections.shuffle(array);
			// 发牌
			ArrayList<String> linString = new ArrayList<String>();
			ArrayList<String> zhouString = new ArrayList<String>();
			ArrayList<String> meString = new ArrayList<String>();
			// 用普通for
			for (int x = 0; x < array.size() - 3; x++) {
				if (x % 3 == 0) {
					linString.add(array.get(x));
				} else if (x % 3 == 1) {
					zhouString.add(array.get(x));
				} else if (x % 3 == 2) {
					meString.add(array.get(x));
				}
			}
			// 看牌
			System.out.println("linString:" + linString);
			System.out.println("zhouString:" + zhouString);
			System.out.println("meString:" + meString);
			// 看底牌
			System.out.print("三张底牌:");
			for (int x = array.size() - 3; x < array.size(); x++) {
				System.out.print(array.get(x) + "  ");
			}
		}
}

运行结果

                随机的随机的,仅供参考

 

总结 

                 我认为这是一个比较有意思的案例,大家可以自己写一个打大A的案例来吸收知识点。多了解怎样用Collections类对集合进行操作。有哪些方法。。。自己查文档去吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心态还需努力呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值