天天看点

java,模拟斗地主

具体规则:

1. 组装54张扑克牌将

2. 54张牌顺序打乱

3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

5. 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

import java.lang.reflect.Array;
import java.util.*;

public class Landlords {
public static void main(String[] args) {
           

// 1.造牌

// 1.1 创建一个扑克盒双列集合,用来存储扑克牌,和对应的索引 ,键为索引,值为牌面值

Map<Integer,String> pokes = new HashMap<>();
           

// 1.2 创建一个单列集合用来存储花色

ArrayList<String> colors = new ArrayList<>();
           

// 1.3 创建一个单列集合用来存储牌面值

ArrayList<String> numbers = new ArrayList<>();
           

// 1.4 给花色集合添加花色

colors.add("♠");
    colors.add("♥");
    colors.add("♣");
    colors.add("♦");
           

// 1.5,给牌面值集合添加牌面值

numbers.add("2");
    numbers.add("A");
    numbers.add("K");
    numbers.add("Q");
    numbers.add("J");
    int index = 0;
    pokes.put(index++,"大王");
    pokes.put(index++,"小王");
    for (int i = 10; i>=3; i--) {
        numbers.add(i+"");
    }
           

// 1.6 循环嵌套遍历花色集合和牌面值集合,进行拼接得到扑克牌,并添加到扑克盒集合中

for (String number : numbers) {
        for (String color : colors) {
            String str = color+number;
            pokes.put(index,str);
            index++;
        }

    }
           

// 2.洗牌

// 2.1 获取扑克盒双列集合的所有键,也就是索引

System.out.println(pokes+"..."+index);
    Set<Integer> indexs = pokes.keySet();
           

// 2.2 把Set集合转换为List集合

ArrayList<Integer> indexlist = new ArrayList<>();
    indexlist.addAll(indexs);
    System.out.println(indexlist);
           

// 2.2 随机打乱索引

Collections.shuffle(indexlist);
    System.out.println(indexlist);
           

// 3.发牌

// 3.1.创建4个集合,分别用来存储3个玩家的索引和底牌的索引

ArrayList<Integer> index1 =  new ArrayList<>();
    ArrayList<Integer> index2 =  new ArrayList<>();
    ArrayList<Integer> index3 =  new ArrayList<>();
    ArrayList<Integer> indexdipai =  new ArrayList<>();
           

// 3.2.按照规则发索引

for (int i = 0; i < indexlist.size(); i++) {
        Integer indexpai = indexlist.get(i);
        
        if (i >= indexlist.size()-3){   // 先发底牌
            indexdipai.add(indexpai);
        }else if (i%3==0){
            index1.add(indexpai);
        }else if (i%3==1){
            index2.add(indexpai);
        }else {
            index3.add(indexpai);
        }
    }
           

// 3.3.对这4个存储索引的集合按照从小到大排序

Collections.sort(indexdipai);

    Collections.sort(index1);

    Collections.sort(index2);
   
    Collections.sort(index3);
           

// 3.4.创建4个集合,分别用来存储3个玩家和底牌的牌面值

ArrayList<String> play1 = new ArrayList<>();
    ArrayList<String> play2 = new ArrayList<>();
    ArrayList<String> play3 = new ArrayList<>();
    ArrayList<String> dipai = new ArrayList<>();
           

// 3.5.遍历排序之后的索引集合去扑克盒集合中取牌,然后添加到存储牌面值的4个结婚中

for (Integer i1 : indexdipai) {
        dipai.add(pokes.get(i1));
    }
    for (Integer i2 : index1) {
        play1.add(pokes.get(i2));
    }
    for (Integer i3 : index2) {
        play2.add(pokes.get(i3));
    }
    for (Integer i4 : index3) {
        play3.add(pokes.get(i4));
    }

    System.out.println(dipai);
    System.out.println(play1);
    System.out.println(play2);
    System.out.println(play3);
}
}