百木园-与人分享,
就是让自己快乐。

集合(模拟斗地主发牌)

思路:
* A:创建一个HashMap集合
* B:创建一个ArrayList集合
* C:创建花色数组和点数数组
* D:从0开始往HashMap里面存储编号,并存储对应的牌
* 同时往ArrayList里面存储编号即可。
* E:洗牌(洗的是编号)
* F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
* G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)

输出牌---无序版

package Day18;

import java.util.ArrayList;
import java.util.Collections;

public class PoKe {
    public static void main(String[] args) {
        //创建牌盒---集合
        ArrayList<String> array = new ArrayList<String>();

        //装牌

        //定义一个花色数组
        String [] colors = {\"♠\",\"♣\",\"♥\",\"♦\"};
        //定义一个点数的数组
        String [] number = {\"A\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"J\",\"Q\",\"K\"};
        //将牌装入集合array中
        //增强for进行循环遍历获取花色字符数组中的每个花色
        for(String a : colors){
            //遍历点数字符数组获取每个点数
            for(String b:number){
                //对获取的每个花色和点数进行字符的拼接---并将其添加到集合array中
                //字符拼接使用String类中的public String concat(String str)将指定字符串连接到此字符串的结尾。
                array.add(a.concat(b));
            }
        }
        array.add(\"小王\");
        array.add(\"大王\");
        //输出查看字符中的集合---是否添加上元素
        //System.out.println(array);
//        for(String t: array){
//            System.out.println(t);
//        }

        //洗牌
        //使用Collections中任意置换的方法实现其集合元素的混乱
        //public static void shuffle(List<?> list)使用默认随机源对指定列表进行置换。
        // 所有置换发生的可能性都是大致相等的。
        Collections.shuffle(array);
        //输出查看集合是否混乱
        //System.out.println(array);


        //看牌
        //斗地主三人打牌
        //首先创建三个集合用来存储每个人的牌---还有一个集合存储最后三张底牌
        ArrayList<String> zhao = new ArrayList<String>();
        ArrayList<String> zhu = new ArrayList<String>();
        ArrayList<String> wang = new ArrayList<String>();
        ArrayList<String> dipai = new ArrayList<String>();

        //进行分发牌
        //首先遍历array集合
        for(int x=0;x<array.size();x++){
            //进行底牌的判断---只留最后三张---放在遍历循环的开始,以防添加到别的集合
            if(x>= array.size()-3){
                //添加最后三张底牌
                dipai.add(array.get(x));
            }
            //进行顺序发牌
            if(x%3==0){
                //三人发牌---这是第一个拿牌的
                //如果遍历的array集合的索引的取余是零--就将此处array的索引值添加到zhao集合中
                zhao.add(array.get(x));
            }else if(x%3==1){
                //三人发牌--这是第二个拿牌的
                zhu.add(array.get(x));
            }else if(x%3==2){
                //三人发牌--这是第三个拿牌的
                wang.add(array.get(x));
            }
        }

        //查看牌---此时的查看牌定义一个功能方法--查看任意一个调用功能方法即可
        kanpai(\"赵同刚\",zhao);
        kanpai(\"朱庆娜\",zhu);
        kanpai(\"王丽丽\",wang);
        kanpai(\"底牌\",dipai);
    }

    //两个明确
    //返回值类型----void(任意型)  参数列表--A:给出拿牌人的姓名--B:给出拿牌的集合
    public static void kanpai(String name,ArrayList<String> m){
        //进行格式的调整
        System.out.print(name+\":\");
        //遍历输出集合中的每一个元素
        for (String e : m){
            System.out.print(e+\",\");
        }
        //每个人的牌在输出时进行换行,以方便查看
        System.out.println();

    }




}

有序版

package Day18;



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

/*
* 思路:
 *         A:创建一个HashMap集合
 *         B:创建一个ArrayList集合
 *         C:创建花色数组和点数数组
 *         D:从0开始往HashMap里面存储编号,并存储对应的牌
 *        同时往ArrayList里面存储编号即可。
 *      E:洗牌(洗的是编号)
 *      F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
 *      G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
* */
public class PoKe1 {
    public static void main(String[] args) {
        //牌盒
        //创建一个HashMap集合---存储编号和对应的牌
        HashMap<Integer,String> hm = new HashMap<Integer, String>();

        //创建一个ArrayList集合---存储编号
        ArrayList<Integer> Al = new ArrayList<Integer>();

        //装牌
        //创建花色字符数组和点数字符数组
        String [] color = {\"♠\",\"♣\",\"♥\",\"♦\"};
        String [] number = {\"A\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"J\",\"Q\",\"K\"};

        //首先定义一个记录编号的值
        int index = 0;

        //将花色字符和点数数组进行拼接
            //获取遍历点数字符数组中的每个字符
             for(String nb:number){
                 //遍历获花色数字符数组中的每个点数
                 for(String cr:color){
                     //将获取的花色字符与点数字符进行拼接
                     //字符拼接使用String类中的public String concat(String str)将指定字符串连接到此字符串的结尾。
                     String PJ = cr.concat(nb);
                     //--并添加到HashMap集合中----值--牌
                     hm.put(index,PJ);
                     //同时向ArrayList添加编号
                     Al.add(index);
                     index++;
                 }

             }
         //上述方法做完仍还有大小王没有添加---进行添加大小王
        hm.put(index,\"小王\");
        Al.add(index);
        index++;
        hm.put(index,\"大王\");
        Al.add(index);

        //洗牌--对编号进行洗牌
        Collections.shuffle(Al);


        //看牌
        //发牌
        //首先创建三个集合用来存储每个人的牌---还有一个集合存储最后三张底牌
        //创建TreeSet集合进行接受有序排序---发牌发的也是编号--斗地主三人一个底牌
        TreeSet<Integer> FP1 = new TreeSet<Integer>();
        TreeSet<Integer> FP2 = new TreeSet<Integer>();
        TreeSet<Integer> FP3 = new TreeSet<Integer>();
        TreeSet<Integer> FP4 = new TreeSet<Integer>();
        //遍历ArrayList置换后的集合---利用获取的编号调用ArrayList中get()的方法来获取集合元素
        // --并添加添加到TerrSet集合中
        for(int x=0;x<Al.size();x++){
            //底牌  //进行底牌的判断---只留最后三张---放在遍历循环的开始,以防添加到别的集合
            if(x>Al.size()-3){
                FP4.add(Al.get(x));
                //三人发牌---这是第一个拿牌的
            }else if(x%3==0){
                FP1.add(Al.get(x));
                //三人发牌--这是第二个拿牌的
            }else if(x%3==1){
                FP2.add(Al.get(x));
            }else if (x%3==2){
                //三人发牌--这是第三个拿牌的
                FP3.add(Al.get(x));
            }
        }

        //已经给玩家发牌完--现在进行看牌
        //定义功能方法---方便调用查看每个人的牌
        show(\"赵同刚\",FP1,hm);
        show(\"朱庆娜\",FP2,hm);
        show(\"王丽丽\",FP3,hm);
        show(\"底牌\",FP4,hm);


    }
    //两个明确
    //参数类型  --void  参数列表  A:传入玩家的姓名  B:传入玩家的牌(编号集合)  C:对应的牌(牌值集合)
    public static void show(String name,TreeSet<Integer> FP,HashMap<Integer,String> hm ){
        System.out.print(name+\":\");
        //首先遍历编号集合
        for(Integer e :FP){
            //利用遍历的集合编号输出---对应牌的(牌值集合)
            String tt = hm.get(e);
            System.out.print(tt+\",\");
        }
        System.out.println();
    }

}

标准有序版

public class PokerDemo {
    public static void main(String[] args) {
        // 创建一个HashMap集合
        HashMap<Integer, String> hm = new HashMap<Integer, String>();

        // 创建一个ArrayList集合
        ArrayList<Integer> array = new ArrayList<Integer>();

        // 创建花色数组和点数数组
        // 定义一个花色数组
        String[] colors = { \"♠\", \"♥\", \"♣\", \"♦\" };
        // 定义一个点数数组
        String[] numbers = { \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"J\", \"Q\",
                \"K\", \"A\", \"2\", };

        // 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
        int index = 0;

        for (String number : numbers) {
            for (String color : colors) {
                String poker = color.concat(number);
                hm.put(index, poker);
                array.add(index);
                index++;
            }
        }
        hm.put(index, \"小王\");
        array.add(index);
        index++;
        hm.put(index, \"大王\");
        array.add(index);

        // 洗牌(洗的是编号)
        Collections.shuffle(array);

        // 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
        TreeSet<Integer> fengQingYang = new TreeSet<Integer>();
        TreeSet<Integer> linQingXia = new TreeSet<Integer>();
        TreeSet<Integer> liuYi = new TreeSet<Integer>();
        TreeSet<Integer> diPai = new TreeSet<Integer>();

        for (int x = 0; x < array.size(); x++) {
            if (x >= array.size() - 3) {
                diPai.add(array.get(x));
            } else if (x % 3 == 0) {
                fengQingYang.add(array.get(x));
            } else if (x % 3 == 1) {
                linQingXia.add(array.get(x));
            } else if (x % 3 == 2) {
                liuYi.add(array.get(x));
            }
        }

        // 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
        lookPoker(\"风清扬\", fengQingYang, hm);
        lookPoker(\"林青霞\", linQingXia, hm);
        lookPoker(\"刘意\", liuYi, hm);
        lookPoker(\"底牌\", diPai, hm);
    }

    // 写看牌的功能
    public static void lookPoker(String name, TreeSet<Integer> ts,
            HashMap<Integer, String> hm) {
        System.out.print(name + \"的牌是:\");
        for (Integer key : ts) {
            String value = hm.get(key);
            System.out.print(value + \" \");
        }
        System.out.println();
    }
}

 


来源:https://www.cnblogs.com/ztg-java-xuexi/p/16074418.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 集合(模拟斗地主发牌)

相关推荐

  • 暂无文章