Java 斗地主案例实现

模拟斗地主游戏:
分析:
1、准备一副扑克牌(Map 键 从 1~54),54张,
组成 数字(13个数字2~10 和字母 j q k A ) 和 花色(4种)
组排规则:从数字和字母获取每一个数字和字母跟4种花色分组组成不同的牌
将牌添加map集合中, 键从小到大。开始=1 每次组成一张牌 键++
大王和小王组成一幅牌。
2、将牌打乱使用工具collections
最后3张保留底牌。产生一个随机地主。
循环牌,每3个是一组。
4、排序调用COllections工具类.sort。
5、遍历所有玩家的牌。迭代器遍历玩家集合。
开发步骤:
1、准备一副扑克牌。定义方法
2、打乱扑克牌的顺序 定义方法
3、将扑克牌发给3个玩家 ,剩余3张作为底牌 定义方法
4、玩家对自己牌排序 定义方法
5、看牌 定义方法
代码实现:

package cn.shichuang.demo;

import java.util.*;

public class ddz {
    //制作牌函数
    public static void pyMean(Map<Integer, String> map, List<String> list){
        String[] s1 = {"梅花","红桃","方块","黑桃"};
        String[] s2 = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        map.put(1,"大王");
        map.put(2,"小王");
        int a=3;
        while(a<=54){
            for(int i=0;i<s1.length;i++){
                for(int j=0;j<s2.length;j++){
                    String c = s1[i]+s2[j];
                    map.put(a,c);
                    a++;
                    if(a>54){
                        break;
                    }
                }
            }
        }
        System.out.println("牌已经取出");
    }
    //菜单函数
    public static void pyCanDan(){
        Scanner x = new Scanner(System.in);
        Map<Integer,String> map = new HashMap();
        List<String> list = new ArrayList<>();
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<String> list3 = new ArrayList<>();
        int b=0;
        System.out.println("=====开始斗地主=====");
        while(true){
            System.out.println("=====操作=====");
            System.out.println("1    取出扑克");
            System.out.println("2    洗牌");
            System.out.println("3    摸牌");
            System.out.println("4    看牌");
            System.out.println("0    退出");
            System.out.println("请选择操作");
            int c  =x.nextInt();
            switch (c){
                case 0:
                    b=1;
                    break;
                case 1:
                    pyMean(map,list);
                    findAll(map,list);
                    break;
                case 2:
                    clearAll(list);
                    break;
                case 3:
                    sentAll(list,list1,list2,list3);
                    break;
                case 4:
                    lookCode(list,list1,list2,list3);
                    break;

            }
            if(b==1){
                break;
            }

        }
    }
    //看牌函数
    public static void lookCode(List<String> list,List<String> list1,List<String> list2,List<String> list3){
        Collections.sort(list1);
        System.out.println("\n小白的牌为:");
        Interde(list1);

        Collections.sort(list2);
        System.out.println("\n小红的牌为:");
        Interde(list2);

        Collections.sort(list3);
        System.out.println("\n小民的牌为:");
        Interde(list3);
        System.out.println();
    }
    //集合迭代器
    public static void Interde(Collection<?> c){
        Iterator<?> ad = c.iterator();
        while(ad.hasNext()){
            System.out.print(ad.next()+"  ");
        }
    }

    //洗牌函数
    public static void clearAll(List<String> list){
        Collections.shuffle(list);
        System.out.println("洗牌完毕");
    }

    //发牌函数
    public static void sentAll(List<String> list,List<String> list1,List<String> list2,List<String> list3){
        Scanner x = new Scanner(System.in);
        for(int i=0;i<list.size()-3;){
            list1.add(list.get(i));
            list2.add(list.get(i+1));
            list3.add(list.get(i+2));
            i+=3;
        }
        System.out.println("开始抢地主");
        System.out.println("1  小白抢地主");
        System.out.println("2  小红抢地主");
        System.out.println("3  小民抢地主");
        int c = x.nextInt();
        if(c<1 || c>3){
            System.out.println("输入有误请重新输入");
            c = x.nextInt();
        }
        for(int i=list.size()-3;i<list.size();i++){
            if(c==1){
                list1.add(list.get(i));
            }
            if(c==2){
                list2.add(list.get(i));
            }
            if(c==3){
                list3.add(list.get(i));
            }
        }


    }

    //查看牌
    public static void findAll(Map<Integer,String> map,List list){
        //1、获取键值对映射对象,保存到单列集合中。
        Set<Map.Entry<Integer,String>> keyset=  map.entrySet();
        //2、循环遍历单列集合
        Iterator<Map.Entry<Integer,String>> it=  keyset.iterator();
        //3、获取集合中单个的映射对象
        while(it.hasNext()){
            Map.Entry<Integer,String> entrys= it.next();
            //4、从映射对象中获取键,和 值
            Integer key=  entrys.getKey();
            String value=entrys.getValue();
            list.add(value);
            //System.out.println(key+"对应的值"+value);
        }
    }

    public static void main(String[] args) {

        pyCanDan();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值