Java 存牌洗牌发牌看牌

package www.test1.com;

import java.util.*;

/**
 * 思路:
 * 存牌(HashMap)
 * 存下标(ArrayList)
 * 洗牌(洗下标)
 * 发牌 (TreeSet,使得到手的牌有序)
 * 看牌
 */
public class MapStudy {

    public static void main(String[] args) {

        // 扑克以键值对的形式保存在 HashMap 中
        HashMap<Integer, String> pokerMap = new HashMap<Integer, String>();

        // 发牌的时候发的是 HashMap 的“键”(扑克对应下标),后期到了用户手里再通过“键”取“指”
        ArrayList<Integer> pokerList = new ArrayList<Integer>();

        // 发到用户手上是排序后的“键”,所以用 TreeSet
        TreeSet<Integer> pokerSet = new TreeSet<Integer>();

        String[] color = {"♥", "♣", "♦", "♠"};
        String[] poker = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        // 将54张扑克以键值对的形式存入 HashMap 中
        int pokerSuffix = 0;
        for (String poker_for : poker) {
            for (String color_for : color) {
                // 打印:♥3 ♣3 ♦3 ♠3...♥2 ♣2 ♦2 ♠2
                pokerMap.put(pokerSuffix, color_for + poker_for);
                // 将扑克下标存入 list,后期发牌使用
                pokerList.add(pokerSuffix);
                // 此时值是52
                pokerSuffix++;
            }
        }

        /**
         * 还差大王小王,单独存入
         * 打印 pokerMap: 0:♥3 1:♣3 2:♦3 3:♠3 。。。 51:♠2 52:queen 53:king
         * 打印 pokerList:[0,1,2, ... 52,53]
         */
        pokerMap.put(pokerSuffix,"queen");
        pokerList.add(pokerSuffix++);
        pokerMap.put(pokerSuffix,"king");
        pokerList.add(pokerSuffix);

        // 生成随机顺序的下标(即发牌)
        Collections.shuffle(pokerList);

        // 发到这三个人手里,使用 TreeSet 可以使其得到的【下标】能够自然排序
        TreeSet<Integer> sunwukong = new TreeSet<Integer>();
        TreeSet<Integer> tangsanzang = new TreeSet<Integer>();
        TreeSet<Integer> zixia = new TreeSet<Integer>();
        // 底牌
        TreeSet<Integer> dipai = new TreeSet<Integer>();

        // 发牌,每人一张,发的也是下标
        int length = pokerList.size();
        for(int x = 0;x<length;x++){
            int n = pokerList.get(x);
            // 最后三张牌留作底牌
            if(x >= length - 3){
                dipai.add(n);
            // 三个人轮着发牌,每人一张,直到只剩下最后三张底牌
            }else if(x % 3 == 0){
                sunwukong.add(n);
            }else if(x % 3 == 1){
                tangsanzang.add(n);
            }else if(x % 3 == 2){
             zixia.add(n);
            }
        }

        showPoker("suwukong:",sunwukong,pokerMap);
        showPoker("tangsanzang:",tangsanzang,pokerMap);
        showPoker("zixia:",zixia,pokerMap);
        showPoker("dipai:",dipai,pokerMap);

        // 测试存入 pokerMap 的牌
//        Set<Integer> integers = pokerMap.keySet();
//        for (int j : integers) {
//            System.out.print(j+":"+pokerMap.get(j) + " ");
//        }
    }

    // 看牌,根据牌的下标取出牌名
    public static void showPoker(String name,TreeSet<Integer> set,HashMap<Integer,String> map){
        System.out.print(name);
        for(int m :set){
            System.out.print(map.get(m)+" ");
        }
        System.out.println();
    }

}

结果(每次刷新):
suwukong:♣344456778910 ♦J ♦Q ♥K ♣K queen king 
tangsanzang:♦34566779 ♥J ♠J ♣Q ♠Q ♥A ♦A ♣222 
zixia:♥3355688899101010 ♥Q ♠K ♠A ♥2 
dipai:♣J ♦K ♣A 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值