天天看點

Java學習Collections之案例:模拟鬥地主更新版

package com.itheima_109;
/*
  需求:通過程式實作鬥地主過程的洗牌,發牌和看牌。要求:對牌進行排序
  思路:
      1.建立HshMap,鍵是編号,值是牌
      2.建立ArrayList,存儲編号
      3.建立花色點數組和點數數組
      4.從0開始往HashMap裡面存儲編号,并存儲對應的牌。同時往ArrayList裡面存儲編号
      5.洗牌(洗的是編号),用Collections的shuffle()方法實作
      6.發牌(發的也是編号,為了保證編号是排序的,建立TreeSet集合接收)
      7.定義方法看牌(周遊TreeSet集合,擷取編号,到HashMap集合找對應的牌)
      8.調用看牌方法
 */

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

public class PokerDemo02 {
    public static void main(String[] args) {
        //建立HshMap,鍵是編号,值是牌
        HashMap<Integer,String> hm = new HashMap<Integer,String>();

        //建立ArrayList,存儲編号
        ArrayList<Integer> array = new ArrayList<Integer>();

        //建立花色點數組和點數數組
        String[] colors = {"♦","♣","♥","♠"};
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        //從0開始往HashMap裡面存儲編号,并存儲對應的牌。同時往ArrayList裡面存儲編号
        int index = 0;
        for(String number:numbers){
            for(String color:colors){
                hm.put(index,color+number);
                array.add(index);
                index++;
            }
        }
        hm.put(index,"小王");
        array.add(index);
        index++;
        hm.put(index,"大王");
        array.add(index);
        index++;

        //洗牌(洗的是編号),用Collections的shuffle()方法實作
        Collections.shuffle(array);

        //發牌(發的也是編号,為了保證編号是排序的,建立TreeSet集合接收)
        TreeSet<Integer>  lqxSet = new TreeSet<Integer>();
        TreeSet<Integer>  lySet = new TreeSet<Integer>();
        TreeSet<Integer>  fqySet = new TreeSet<Integer>();
        TreeSet<Integer>  dpSet = new TreeSet<Integer>();

        for(int i = 0;i < array.size();i++){
            int x = array.get(i);
            if(i >=array.size() - 3){
                dpSet.add(x);
            }else if(i % 3 == 0){
                lqxSet.add(x);
            }else if(i % 3 == 1){
                lySet.add(x);
            }else if(i % 3 ==2 ) {
                fqySet.add(x);
            }
        }
        //調用看牌方法
        lookPoker("林青霞", lqxSet, hm);
        lookPoker("柳煙", lySet, hm);
        lookPoker("風輕楊", fqySet, hm);
        lookPoker("底牌", dpSet, hm);
    }
    //定義方法看牌(周遊TreeSet集合,擷取編号,到HashMap集合找對應的牌)
    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.print(name + "的牌是:");
        for(Integer key:ts){
            String poker = hm.get(key);
            System.out.print(poker +"\t");
        }
        System.out.println();
    }
}