java集合框架实现斗地主的发牌,洗牌和看牌

斗地主的发牌,洗牌和看牌

利用ArrayList,TreeSet,HashMap实现斗地主的发牌,洗牌和看牌

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
    /**
         *斗地主
         *分析:
         *1.建一个集合对象,储存一副扑克
         *2.洗牌 shuffle
         *3.发牌  
         *  (1)每人13张
         *  (2)底牌另算
         *4.看牌
         *
         */
public class Demo2 {
    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> hm = new HashMap<>();  //存储索引和扑克牌,每张扑克牌一个索引
        ArrayList<Integer> al = new ArrayList<>();      //存储索引(利用ArrayList对索引排了序,方便与扑克牌一一对应加入hm)
        int index = 0 ;                                 //初始化索引

        //将索引和扑克牌储存在hm中
        for(String s1 : num){
            for(String s2 : color){
                hm.put(index, s2.concat(s1));
                al.add(index);                          //把索引放在ArrayList中,方便洗牌
                index++;                                //索引递增
            }
        }
        //将小王和大王添加到双列集合中
        hm.put(index, "小王");
        al.add(index);
        hm.put(++index, "大王");
        al.add(index);                                  //每个索引都添加到ArrayList中

        //洗牌就是洗索引
        Collections.shuffle(al);

        //发牌
        TreeSet<Integer> ts1 = new TreeSet<>();         //利用TreeSet可排序
        TreeSet<Integer> ts2 = new TreeSet<>();         
        TreeSet<Integer> ts3 = new TreeSet<>();         //三个人的牌
        TreeSet<Integer> dipai = new TreeSet<>();       //底牌
        for(int i = 0 ; i < al.size() ; i++){
            if( i > al.size() - 4){
                dipai.add(al.get(i));
            }                                           //发底牌
            else if( i % 3 == 0 ){
                ts1.add(al.get(i));
            }
            else if( i % 3 == 1 ){
                ts2.add(al.get(i));
            }
            else{
                ts3.add(al.get(i));
            }                                           //发三个人的牌
        }

        //看牌 ,遍历,通过索引获取值
        lookPoker(hm,ts1,"二哈");                     //hm一副扑克,ts13张,name谁在打牌
        lookPoker(hm,ts2,"金毛");
        lookPoker(hm,ts3,"泰迪");
        lookPoker(hm,dipai,"底牌");
    }

    public static void lookPoker(HashMap<Integer, String> hm, TreeSet<Integer> ts , String name) { //
        System.out.println(name + "的牌是;");
        for(Integer i : ts){                            //i表示双列集合中的每一个键
            System.out.print(hm.get(i) + " ");      //根据键返回值
        }               
        System.out.println();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值