Java集合的综合案例之——斗地主的“洗牌”与“发牌”并“排序”

练习

HashMap编写斗地主洗牌发牌并排序案例

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

public class PokerCard {
    public static void main(String[] args) {
        //1.准备牌
        //创建一个Map集合,存储扑克牌的索引和组装好的扑克牌
        HashMap<Integer, String> map = new HashMap<>();
        //创建一个List集合来存储扑克牌的索引,方便之后对扑克牌进行洗牌操作(操作索引)
        ArrayList<Integer> pokerIndex = new ArrayList<>();
        //定义两个List集合,用来存储扑克牌的而花色和序号
        List<String> kind = List.of("♥", "♠", "♦", "♣");
        List<String> number = List.of("3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");
        //把大王和小王存储到集合中
        //初始化索引为0
        int index = 0;
        map.put(index,"大王");
        pokerIndex.add(index);
        index++;
        map.put(index,"小王");
        pokerIndex.add(index);
        index++;
        //组装两个集合的数据,生成带花色的52张牌(可以用普通for循环,也可以用增强for循环foreach)
        for (String num : number) {
            for (String k : kind) {
                map.put(index,k+num);
                pokerIndex.add(index);
                index++;
            }
        }
//        System.out.println(map);//打印扑克牌集合

        //2.洗牌
        Collections.shuffle(pokerIndex);
        System.out.println(pokerIndex);
        //发牌
        //定义4个集合,分别存储3个玩家的牌和3张底牌
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> bottoms = new ArrayList<>();
        //遍历存放扑克牌索引的list集合,获取每一张牌的索引
        for (int i = 0; i < pokerIndex.size(); i++) {
            Integer integer = pokerIndex.get(i);
            if (i>=51){
                //发牌给底牌
                bottoms.add(integer);
            }else if (i%3==0){
                //发牌给玩家1
                player1.add(integer);
            }
            else if (i%3==1){
                //发牌给玩家1
                player2.add(integer);
            }
            else if (i%3==2){
                //发牌给玩家1
                player3.add(integer);
            }
        }
        //4.排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(bottoms);//默认升序排序
        //5.看牌
        seePoker("player1",map,player1);
        seePoker("player2",map,player2);
        seePoker("player3",map,player3);
        seePoker("bottoms",map,bottoms);
        System.out.println("---------------");
        lookPoker("player1",map,player1);
        lookPoker("player2",map,player2);
        lookPoker("player3",map,player3);
        lookPoker("bottoms",map,bottoms);
        
    }

    //在主函数外定义一个方法用来看牌,提高代码的复用性
    /*
    * 参数:
    *   String name;玩家名称
    *   HashMap<Integer, String> map  存储扑克牌的集合
    *   ArrayList<Integer> list     存储玩家牌和底牌的list集合
    *查表法:
    *   遍历玩家牌或底牌集合,获取扑克牌索引
    *   使用索引区装所有扑克牌的map集合中找到对应的扑克牌
    *
    *   */

    public static void seePoker(String name,HashMap<Integer,String> pokerMap,ArrayList<Integer> list){
        //输出玩家名称,不换行
        System.out.print(name+":");
        //遍历传入该方法的扑克牌索引集合,即分别存储3个玩家的牌和3张底牌List集合,获取扑克牌索引
        for (Integer key : list) {
            //使用索引区装所有扑克牌的map集合中找到对应的扑克牌
            String value = pokerMap.get(key);
            System.out.print(value+" ");
        }
        System.out.println();//换行

    }

    //或者定义一个方法,打印玩家的牌和底牌的集合
    public static void lookPoker(String name,HashMap<Integer,String> pokerMap,ArrayList<Integer> list){
        //输出玩家名称,不换行
        System.out.print(name+":");
        ArrayList<String> arrayList = new ArrayList<>();
        //遍历传入该方法的扑克牌索引集合,即分别存储3个玩家的牌和3张底牌List集合,获取扑克牌索引
        for (Integer key : list) {
            //使用索引区装所有扑克牌的map集合中找到对应的扑克牌
            String value = pokerMap.get(key);
            arrayList.add(value);
        }
        System.out.println(arrayList);
    }
}

运行结果:

posted @ 2021-04-27 15:56  牛牛ō^ō  阅读(130)  评论(0编辑  收藏  举报