8、用java的ArrayList集合完成模擬鬥地主案例

小不點_發表於2020-11-13


1. 模擬鬥地主案例-普通版本

案例需求:
通過程式實現鬥地主過程中的洗牌,發牌和看牌

程式碼實現:

import java.util.ArrayList;
import java.util.Collections;

/*
    思路:
        1:建立一個牌盒,也就是定義一個集合物件,用ArrayList集合實現
        2:往牌盒裡面裝牌
        3:洗牌,也就是把牌打撒,用Collections的shuffle()方法實現
        4:發牌,也就是遍歷集合,給三個玩家發牌
        5:看牌,也就是三個玩家分別遍歷自己的牌
 */
public class PokerDemo {
    public static void main(String[] args) {
        //建立一個牌盒,也就是定義一個集合物件,用ArrayList集合實現
        ArrayList<String> array = new ArrayList<String>();

        //往牌盒裡面裝牌
        /*
            ♦2,♦3,♦4...♦K,♦A
            ♣2,...
            ♥2,...
            ♠2,...
            小王,大王
         */
        //定義花色陣列
        String[] colors = {"♦", "♣", "♥", "♠"};
        //定義點數陣列
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        for (String color : colors) {
            for (String number : numbers) {
                array.add(color + number);
            }
        }
        array.add("小王");
        array.add("大王");

        //洗牌,也就是把牌打撒,用Collections的shuffle()方法實現
        Collections.shuffle(array);

//        System.out.println(array);

        //發牌,也就是遍歷集合,給三個玩家發牌
        ArrayList<String> lqxArray = new ArrayList<String>();
        ArrayList<String> lyArray = new ArrayList<String>();
        ArrayList<String> fqyArray = new ArrayList<String>();
        ArrayList<String> dpArray = new ArrayList<String>();

        for (int i = 0; i < array.size(); i++) {
            String poker = array.get(i);
            if (i >= array.size() - 3) {
                dpArray.add(poker);
            } else if (i % 3 == 0) {
                lqxArray.add(poker);
            } else if (i % 3 == 1) {
                lyArray.add(poker);
            } else if (i % 3 == 2) {
                fqyArray.add(poker);
            }
        }

        //看牌,也就是三個玩家分別遍歷自己的牌
        lookPoker("林青霞", lqxArray);
        lookPoker("柳巖", lyArray);
        lookPoker("風清揚", fqyArray);
        lookPoker("底牌", dpArray);
    }

    //看牌的方法
    public static void lookPoker(String name, ArrayList<String> array) {
        System.out.print(name + "的牌是:");
        for (String poker : array) {
            System.out.print(poker + " ");
        }
        System.out.println();
    }
}

2. 模擬鬥地主案例-升級版本

案例需求 :
通過程式實現鬥地主過程中的洗牌,發牌和看牌。要求:對牌進行排序

程式碼實現:

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

/*
    思路:
        1:建立HashMap,鍵是編號,值是牌
        2:建立ArrayList,儲存編號
        3:建立花色陣列和點數陣列
        4:從0開始往HashMap裡面儲存編號,並儲存對應的牌。同時往ArrayList裡面儲存編號
        5:洗牌(洗的是編號),用Collections的shuffle()方法實現
        6:發牌(發的也是編號,為了保證編號是排序的,建立TreeSet集合接收)
        7:定義方法看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
        8:呼叫看牌方法
 */
public class PokerDemo {
    public static void main(String[] args) {
        //建立HashMap,鍵是編號,值是牌
        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);

        //洗牌(洗的是編號),用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 + " ");
        }
        System.out.println();
    }
}

相關文章