Java基础之斗地主小实现

一、案例介绍

学习了Java的集合之后,就做了一个斗地主的小demo ,主要的功能和我们玩的斗地主差不多。完成简单的发牌洗牌操作,至于怎么打,就看个人的意思了。

具体规则
使用54张牌,打乱顺序,三个玩家同时参与游戏,三人交替摸牌,每人17张,最后三张留作底牌。

二、案例分析

根据案例规则,和我们的日常经验,我们可以将需求分为以下几步:

  1. 准备54张扑克牌
    (1) 总的扑克牌可以看成一个ArrayList ,里面的每一个字符串视为一张牌
    (2) 每张牌由花色和数字组成,我们可以使用花色集合和数字集合嵌套迭代完成每张牌的组装
    (3) 牌由Collections类的shuffle方法进行随机排序
  2. 发牌
    将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌
  3. 看牌
    打印输出每个人的牌

三、开搞

  1. 准备扑克
    //构建扑克
    public static Collection<String> buildPoker(){
        ArrayList<String> pokerList = new ArrayList<>();  //总牌数
        ArrayList<String> colors = new ArrayList<>();     //花色
        ArrayList<String> numbers = new ArrayList<>();    //数字

        //添加花色集合
        colors.add("♣");
        colors.add("♦");
        colors.add("♥");
        colors.add("♠");

        //添加数字集合
        for (int i = 2; i <= 10; i++) {
            numbers.add(i+"");
        }
        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");
        numbers.add("A");

        //组合成完整扑克
        for (String c:colors){
            for (String n:numbers){
                pokerList.add(c+n);
            }
        }
        pokerList.add("♚");
        pokerList.add("♔");
        
        return pokerList;
    }
  1. 发牌
  //发牌
    public static void sendPoker(Collection<String> pokerList,Collection<String> player1,Collection<String> player2,Collection<String> player3,Collection<String> dipai){
        ArrayList<String> poker=(ArrayList<String>) pokerList;
        int size = poker.size();
        for (int i=0;i<size;i++){
            if (i>=51){
                dipai.add(poker.get(i));
            }else if (i % 3 == 0){
                player1.add(poker.get(i));
            }else if (i % 3 ==1){
                player2.add(poker.get(i));
            }else {
                player3.add(poker.get(i));
            }
        }
    }
  1. 看牌
//看牌
    public static void show(Collection<String> coll){

        Iterator<String> it = coll.iterator();
        while (it.hasNext()){
            System.out.print(it.next()+"\t");
        }
    }
  1. 测试
 public static void main(String[] args) {
        Collection<String> poker = buildPoker();
        Collections.shuffle((List<String>)poker);  //随机打乱

        //创建对象和底牌
        Collection<String> player1 = new ArrayList<>();
        Collection<String> player2 = new ArrayList<>();
        Collection<String> player3 = new ArrayList<>();
        Collection<String> dipai = new ArrayList<>();

        //进行发牌操作
        sendPoker(poker,player1,player2,player3,dipai);

        //看牌
        show(player1);
        System.out.println("");
        show(player2);
        System.out.println("");
        show(player3);
        System.out.println("");
        show(dipai);
    }

四、效果显示

在这里插入图片描述

五、总结

其实做这个项目就是将学过的集合方法做了一个简单的小汇总和练习。这里面呢,较为有趣的就是利用发牌的机制,如何依次有序的将牌发给每个人。
我在这里使用的简单粗暴地方法,直接将 i 对3 取模,将得到的结果分别给三个人,这样就实现了有序分配。而且四个人、五个人等都可以用这种方式来实现。
其实还可以运用更为简单的一致哈希值来处理……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值