java的三大集合练习之斗地主发牌

刚学完集合,老师讲了个斗地主发牌的练习,在这里记录一下。这里使用了HashMap,ArrayList,TreeSet三种集合。

package shuffleCards;

import java.util.*;

/**
 * 斗地主
 * @author 杰哥
 *1、洗牌 2、发牌 3、看牌
 */

public class ShuffleCards {
	/*看牌函数(输出玩家发到的牌)*/
	public static void lookCard(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
		System.out.println(name + "的牌是:");
		for(Integer index : ts){
			System.out.print(hm.get(index) + " ");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
		String[] color = {"♠","♥","♣","◆"};
		HashMap<Integer,String> cards = new HashMap<Integer,String>();//储存索引和对应的扑克牌
		ArrayList<Integer> all = new ArrayList<Integer>();//存储索引
		int index = 0;  //初始化索引
		
		/*初始化,将索引和扑克牌都储存在cards中*/
		for(String s1 : num){
			for(String s2 : color){
				cards.put(index, s1.concat(s2));  //把牌的数字和花色连接起来并当做索引的value
				all.add(index); //把索引加到ArrayList中
				index++;
			}
		}
		
		/*将大王和小王加到两个集合中*/
		cards.put(index,"小王" );
		all.add(index);
		cards.put(++index,"大王");
		all.add(index);
		
		/*洗牌就相当于打乱索引*/
		Collections.shuffle(all);  //调用了Collections的shuffle函数
		
		/*发牌(用TreeSet储存每个玩家和底牌的索引,可实现发牌过程中的自动排序,相当于玩家整理牌)*/
		TreeSet<Integer> player1 = new TreeSet<Integer>();
		TreeSet<Integer> player2 = new TreeSet<Integer>();
		TreeSet<Integer> player3 = new TreeSet<Integer>();
		TreeSet<Integer> dipai = new TreeSet<Integer>();
		for(int i = 0;i<all.size();i++){
			/*把最后三张牌作为底牌*/
			if(i>=all.size()-3){
				dipai.add(all.get(i));
			}
			/*三个玩家按顺序一张一张发牌*/
			else if(i % 3 == 0){
				player1.add(all.get(i));
			}
			else if(i % 3 == 1){
				player2.add(all.get(i));
			}
			else{
				player3.add(all.get(i));
			}
		}
		/*看牌,参数分别是name,TreeSet对象,HashMap对象*/
		lookCard("player1",player1,cards);
		lookCard("player2",player2,cards);
		lookCard("player3",player3,cards);
		lookCard("底牌",dipai,cards);
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值