Java简单案例:斗地主之发牌理牌

斗地主发牌规则:

    1.新建54张牌
    2.洗牌
    3.留3张底牌
    4.发牌

1.新建54张牌

扑克牌的特点:

  1. 有2到10的数字,A,J,Q,K
  2. 除了王以外,都有4种花色
  3. 有两张王(大王、小王)

根据上面的特点建立数组pokesnumberscolors

List<String> pokes = new ArrayList<>();
List<String> colors = new ArrayList<>();
List<String> numbers = new ArrayList<>();

pokes数组:所有花色和数字组成的牌+大王+小王。
numbers数组:2到10的数字,A,J,Q,K
colors数组:4种花色

我们将4种花色输入到colors数组中

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

接下来我们按照顺序把所有字母和数字输入到numbers 数组中

numbers.add("A");
for (int i=2; i<=10;i++){
    numbers.add(i+"");
}
numbers.add("J");
numbers.add("Q");
numbers.add("K");

numberscolors 数组都输入完了,我们可以将color+number组合,写入pokes数组中组成一副扑克牌。

for (String n:numbers){
    for (String c:colors){
        String pai = c+n;
        pokes.add(pai);
    }
}

扑克牌还有大王和小王,别忘记了

pokes.add("小王");
pokes.add("大王");

我们输出下看看结果

System.out.println(pokes);

在这里插入图片描述

2.洗牌

这里我们用Java自带Collections类中的shuffle方法洗牌

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

结果
在这里插入图片描述

3.留3张底牌

建一个数组保存留下的底牌

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

用for循环,将最后3张留下,做为底牌。

for (int i = 0; i < pokes.size(); i++) {
    String pai = pokes.get(i);
    if (i >= 51) {
        dipai.add(pai);
    } else {
    }
}

4.发牌

假设有三个人分别是A1,A2,A3。那么他们拿到的牌是用数组表示

ArrayList<String> A1 = new ArrayList<>();
ArrayList<String> A2 = new ArrayList<>();
ArrayList<String> A3 = new ArrayList<>();

发牌的话就在刚才留底牌的那边else写进去

for (int i = 0; i < pokes.size(); i++) {
    String pai = pokes.get(i);
    if (i >= 51) {
        dipai.add(pai);
    } else {
        if (i % 3 == 0) {
            A1.add(pai);
        } else if (i % 3 == 1) {
            A2.add(pai);
        } else {
            A3.add(pai);
        }
    }
}

查看下结果

System.out.println("-------------------");
System.out.println("dipai:"+dipai);
System.out.println("A1:"+A1);
System.out.println("A2:"+A2);
System.out.println("A3:"+A3);

在这里插入图片描述
这样就发牌完成了。

总体代码

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

public class DouDiZhu {
    public static void main(String[] args) {
        //1.新建54张牌
        //2.洗牌
        //3.留3张底牌
        //4.发牌

        /*新建54张牌*/
        List<String> pokes = new ArrayList<>();
        List<String> colors = new ArrayList<>();
        List<String> numbers = new ArrayList<>();

        colors.add("♥");
        colors.add("♠");
        colors.add("♦");
        colors.add("♣");
        numbers.add("A");
        for (int i = 2; i <= 10; i++) {
            numbers.add(i + "");
        }
        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");

        for (String n : numbers) {
            for (String c : colors) {
                String pai = c + n;
                pokes.add(pai);
            }
        }

        pokes.add("小王");
        pokes.add("大王");
        System.out.println(pokes);
        /*洗牌*/

        Collections.shuffle(pokes);
        System.out.println("洗完牌后顺序:");
        System.out.println(pokes);


        /*留3张底牌*/

        /*发牌*/
        ArrayList<String> A1 = new ArrayList<>();
        ArrayList<String> A2 = new ArrayList<>();
        ArrayList<String> A3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        for (int i = 0; i < pokes.size(); i++) {
            String pai = pokes.get(i);
            if (i >= 51) {
                dipai.add(pai);
            } else {
                if (i % 3 == 0) {
                    A1.add(pai);
                } else if (i % 3 == 1) {
                    A2.add(pai);
                } else {
                    A3.add(pai);
                }
            }
        }

        System.out.println("-------------------");
        System.out.println("dipai:" + dipai);
        System.out.println("A1:" + A1);
        System.out.println("A2:" + A2);
        System.out.println("A3:" + A3);

    }
}

