【Java学习记录-11】用HashMap和TreeSet集合实现斗地主过程中的洗牌,发牌和看牌

代码

import java.util.*;

public class PokerDemo {

    public static void main(String[] args) {

        //准备牌
        HashMap<Integer, String> poker = new HashMap<>();
        ArrayList<Integer> pokerIndex = new ArrayList<>();
        List<String> colors = List.of("♥", "♠", "♣", "♦");
        List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        int index = 0;

        for (String number : numbers) {
            for (String color : colors) {
                poker.put(index, color + number);
                pokerIndex.add(index);
                index++;
            }
        }
        poker.put(index, "小王");
        pokerIndex.add(index);
        index++;
        poker.put(index, "大王");
        pokerIndex.add(index);

        //洗牌
        Collections.shuffle(pokerIndex);

        //发牌
        ArrayList<Integer> player01 = new ArrayList<>();
        ArrayList<Integer> player02 = new ArrayList<>();
        ArrayList<Integer> player03 = new ArrayList<>();
        ArrayList<Integer> lastThreeCards = new ArrayList<>(); //底牌

        for (int i = 0; i < pokerIndex.size(); i++) {
            int card = pokerIndex.get(i);
            if (i >= 51) {
                lastThreeCards.add(card);
            } else if (i % 3 == 0) {
                player01.add(card);
            } else if (i % 3 == 1) {
                player02.add(card);
            } else if (i % 3 == 2) {
                player03.add(card);
            }
        }

        //排序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(lastThreeCards);

        //打印牌面
        printCards("玩家1", poker, player01);
        printCards("玩家2", poker, player02);
        printCards("玩家3", poker, player03);
        printCards("底牌", poker, lastThreeCards);
    }

	//打印牌面
    public static void printCards(String name, HashMap<Integer, String> poker, ArrayList<Integer> list) {
	    System.out.print(name + ":");
	    for (Integer key : list) {
	        String value = poker.get(key);
	        System.out.print(value + " ");
	    }
	    System.out.println();
    }
}

实现思路

洗牌的思路:

  1. 准备一副扑克牌,使用HashMap来表示,键为牌的编号,值为牌的名字。
  2. 使用ArrayList来表示洗好的牌的编号。
  3. 使用Collections.shuffle()方法来随机打乱牌的编号。

发牌的思路:

  1. 准备好3个ArrayList类型的变量来表示3个玩家的手牌,以及一个ArrayList类型的变量来表示底牌。
  2. 使用for循环,依次从洗好的牌中取出编号,再根据编号从HashMap中取出牌的名字,然后按照发牌规则,将牌分配给3个玩家和底牌。

看牌的思路:

  1. 使用Collections.sort()方法对每个玩家的手牌和底牌进行排序。
  2. 遍历每个玩家的手牌和底牌,根据牌的编号从HashMap中取出牌的名字,并将牌的名字输出即可。

你可能感兴趣的:(Java,java,学习,windows)