利用集合模拟斗地主发牌的过程

该博客介绍如何使用Java编程语言模拟斗地主游戏的发牌过程,通过集合操作实现牌的分配。
摘要由CSDN通过智能技术生成

/**

  • 利用集合模拟斗地主发牌的过程
  • @author Administrator

*/

public class PorkGame_Demo02 {

public static void main(String[] args) {
	// 1.首先用两个字符串数组把数字和花色有序存储起来,由于大小王不能匹配花色,故最后将其加入
	String[] porkNum = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
	String[] porkColor = {"♥","♠","♦","♣"};
	
	//2.创建两个集合,一个用来存放每一张具体的牌(HashMap),一个用来存放每张牌对应的索引(ArrayList)。
	//第一个用HashMap因为该集合具备键值对,能够通过键来确定具体的牌,而索引是有序的所以存到List集合中。
	HashMap<Integer,String> pork = new HashMap<Integer,String>();
	List<Integer> list = new ArrayList<Integer>(); //父类引用指向子类对象
	
	//3.遍历1.中的两个数组,将每个牌元素存入到创建的集合中,并且需要初始化索引下标
	int index = 0;
	for (String pNum : porkNum) {
		//外层循环控制数字
		for (String pCor : porkColor) {
			//内层循环控制每个数字对应的花色,然后开始将每个牌及其索引存入到集合中
			pork.put(index, pCor.concat(pNum));
			list.add(index);
			index++;
		}
	}
	//现在除了大小王,都存入集合了,就差大小王,因为index++是放在语句最后一行,所以现在index值已经自增了,开始添加
	pork.put(index, "subJoker");
	list.add(index);
	index++;
	pork.put(index, "superJoker");
	list.add(index);
	
	//4.添加元素完毕,将扑克牌打乱顺序
	Collections.shuffle(list);
	
	//5.开始发牌,为了将牌可以按照自然顺序排列展现在玩家手中,故将索引元素存放在TreeSet中
	TreeSet<Integer> player01 = new TreeSet<Integer>();
	TreeSet<Integer> player02 = new TreeSet<Integer>();
	TreeSet<Integer> player03 = new TreeSet<Integer>();
	TreeSet<Integer> finalCard = new TreeSet<Integer>();
	//开始发牌
	for(int i=0 ; i<pork.size() ; i++) {
		if(i>pork.size()-4) {//三张底牌
			finalCard.add(list.get(i));
		}else if(i%3==0) {//三个人中的一个人的牌,因为发三次牌为一轮
			player01.add(list.get(i));
		}else if(i%3==1) {
			player02.add(list.get(i));
		}else {
			player03.add(list.get(i));
		}
	}
	//创建一个方法将每个人获得的牌打印出来,调用该方法打印每个玩家的牌
	showPork(pork,player01,"玩家01");
	showPork(pork,player02,"玩家02");
	showPork(pork,player03,"玩家03");
	showPork(pork,finalCard,"底牌");
	
	

}
public static void showPork(HashMap<Integer,String> poker,TreeSet<Integer> index,String name) {
	System.out.println(name+"的牌为:");
	for (Integer key : index) {
		String info = poker.get(key);
		System.out.print(info+"、");
	}
	System.out.print("\n\n");
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值