5.理牌

那么问题来了
如果我们是三位拿牌人中的一位,我们拿完牌后基本都要干一件事那就是理牌!可这怎么理牌呢?

思路:

建立新的数组pokesIndex,这个数组中有0-53数组,代表pokes数组中对应每一张牌的位置。
在这里插入图片描述
接下来打乱顺序的就只要pokesIndex数组打乱,

Collections.shuffle(pokesIndex);

用新的数组来显示打乱后顺序,相当于翻译(从数字翻译到扑克牌号码)

        List<String> pokesNew=new ArrayList<>();
        for (int i=0;i<pokesIndex.size();i++){
            int j=pokesIndex.get(i);
//            String poke = pokes.get(j);
            pokesNew.add(pokes.get(j));
//            System.out.println(pokesNew);
        }
        System.out.println(pokesNew);

在这里插入图片描述
接下来发牌还是数字的数组发牌,

ArrayList<String> A1=new ArrayList<>();
ArrayList<String> A2=new ArrayList<>();
ArrayList<String> A3=new ArrayList<>();
ArrayList<String> dipai=new ArrayList<>();
List<Integer> dipaiIndex=new ArrayList<>();
List<Integer> A1Index=new ArrayList<>();
List<Integer> A2Index=new ArrayList<>();
List<Integer> A3Index=new ArrayList<>();
for(int i=0;i<pokesIndex.size();i++){
    Integer pai=pokesIndex.get(i);
    if (i>=51){
        dipaiIndex.add(pai);
        int j=pokesIndex.get(i);
        dipai.add(pokes.get(j));
    }else {
        if (i%3==0){
            A1Index.add(pai);
            int j=pokesIndex.get(i);
            A1.add(pokes.get(j));
        }else if (i%3==1){
            A2Index.add(pai);
            int j=pokesIndex.get(i);
            A2.add(pokes.get(j));
        }else {
            A3Index.add(pai);
            int j=pokesIndex.get(i);
            A3.add(pokes.get(j));
        }
    }
}

按照数字数组用Collections类中sort方法排序

Collections.sort(dipaiIndex);
Collections.sort(A1Index);
Collections.sort(A2Index);
Collections.sort(A3Index);

最后将排序后的数字顺序翻译成扑克牌的号码

for (int i=0;i<dipaiIndex.size();i++){
    int j=dipaiIndex.get(i);
    dipaiNew.add(pokes.get(j));
}

for (int i=0;i<A1Index.size();i++){
    int j=A1Index.get(i);
    A1New.add(pokes.get(j));
}

for (int i=0;i<A2Index.size();i++){
    int j=A2Index.get(i);
    A2New.add(pokes.get(j));
}

for (int i=0;i<A3Index.size();i++){
    int j=A3Index.get(i);
    A3New.add(pokes.get(j));
}

加入理牌后的整体代码

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

