day17Java-Map-模拟斗地主

博客名称
Java-(中级)

模拟斗地主1-无序牌(那样用户体验不好)
无序牌看牌没有顺序很不方便
分析:	
		1.创建List集合牌盒子
		2.创建 花色数组和点数数组
		3.装牌
		4.洗牌
		5.发牌
		6.看牌

代码演示

public class PokerDemo1 {
    public static void main(String[] args) {
        //创建扑克盒
        ArrayList<String> pokers = new ArrayList<>();

        //创建花色数组
        String[] colors= {"♠","♣","♥","♦"};
        //创建点数数组
        String[] numbers= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        //把牌装进数组
        for(String color:colors){
            for (String number:numbers){
                pokers.add(color+number);
            }
        }
        //添加大王
        pokers.add("小王");
        //添加小王
        pokers.add("大王");
        //洗牌
        Collections.shuffle(pokers);
        //创建玩扑克的人
        ArrayList<String>  liubei= new ArrayList<>();
        ArrayList<String>  guanyu= new ArrayList<>();
        ArrayList<String>  zhangfei= new ArrayList<>();
        ArrayList<String>  dipai= new ArrayList<>();
        //发牌
        for (int x = 0; x <pokers.size() ; x++) {
            if(x>=pokers.size()-3){
                dipai.add(pokers.get(x));
            }else if(x%3==0){
                liubei.add(pokers.get(x));
            }else  if(x%3==1){
                guanyu.add(pokers.get(x));
            }else  if(x%3==2){
                zhangfei.add(pokers.get(x));
            }
        }
        //看牌
        lookPoker("刘备",liubei);
        lookPoker("关羽",guanyu);
        lookPoker("张飞",zhangfei);
        lookPoker("底牌",dipai);
    }
    //看牌的功能
    public static void lookPoker(String name,ArrayList<String> arr){
        System.out.print(name+"的牌是--");
        for (String poker:arr){
            System.out.print(poker+" ");
        }
        System.out.println();
    }
}

结果:

刘备的牌是--♠10 ♠Q ♠7 ♥8 ♦10 ♥K ♦5 ♥2 ♦8 ♦7 ♠6 ♣3 大王 ♣9 ♣10 ♥4 ♣K 
关羽的牌是--♠5 ♥10 ♦A ♠J ♣5 ♠9 ♠4 ♦K ♣8 ♥5 ♦J ♥7 ♦6 ♠2 ♣Q ♥Q ♣J 
张飞的牌是--♣2 ♥J ♦9 ♣6 ♠3 ♣A ♥9 ♦2 ♠A ♦3 ♣7 ♠K ♦Q ♠8 ♣4 小王 ♦4 
底牌的牌是--♥6 ♥A ♥3 
模拟斗地主2-有序牌
写代码的时候也要注意了,不光是代码实现某个功能,有时候数据也要符合某种规则一定要配合,这里就是花色数组和点色数组循环是要有讲究的。
分析:
		1.创建TreeMap集合
		2.创建ArrayList集合
		3.创建花色数组和点数数组
		4.装牌(将编号和对应的牌装到TreeMap集合,将编号装到List集合)
		5.洗牌(洗的也是编号)
		6.发牌(发的也是编号)
		7.看牌
public class PokerDemo2 {
    public static void main(String[] args) {
        //创建TreeMap集合
        TreeMap<Integer,String> tm = new TreeMap<>();
        //创建一个ArrayList集合
        ArrayList<Integer> al = new ArrayList<>();

        //创建花色
        String[] colors={"♠","♥","♣","♦"};
        //创建点数
        //点数按照斗地主大小来定义的
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        //定义一个统计变量
        int count= 0;

        //装牌(牌的大小一定要符合数字的大小)
        //注意:外循环一定是点数,内循环花色。才符合牌大小的规则
        //如果外循环是花色,内循环是点数就会出现♥3比♠2还要大
        for(String number:numbers){
            for(String color:colors){
                tm.put(count,color+number);
                al.add(count);
                count++;
            }
        }
        //添加小王
        tm.put(count,"小王");
        al.add(count);
        count++;
        //添加大王
        tm.put(count,"大王");
        al.add(count);

        //洗牌(其实洗的是编号)
        Collections.shuffle(al);

        //创建玩扑克的人(开始玩牌的人是一个ArrayList集合是不对的,因为没有排序的)
        //其实可以想想玩poker的时候,抓到手上的牌自己来排序,所以需要的是一个TreeSet集合,而不是ArrayList集合
        TreeSet<Integer> liubei= new TreeSet<>();
        TreeSet<Integer>  guanyu= new TreeSet<>();
        TreeSet<Integer>  zhangfei= new TreeSet<>();
        TreeSet<Integer>  dipai= new TreeSet<>();

        //发牌(其实发的也是编号)
        for (int x = 0; x <al.size() ; x++) {
            if(x>=al.size()-3){
                dipai.add(al.get(x));
            }else if(x%3==0){
                liubei.add(al.get(x));
            }else if(x%3==1){
                guanyu.add(al.get(x));
            }else if(x%3==2){
                zhangfei.add(al.get(x));
            }
        }

        //看牌
        lookPoker("刘备",liubei,tm);
        lookPoker("关羽",guanyu,tm);
        lookPoker("张飞",zhangfei,tm);
        lookPoker("底",dipai,tm);

    }
    public static void lookPoker(String name,TreeSet<Integer> ts,TreeMap<Integer,String> tm){
        System.out.print(name+"牌是--");
        for(Integer key:ts){
            System.out.print(tm.get(key)+" ");
        }
        System.out.println();
    }
}

结果:

刘备牌是--♦3 ♠5 ♠6 ♥8 ♠9 ♣10 ♠J ♦J ♦Q ♥K ♣K ♦K ♥A ♣A ♠2 ♥2 大王 
关羽牌是--♣3 ♠4 ♣4 ♦5 ♥6 ♠7 ♥7 ♣7 ♠8 ♣8 ♥9 ♣9 ♦9 ♥10 ♠K ♣2 小王 
张飞牌是--♠3 ♥3 ♥4 ♦4 ♥5 ♣5 ♣6 ♦6 ♦7 ♦8 ♠10 ♦10 ♥J ♠Q ♣Q ♦A ♦2 
底牌是--♣J ♥Q ♠A 

模拟斗地主图解
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值