Java学习案例之模拟斗地主发牌

49 篇文章 0 订阅
21 篇文章 0 订阅

案例:模拟斗地主发牌

需求:使用一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分发给用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容。

步骤:

1.准备扑克牌

将花色和数字分别进行组合,生成所有的普通扑克牌,手动添加“大王”,“小王”

1.1创建数字数组

String[] nums = {“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“A”,“2”};

1.2创建花色数组

String colors = {“黑桃”,“红桃”,“梅花”,“方片”};

1.3将每一个花色分别和数字进行拼接

color[i],concat(nums[i]);

2.洗牌

2.1使用Collections工具类的**shuffle()**方法打乱牌推集合的顺序

2.2分别创建三个玩家集合对象和底牌对象

2.3遍历牌推的每一张牌,分别将索引对3取模的值为0,1,2的牌存放到三个玩家集合中,将最后三张存放到底牌集合中

3.发牌

遍历牌群,将每一张牌分发给三个玩家集合中,留三张作为底牌

4.看牌

分别打印每个玩家集合的内容

4.1将玩家集合中的牌按自然顺序进行排列:Collections.sort(list);

4.2打印玩家集合中的牌

package Example;

import java.util.*;

/*
    模拟斗地主
    1.买牌
    2.洗牌
    3.发牌
    4.看牌
 */
public class SendPokerTest {
    public static void main(String[] args) {
//        1.买牌
//        1.1定义一个双列集合,键表示牌的编号,值表示具体的牌,规则:编号越小,牌越小
        Map<Integer, String> pokers = new HashMap<>();
//        1.2定义一个单列集合,用来存储所有牌的编号
        List<Integer> list = new ArrayList<>();
//        1.3具体的买牌动作
//        普通牌
        String[] colors = {"♠","♥","♣","♦"};         //输入法输入即可,黑桃,红桃,梅花,方片
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//        通过循环嵌套,来造普通牌
        int num = 0;        //表示牌的编号
        for (String number : numbers) {               //外循环,获取所有的点数
            for (String color : colors) {           //内循环,获取花色
                String poker = color + number;
//                将牌的编号和具体的牌数放到上列集合中
                pokers.put(num,poker);
//                将牌的编号放到单列集合中
                list.add(num);
//                每添加一张牌,编号都要自增1
                num++;
            }
        }
//        大小王
//        添加小王
        pokers.put(num,"小王");
        list.add(num++);
//        添加大王
        pokers.put(num,"大王");
        list.add(num);
//        打印牌
        System.out.println("所有的牌:"+ pokers);
        System.out.println("牌的编号:"+list);
//        2.洗牌
        Collections.shuffle(list);
        System.out.println("洗牌结果:"+list);
//        3.发牌
//        3.1定义四个集合,分别表示三个玩家(aa,bb,cc)和底牌(dd)
        List<Integer> aa = new ArrayList<>();
        List<Integer> bb = new ArrayList<>();
        List<Integer> cc = new ArrayList<>();
        List<Integer> dd = new ArrayList<>();
//        3.2具体的发牌动作,将索引和3取模,决定发给谁
        for (int i = 0; i < list.size(); i++) {
//            获取编号
            Integer pokerNum = list.get(i);
            System.out.println(pokerNum);
//            如果i
            if (i >= list.size() - 3) {
                dd.add(pokerNum);
            } else if (i % 3 == 0) {
                aa.add(pokerNum);
            } else if (i % 3 == 1 ) {
                bb.add(pokerNum);
            } else {
                cc.add(pokerNum);
            }
        }
//       4.看牌
        System.out.println("aa的牌:"+ showPoker(aa,pokers));
        System.out.println("bb的牌:"+ showPoker(bb,pokers));
        System.out.println("cc的牌:"+ showPoker(cc,pokers));
        System.out.println("dd的牌:"+ showPoker(dd,pokers));

    }
    //        定义一个方法用看牌
//        方法名:showPoker
//        参数列表List(Integer),Map(Integer,String)
//        返回值就是一个String
    public static String showPoker(List<Integer> nums,Map<Integer,String> pokers) {
//        1.对牌的编号进行升序排列
        Collections.sort(nums);
//        2.遍历牌的编号集合,获取到每一个编号

        StringBuilder sb = new StringBuilder();
        for (Integer num : nums) {
//            num就是要查找的具体牌的编号
            //        3.根据编号去双列集合中查找编号对应的具体牌
            String poker = pokers.get(num);
            //        4.将获取到的牌进行拼接
            sb.append(poker + " ");
        }
//        5.返回最后的拼接结果
        String str = sb.toString();
        return str.trim();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值