集合知识练习

集合知识练习

模拟斗地主,洗牌发牌,看牌
import java.util.ArrayList;
import java.util.Collections;

/**
 * @author 薛亮亮1006
 * @email 18392001342@163.com
 * @className Poker
 * @description TODO 1.创建牌盒(牌盒:使用"集合"思想  ArrayList)2.存储对应的扑克牌 3.洗牌,使用Collections.shuffle()方法进行打乱顺序4.进行发牌,共有三个玩家,每个玩家可以看成一个ArrayList集合.5.看牌,使用功能进行封装,进行遍历集合
 * @date 2020/10/27 21:52
 */
public class Poker {
    public static void main(String[] args) {
        //创建牌盒
        ArrayList<String> arrayList = new ArrayList<String>();

        //创建扑克牌,使用数组进行存储
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        String[] colors = {"♥", "♠", "♣", "♦"};
        for (String number : numbers) {
            for (String color : colors) {
                String name = color.concat(number);
                arrayList.add(name);
            }
        }
        //添加大王和小王
        arrayList.add("大王");
        arrayList.add("小王");
        //洗牌
        Collections.shuffle(arrayList);
        //创建三个玩家
        ArrayList<String> player1 = new ArrayList<String>();
        ArrayList<String> player2 = new ArrayList<String>();
        ArrayList<String> player3 = new ArrayList<String>();
        ArrayList<String> diPai = new ArrayList<String>();
        //发牌
        for (int x = 0; x < arrayList.size(); x++) {
            //留出底牌
            if (x >= arrayList.size() - 3) {
                diPai.add(arrayList.get(x));
            } else if (x % 3 == 1) {
                player1.add(arrayList.get(x));
            } else if (x % 3 == 2) {
                player2.add(arrayList.get(x));
            } else if (x % 3 == 0) {
                player3.add(arrayList.get(x));
            }
        }
        //看牌,单独调用
        lookPoker("陈娜", player1);
        lookPoker("薛亮亮", player2);
        lookPoker("二盼", player3);
        lookPoker("底牌是:", diPai);
    }

    //封装看牌的方法
    public static void lookPoker(String name, ArrayList<String> arrayList) {
        System.out.println(name + "的牌是:");
        for (String array : arrayList) {
            System.out.print(array + "  ");
        }
        System.out.println();
    }
}
运行结果:
陈娜的牌是:10  ♠J  大王  ♣K  ♠5  ♥A  ♠Q  ♣8335  ♥J  ♥8  ♥K  ♦77  ♠A  
薛亮亮的牌是:
♣A  ♥68436  ♦K  ♥Q  ♦91056289109  
二盼的牌是:6  ♦J  ♣2  ♦Q  小王  ♦A  ♣Q  ♥477  ♠K  ♥2531044  
底牌是:的牌是:9  ♣J  ♦2  

在经过使用ArrayList集合测试后发现看到的牌并不是排好序的,所以需要使用Map集合进行优化排序!实现如下:

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

/**
 * @author 薛亮亮1006
 * @email 18392001342@163.com
 * @className PokerDemo
 * @description TODO 使用HashMap思想进行实现  1.创建牌盒  2.存储对应的扑克牌   3.洗牌    4.发牌   5.看牌
 * @date 2020/10/27 22:29
 */
public class PokerDemo {
    public static void main(String[] args) {
        //创建牌盒
        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        ArrayList<Integer> array = new ArrayList<Integer>();
        //存储对应的扑克牌
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        String[] colors = {"♥", "♠", "♣", "♦"};
        int index = 0;
        for (String number : numbers) {
            for (String color : colors) {
                String num = color.concat(number);
                hm.put(index, num);
                array.add(index);
                index++;
            }
        }
        //添加大王和小王
        hm.put(index, "大王");
        array.add(index);
        index++;
        hm.put(index, "小王");
        array.add(index);
        //洗牌
        Collections.shuffle(array);
        //创建三个玩家
        TreeSet<Integer> player1 = new TreeSet<Integer>();
        TreeSet<Integer> player2 = new TreeSet<Integer>();
        TreeSet<Integer> player3 = new TreeSet<Integer>();
        TreeSet<Integer> diPai = new TreeSet<>();
        //发牌,遍历集合
        for(int x = 0;x<array.size();x++){
            //留出底牌
            if(x>=array.size()-3){
                diPai.add(array.get(x));
            }else if(x%3==1){
                player1.add(array.get(x));
            }else if(x%3==2){
                player2.add(array.get(x));
            }else if(x%3==0){
                player3.add(array.get(x));
            }
        }
        //看牌
        lookPoker("薛亮亮",player1,hm);
        lookPoker("陈娜",player2,hm);
        lookPoker("二盼",player3,hm);
        lookPoker("底牌",diPai,hm);
    }
    //对看牌的功能进行封装
    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.println(name+"的牌是:");
        for(Integer key:ts){
            String s=hm.get(key);
            System.out.print(s+" ");
        }
        System.out.println();
    }
}

运行结果
薛亮亮的牌是:3345666789910 ♥K ♥A ♦A ♥2 小王 
陈娜的牌是:34457788910 ♠J ♥Q ♦Q ♠K ♦K ♦2 大王 
二盼的牌是:3455681010 ♥J ♣J ♦J ♠Q ♣Q ♣K ♠A ♣A ♠2 
底牌的牌是:792 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值