欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

干货|Java集合实现斗地主洗牌发牌

程序员文章站 2022-07-12 09:08:21
...

案列分析
准备4种花色牌与13种数值牌循环嵌套为52张牌,加两种特殊牌大王小王牌共54种,再进行洗牌发牌


一、思路分析

思路

1.准备牌

准备一个集合存放所有牌
准备两个数组分别存取扑克牌的4种花色和13种数值
进行嵌套组合形成52张牌加到所有牌中
把特殊牌(大王,小王)加到所有牌集合*54张牌

2.洗牌
使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换

3.发牌
创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌
总牌数先取三张放到地主牌中
依次给玩家发牌
随机产生个地主

4.看牌
输出打印玩家和地主

二、准备牌

1.准备一个集合存放所有牌

     ArrayList<String>  sum= new ArrayList<>();//存所有牌号

2.准备两个数组分别存取扑克牌的4种花色和13种数值

 //定义两个数组存花色和牌数
        String[] colors =  {"♠","♥","♣","♦"};
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

3.进行嵌套组合形成52张牌加到所有牌中


        //增强for循环嵌套遍历两个数组,组装52张牌
        for (String color : colors) {
            for (String number : numbers) {
                sum.add(color+number);
            }
        }

4.把特殊牌(大王,小王)加到所有牌集合*54张牌

//添加大王小王到集合当中
        sum.add("大王");
        sum.add("小王");

三、洗牌

1.使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换

   //       2.洗牌
    public void Shffle(ArrayList sum)
    {
        //使用集合的工具类Collections中的方法
        //static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
        Collections.shuffle(sum);
    }

四、发牌

1.创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌

    ArrayList<String> Player1 = new ArrayList<>();//玩家1
    ArrayList<String> Player2 = new ArrayList<>();//玩家2
    ArrayList<String> Player3 = new ArrayList<>();//玩家3
    ArrayList<String> Dipai = new ArrayList<>();//地主牌

2. 总牌数先取三张放到地主牌中和依次发牌玩家

  for (int i = 0; i < sum.size(); i++) {
            //获取每一张牌
            String p = (String) sum.get(i);
            //轮流发牌
            if (i >= 51) {
            //给地主牌发牌
                Dipai.add(p);
            }
            //因为i%3有三种结果就可以一张一张的给玩家发牌
            else if (i % 3 == 0) {
             //给玩家1发牌
                Player1.add(p);
            } else if (i % 3 == 1) {
             //给玩家2发牌
                Player2.add(p);
            } else if (i % 3 == 2) {
             //给玩家3发牌
                Player3.add(p);
            }
        }

3.随机产生个地主

        Random random = new Random();//产生随机数
        int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
        System.out.println("本局地主为" + a + "号玩家");//选出地主

给地主发地主牌

 //判断地主是谁然后把地主牌给他
        if(a==1)
        {   //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
            Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==2)
        {

            Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==3)
        {
            Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }


    }

五、看牌

//4.看牌
    public void show() {
        System.out.println("1号玩家" +Player1);
        System.out.println("2号玩家" + Player2);
        System.out.println("3号玩家" + Player3);
        System.out.println("地主牌为"+ Dipai);
    }

六、运行效果

干货|Java集合实现斗地主洗牌发牌

七、代码总和

斗地主案列主函数

import java.util.ArrayList;

public class DouDiZhu_PRO {
    public static void main(String[] args) {
        ArrayList<String>  sum= new ArrayList<>();//存所有牌号

        DouDiZhuPRO is = new DouDiZhuPRO();
//        1.准备牌
        is.prepare(sum);
//        2.洗牌
        is.Shffle(sum);
//        3.发牌
        is.Deal(sum);
//        4.看牌
        is.show();
    }
}

斗地主案列的类

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

public class DouDiZhuPRO {
    private ArrayList sum; //存放所有牌的总集合
    ArrayList<String> Player1 = new ArrayList<>();//玩家1
    ArrayList<String> Player2 = new ArrayList<>();//玩家2
    ArrayList<String> Player3 = new ArrayList<>();//玩家3
    ArrayList<String> Dipai = new ArrayList<>();//地主牌

    //1.准备牌
    public  void prepare(ArrayList sum)
    {
        //定义两个数组存花色和牌数
        String[] colors =  {"♠","♥","♣","♦"};
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

        //增强for循环嵌套遍历两个数组,组装52张牌
        for (String color : colors) {
            for (String number : numbers) {
                sum.add(color+number);
            }
        }

        //添加大王小王到集合当中
        sum.add("大王");
        sum.add("小王");
    }


       //       2.洗牌
    public void Shffle(ArrayList sum)
    {
        //使用集合的工具类Collections中的方法
        //static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
        Collections.shuffle(sum);
    }


      //        3.发牌

    public void Deal(ArrayList sum) {

        Random random = new Random();//产生随机数
        int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
        System.out.println("本局地主为" + a + "号玩家");//选出地主

        for (int i = 0; i < sum.size(); i++) {
            //获取每一张牌
            String p = (String) sum.get(i);
            //轮流发牌
            if (i >= 51) {
            //给地主牌发牌
                Dipai.add(p);
            }
            //因为i%3有三种结果就可以一张一张的给玩家发牌
            else if (i % 3 == 0) {
             //给玩家1发牌
                Player1.add(p);
            } else if (i % 3 == 1) {
             //给玩家2发牌
                Player2.add(p);
            } else if (i % 3 == 2) {
             //给玩家3发牌
                Player3.add(p);
            }
        }

        //判断随机产生的地主是谁然后把地主牌给他
        if(a==1)
        {   //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
            Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==2)
        {

            Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }
        if(a==3)
        {
            Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
        }


    }

    //4.看牌
    public void show() {
        System.out.println("1号玩家" +Player1);
        System.out.println("2号玩家" + Player2);
        System.out.println("3号玩家" + Player3);
        System.out.println("地主牌为"+ Dipai);
    }
    }