使用不同集合的特点完成简单扑克牌游戏

实现代码和解释如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Poker {

	//利用不同集合的特点,完成简单的扑克牌游戏(三人挖坑)
	/*基础信息:54张牌,A-K共13个点数,每个点数4中花色,大王,小王。
	 * 功能:洗牌,发牌,看牌
	 * 存储牌:
	 *             用编号来标记54张牌,并且符合挖坑这种牌的大小规则,所以用K-V形式存储,即我们用一个HashMap存牌
	 *            花色默认顺序,黑红梅方
	 * 洗牌
	 *           洗牌的动作就是将牌的顺序打乱,所以我们用ArrayList来存储这些牌的编号即可,用Collections集合工具类中
	 *           随机置换shuffle()方法来完成
	 * 发牌
	 * 		发牌就是把这些牌一张一张发给三个人,为了保证他们手上的牌不是杂乱无序的,我们用TreeSet集合来存储,
	 * 		所以我们发的也就是牌的编号
	 * 看牌
	 * 		此时我们根据他们手中的编号即map中的键值来获取对应的值,就得到了最后的牌
	 * 
	 * 
	 * */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		//创建花色和点数数组,生成牌
		String [] flower= {"♠","♥","♣","◇"};
		String [] count= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
		String [] pokers=new String[54];
		int num=0;
		//生成牌
		for(int i=0;i<count.length;i++) {
			for(int j=0;j<flower.length;j++)
			{
				pokers[num++]=flower[j]+count[i];			
			}
		}
		
		pokers[num++]="小王";
		pokers[num++]="大王";
		
//		for(int k=0;k<pokers.length;k++) {
//			System.out.print(pokers[k]+" ");
//		}
		
		
		//创建HashMap存储牌
		HashMap<Integer,String> map=new HashMap<Integer,String>();
		for(int key=0;key<pokers.length;key++) {
			map.put(key,pokers[key]);
		}
		//System.out.println();
		
//		Set<Integer> k=map.keySet();
//		for(Integer key:k) {
//			
//			System.out.print(key+"-----"+map.get(key)+" ");
//		}
		
		//System.out.println();
		
		
		
		//创建一个ArrayList用来存储牌
		ArrayList<Integer> list=new ArrayList<Integer>();
		Set<Integer> keys=map.keySet();
		for(Integer key:keys) {
			list.add(key);
		}
//		for(int p=0;p<list.size();p++)
//		{
//			System.out.print(list.get(p)+" ");
//		}
		
		//执行洗牌方法,用Collections工具类的shuffle()实现,该方法随机交换数组里面的元素。
		Collections.shuffle(list);
		
		
//		for(int p=0;p<list.size();p++)
//		{
//				System.out.print(list.get(p)+" ");
//		}
		
		
		//发牌,为了保证每个人接受的牌是有序的,我们使用TreeSet接受,TreeSet有排序功能
		TreeSet<Integer> person1=new TreeSet<Integer>(); 
		TreeSet<Integer> person2=new TreeSet<Integer>(); 
		TreeSet<Integer> person3=new TreeSet<Integer>(); 
		TreeSet<Integer> dipai=new TreeSet<Integer>(); 
		int n=0;//用来记录发出去牌的张数
		//给三个人发牌
		for(int i=0;i<list.size();i++) {
			if(list.size()-n>3) {//留三张底牌(总共就54张牌,留三张底牌,就是只发51张牌出去)
				if(i%3==0)
					person1.add(list.get(i));
				if(i%3==1)
					person2.add(list.get(i));
				if(i%3==2)
					person3.add(list.get(i));
				
				n++;
			}
		}
		//不管牌的顺序怎么变,list中51,52,53位置的牌是底牌(注意不是牌的编号)
		//总共就54张牌,留三张底牌,就是只发51张牌出去
		while(n<list.size()) {
			dipai.add(list.get(n));
			n++;
		}
		
		//System.out.println("--------------------------------");
		
		
		//看牌,遍历TreeSet
		Iterator<Integer> it1=person1.iterator();
		System.out.print("第一个人的牌是:");
		while(it1.hasNext()) {
			System.out.print(map.get(it1.next())+"   ");
		}
		System.out.println();
		//使用迭代器遍历
		Iterator<Integer> it2=person2.iterator();
		System.out.print("第二个人的牌是:");
		while(it2.hasNext()) {
			System.out.print(map.get(it2.next())+"   ");
		}
		System.out.println();
		Iterator<Integer> it3=person3.iterator();
		System.out.print("第三个人的牌是:");
		while(it3.hasNext()) {
			System.out.print(map.get(it3.next())+"   ");
		}
		System.out.println();
		Iterator<Integer> it=dipai.iterator();
		System.out.print("底牌是:");
		while(it.hasNext()) {
			System.out.print(map.get(it.next())+"   ");
		}
	}

}

执行结果:(每次不同)

  • 以下是三次运行结果
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(个人学习总结,仅供参考,不好或不对的地方请指正)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值