crushS  

案例:模拟斗地主发牌

一、买一副扑克牌

分析:

  1. 创建数字数组:String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

  2. 创建花色数组:String[] colors = {"方片","梅花","红桃","黑桃"};

  3. 将每一个花色分别和数字进行拼接:colors[i].concat(nums[j]);

import java.util.*;

public class Test01 {


   public static void main(String[] args) {
       //1.买牌
       //1.1 定义一个双列集合,键:表示牌的编号 规则:编号越小,牌越小
       Map<Integer,String> map = 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 s1=color+number;
               // 将牌的编号,具体的牌放到双列集合中
               map.put(num,s1);
               // 将牌的编号放到单列集合中
               list.add(num);
               // 没添加一张牌,编号要自增一
               num++;
          }
      }
       // 大小王
       map.put(num,"小王");
       list.add(num++);
       map.put(num,"大王");
       list.add(num);
       // 打印牌
       System.out.println("所有的牌:"+map);
       System.out.println("牌的编号:"+list);

       //2. 洗牌
       Collections.shuffle(list);
       System.out.println(list);

       //3. 发牌
       //3.1 定义四个集合,分别表示三个玩家,底牌
       List<Integer> list1 = new ArrayList<>();
       List<Integer> list2 = new ArrayList<>();
       List<Integer> list3 = new ArrayList<>();
       List<Integer> list4 = new ArrayList<>();
       //3.2 具体的发牌动作,将索引和 3 取模,决定发给谁
       for(int i=0;i<list.size();i++){
           // 获取编号
          Integer PokerNum = list.get(i);
          if(i>=list.size()-3){
              list4.add(PokerNum);
          }else if(i%3==0){
              list1.add(PokerNum);
          }else if(i%3==1){
              list2.add(PokerNum);
          }else if(i%3==2){
              list3.add(PokerNum);
          }
      }
       //3.3 查看玩家,底牌的编号
       System.out.println("list1:"+list1);
       System.out.println("list2:"+list2);
       System.out.println("list3:"+list3);
       System.out.println("list4:"+list4);
       //4.查看具体的牌
       System.out.println("-------------------");

       System.out.println( printPoker(list1,map));
       System.out.println( printPoker(list2,map));
       System.out.println( printPoker(list3,map));
       System.out.println( printPoker(list4,map));
  }
   /*
      // 4.定义一个方法,用来看牌
           方法名:printPoker
           参数列表:List<Integer>,Map<Integer,String>
           返回值:String
      */
   public static String printPoker(List<Integer> nums, Map<Integer,String> pokers){
       //1.对牌的编号进行升序排列
       Collections.sort(nums);
       //2. 遍历牌的编号集合,获取到每一个编号
       StringBuilder sb=new StringBuilder();
       for (Integer num : nums) {
       //3. 根据编号去双列集合中查找该编号对应的具体牌
          String poker = pokers.get(num);
       //4. 将获取到的牌进行拼接
           sb.append(poker+" ");
      }
       //5. 将最后拼接结果返回即可
       String str = sb.toString();
       return str.trim();
  }
}

 

posted on 2021-04-29 21:25  crushS  阅读(148)  评论(0编辑  收藏  举报