Java集合斗地主案例升级版(新增看牌排序)

    技术2025-05-23  43

    上一个斗地主案例是全是用ArrayList集合做的,ArrayList集合不能实现排序功能,现在刚学会Map集合,利用Map集合的键值对来实现排序功能非常方便。 大体思路是这样的:

    先建立一个Map集合,key用来存放扑克牌的索引,value用来存54张扑克牌。再建立一个ArrayList集合,专门用来存放索引,这个ArrayList集合非常关键,能否实现排序就是靠ArrayList集合里面存放的索引,索引也是从0-53,一共54个,这个ArrayList的索引最后当做Map集合的key来取出Map集合的value。然后再对ArrayList集合进行打乱,用到了Collection接口中的shuffle方法。打乱之后就是发牌,建立四个ArrayList集合,三个存放玩家的索引,一个存放底牌的索引。最后输出Map集合中的值,建立一个方法lookpoker,分别用三个玩家和底牌的list集合中的索引来取出Map集合中相应的value,然后输出即可。事实上,Map集合中的值一直没有变,插入的时候什么样最后还是什么样,变得是list集合的索引,取出value的关键就是map.get(list里面的索引)。 代码如下: package cn.gather; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; /** * 斗地主综合案例升级版(实现了看牌时排序功能) * 1.准备牌 * 2.洗牌 * 3.发牌 * 4.看牌 */ public class DouDiZhuT { public static void main(String[] args ){ /** * 1.准备牌 */ //先建立两个数组用来存放花色和数字,然后再对他们进行合并,插入Map数组 String[] colors ={"♥","♣","♦","♠"}; String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //建立一个Map数组,先存放大王和小王 HashMap<Integer,String> map = new HashMap<>(); //创建List集合对扑克牌进行洗牌,List集合里面放的是Map集合的索引 ArrayList<Integer> list = new ArrayList<>(); map.put(0,"大王"); map.put(1,"小王"); list.add(0); list.add(1); Integer k = 2; for (String i : numbers) { for (String j : colors) { map.put(k,j+i); list.add(k); k = k +1; } } //System.out.println(map); //System.out.println(list); /** * 2.洗牌 */ //对List集合进行乱序 Collections.shuffle(list); //System.out.println(list); /** * 3.发牌 */ ArrayList<Integer> player01 = new ArrayList<>(); ArrayList<Integer> player02 = new ArrayList<>(); ArrayList<Integer> player03 = new ArrayList<>(); ArrayList<Integer> dipai = new ArrayList<>(); //遍历List集合 for (int i = 0; i < list.size(); i++) { Integer s = list.get(i); if (i>=51){ dipai.add(s); }else if (i%3==0){ player01.add(s); }else if(i%3==1){ player02.add(s); }else if(i%3==2){ player03.add(s); } } //排序 Collections.sort(player01); Collections.sort(player02); Collections.sort(player03); Collections.sort(dipai); /** * 4.看牌 */ lookpoker("云长",map,player01); lookpoker("翼德",map,player02); lookpoker("玄德",map,player03); lookpoker("底牌",map,dipai); } /** *建立看牌的方法 * @param name : 玩家姓名 * @param map :存放扑克牌的Map集合 * @param list :存放索引的List集合 */ public static void lookpoker(String name,HashMap<Integer,String> map,ArrayList<Integer> list){ //输出姓名 System.out.print(name + ": "); //遍历玩家或者底牌集合,获取索引 for (Integer key : list) { String value = map.get(key); System.out.print(value + " "); } System.out.println(); } }
    Processed: 0.012, SQL: 12