public class DouDiZhu_px {
    public static void main(String[] args) {
        //1.新建54张牌
        //2.洗牌
        //3.留3张底牌
        //4.发牌

        /*新建54张牌*/
        List<String> pokes = new ArrayList<>();
        List<String> colors = new ArrayList<>();
        List<String> numbers = new ArrayList<>();

        List<Integer> pokesIndex = new ArrayList<>();
        int index = 0;
        colors.add("♥");
        colors.add("♠");
        colors.add("♦");
        colors.add("♣");
        numbers.add("A");
        for (int i = 2; i <= 10; i++) {
            numbers.add(i + "");
        }
        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");

        for (String n : numbers) {
            for (String c : colors) {
                String pai = c + n;
                pokes.add(pai);
                pokesIndex.add(index);
                index++;
            }
        }

        pokes.add("小王");
        pokesIndex.add(index);
        index++;
        pokes.add("大王");
        pokesIndex.add(index);
        index++;
        System.out.println(pokes);
        System.out.println(pokesIndex);
        /*洗牌*/
        Collections.shuffle(pokesIndex);
        System.out.println("洗完牌后顺序:");
        System.out.println(pokesIndex);
        List<String> pokesNew = new ArrayList<>();
        for (int i = 0; i < pokesIndex.size(); i++) {
            int j = pokesIndex.get(i);
//            String poke = pokes.get(j);
            pokesNew.add(pokes.get(j));
//            System.out.println(pokesNew);
        }
        System.out.println(pokesNew);


        /*留3张底牌*/

        /*发牌*/
        ArrayList<String> A1 = new ArrayList<>();
        ArrayList<String> A2 = new ArrayList<>();
        ArrayList<String> A3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();
        List<Integer> dipaiIndex = new ArrayList<>();
        List<Integer> A1Index = new ArrayList<>();
        List<Integer> A2Index = new ArrayList<>();
        List<Integer> A3Index = new ArrayList<>();
        for (int i = 0; i < pokesIndex.size(); i++) {
            Integer pai = pokesIndex.get(i);
            if (i >= 51) {
                dipaiIndex.add(pai);
                int j = pokesIndex.get(i);
                dipai.add(pokes.get(j));
            } else {
                if (i % 3 == 0) {
                    A1Index.add(pai);
                    int j = pokesIndex.get(i);
                    A1.add(pokes.get(j));
                } else if (i % 3 == 1) {
                    A2Index.add(pai);
                    int j = pokesIndex.get(i);
                    A2.add(pokes.get(j));
                } else {
                    A3Index.add(pai);
                    int j = pokesIndex.get(i);
                    A3.add(pokes.get(j));
                }
            }
        }

        System.out.println("-------------------");
        System.out.println("dipai:" + dipaiIndex);
        System.out.println("dipai:" + dipai);
        System.out.println("A1:" + A1Index);
        System.out.println("A1:" + A1);
        System.out.println("A2:" + A2Index);
        System.out.println("A2:" + A2);
        System.out.println("A3:" + A3Index);
        System.out.println("A3:" + A3);


        /*理牌*/
        List<String> dipaiNew = new ArrayList<>();
        List<String> A1New = new ArrayList<>();
        List<String> A2New = new ArrayList<>();
        List<String> A3New = new ArrayList<>();

        Collections.sort(dipaiIndex);
        Collections.sort(A1Index);
        Collections.sort(A2Index);
        Collections.sort(A3Index);

        for (int i = 0; i < dipaiIndex.size(); i++) {
            int j = dipaiIndex.get(i);
            dipaiNew.add(pokes.get(j));
        }

        for (int i = 0; i < A1Index.size(); i++) {
            int j = A1Index.get(i);
            A1New.add(pokes.get(j));
        }

        for (int i = 0; i < A2Index.size(); i++) {
            int j = A2Index.get(i);
            A2New.add(pokes.get(j));
        }

        for (int i = 0; i < A3Index.size(); i++) {
            int j = A3Index.get(i);
            A3New.add(pokes.get(j));
        }

        System.out.println("-------------------");
        System.out.println("理完牌后顺序:");
        System.out.println("dipai:" + dipaiIndex);
        System.out.println("dipai:" + dipaiNew);
        System.out.println("A1:" + A1Index);
        System.out.println("A1:" + A1New);
        System.out.println("A2:" + A2Index);
        System.out.println("A2:" + A2New);
        System.out.println("A3:" + A3Index);
        System.out.println("A3:" + A3New);


    }
}

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013611126/article/details/106983997