Java用集合实现斗地主洗牌发牌

案列分析
准备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);
    }

六、运行效果

在这里插入图片描述

七、代码总和

斗地主案列主函数

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);
    }
    }


  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值