1. 程式人生 > >模擬鬥地主

模擬鬥地主

模擬鬥地主 鬥地主

(1)無序
import java.util.ArrayList;
import java.util.Collections;

/*
模擬鬥地主的洗牌和發牌

  • *思路:

  • 1)創建一個牌盒(容器:集合)
  • ArrayList<String>
  • 2)裝牌
  • 定義花色數組和點數數組(A,K)
  • 紅桃A
  • 黑桃A
  • 梅花A
  • 方片A
  • ....
  • 3)洗牌
  • Collections中的隨機置換的功能
  • 4)發牌
  • 遍歷集合(獲取集合中的具體的牌)
  • 需要判斷:選擇結構語句
  • 1--->A 2--->B 3----C
  • 4---A .................
  • 鬥地主三個玩
  • 發個三個人----->三個人分別ArrayList<String>
  • 如果當前牌 % 3 ==0/1/2
  • 5)看牌
  • 三個人看牌:將看牌封裝成一個功能(獨立的 代碼塊)
  • */
    public class Poker {

    public static void main(String[] args) {

    //1.創建牌盒
    ArrayList<String> array = new ArrayList<String>() ;
    
    //2.裝牌
    //2.1創建花色數組
    String[] colors = {"?","?","?","?"} ;
    //2.2 創建點數數組
    String[] numbers = {"A","2","3","4","5","6","7","8","9",
                        "10","J","Q","K"} ;
    for(String color :colors) {
        for(String number:numbers) {
                String poker = color.concat(number) ;
                array.add(poker) ;
        }
    }
    
    //添加小王和大王
    array.add("小王") ;
    array.add("大王") ;
    
    //3. 洗牌
    Collections.shuffle(array);
    
    //4.發牌
    //現在三個人玩,把每一個看成集合ArrayList
    ArrayList<String> player1 = new ArrayList<String>() ;
    ArrayList<String> player2 = new ArrayList<String>() ;
    ArrayList<String> player3 = new ArrayList<String>() ;
    ArrayList<String> diPai = new ArrayList<String>() ;
    
    //有規律的:遍歷ArrayList集合 使用普通for循環,獲取到集合的元素
    //通過元素 % 人數 = 0  /1/2 /..
    for(int x = 0 ; x < array.size() ; x ++) {
        //獲取到每一個元素
        if(x >= array.size() -3) {
            diPai.add(array.get(x)) ;
        }else if(x % 3 == 0) {
            //玩家1
            player1.add(array.get(x)) ;
        }else if(x % 3 == 1) {
            //玩家2
            player2.add(array.get(x)) ;
        }else if(x % 3 == 2) {
            player3.add(array.get(x)) ;
        }
    }
    
    //5)看牌 

    // * 三個人看牌:將看牌封裝成一個功能(獨立的 代碼塊)
    lookPoker("玩家1", player1);
    lookPoker("玩家2", player2);
    lookPoker("玩家3", player3);
    lookPoker("底牌", diPai);
    }

    public static void lookPoker(String name,ArrayList<String> array) {
    System.out.print(name+"的牌是:");

    for(String s : array) {
    System.out.print(s+" ");
    }
    System.out.println();
    }
    }
    (2)有序
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;

/**

  • 模擬鬥地主的洗牌和發牌,發到每一個手上的牌是保證有序的.. 思考: 1)創建牌盒
  • 創建兩個集合:HashMap<Integer,String>,ArrayList<Integer> 2)裝牌 定義花色數組和點數數組
  • 從0開始編號,將編號和編號對應的牌都存儲到HashMap集合中,同時往ArrayList單獨存儲編號 3)洗牌 洗的是編號 4)發牌
  • 發的也是編號,為了保證牌有序,集合由TreeSet集合接收 5)看牌 封裝功能
  • */
    public class Porker2 {

    public static void main(String[] args) {
    // 1. 創建兩個集合:HashMap<Integer,String>,ArrayList<Integer>
    HashMap<Integer, String> hm = new HashMap<Integer, String>();
    ArrayList<Integer> array = new ArrayList<Integer>();

    // 2.裝牌
    // 2.1 定義花色數組和點數數組
    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) {
            String poker = color.concat(number);
            hm.put(index, poker);
            array.add(index);
            index++;
        }
    }
    
    // 裝小王和大王
    hm.put(index, "小王");
    array.add(index);
    index++;
    hm.put(index, "大王");
    array.add(index);
    // 不能++了,角標越界
    
    // 洗牌
    Collections.shuffle(array);
    
    // 4)發牌
    // 發的也是編號,為了保證牌有序,集合由TreeSet集合接收
    TreeSet<Integer> player1 = new TreeSet<Integer>();
    TreeSet<Integer> player2 = new TreeSet<Integer>();
    TreeSet<Integer> player3 = new TreeSet<Integer>();
    TreeSet<Integer> diPai = new TreeSet<Integer>();
    
    // 有規律的:遍歷ArrayList集合 使用普通for循環,獲取到集合的元素
    // 通過元素 % 人數 = 0 /1/2 /..
    for (int x = 0; x < array.size(); x++) {
        // 獲取到每一個元素
        if (x >= array.size() - 3) {
            diPai.add(array.get(x));
        } else if (x % 3 == 0) {
            // 玩家1
            player1.add(array.get(x));
        } else if (x % 3 == 1) {
            // 玩家2
            player2.add(array.get(x));
        } else if (x % 3 == 2) {
            player3.add(array.get(x));
        }
    }

    // 5)看牌 封裝功能
    lookPoker("玩家1", player1, hm);
    lookPoker("玩家2", player2, hm);
    lookPoker("玩家3", player3, hm);
    lookPoker("底牌", diPai, hm);

    }

    public static void lookPoker(String name,TreeSet<Integer> ts,
    HashMap<Integer, String> hm) {
    System.out.print(name+"的牌是:");
    //遍歷TreeSet集合獲取到每一個編號
    for(Integer key :ts) {
    //獲取到編號,通過編號找牌(在HashMap中找)
    String value = hm.get(key) ;
    System.out.print(value+" ");
    }
    System.out.println();
    }
    }

模擬鬥地主