Java实现斗地主之洗牌发牌

本文通过实例为大家分享了Java实现斗地主之洗牌发牌的具体代码,供大家参考,具体内容如下

案例分析

需求:

实现斗地主过程中的洗牌,发牌和看牌。

并且确保每一位玩家手上拿到的牌是随机并且按照大小排序好的

思路

1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现2.往牌盒里面装牌3.洗牌,也就是把牌打散,用Collections的shuffle()方法实现4.发牌,也就是遍历结合,给三个玩家发牌5.看牌,也就是三个玩家分别遍历自己的牌

代码实现

1.创建牌盒,存放所有牌

 //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现        ArrayList<String> poker=new ArrayList<String>();

2.往牌盒里面放入所有牌组

//往牌盒里面装牌        /*            ◆2,◆3,◆4.....◆k,◆A            ♣2,...            ♥2,...            ♠2,...            小王  , 大王        */        //定义花色数组        String[] colors={"◆","♣","♥","♠"};        //定义点数数组        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};        //将所有牌组合放入牌盒        for(String col:colors)        {            for(String num:numbers)            {                poker.add(col+num);            }        }        //将最后两张大小王放入牌盒        poker.add("小王");        poker.add("大王");

3. 洗牌,也就是把牌打散,用Collections的shuffle()方法实现

//洗牌---把牌打乱        Collections.shuffle(poker);

4. 发牌,也就是遍历结合,给三个玩家发牌

//发牌--》遍历牌盒,给三个玩家发牌        ArrayList<String> p1=new ArrayList<>();        ArrayList<String> p2=new ArrayList<>();        ArrayList<String> p3=new ArrayList<>();        //留下三张底牌        ArrayList<String> dp=new ArrayList<>();        //将牌分发        for(int i=0;i<poker.size();i++)        {            if(i>=poker.size()-3)            {                dp.add(poker.get(i));            }            else if(i%3==0)            {                p1.add(poker.get(i));            }            else if(i%3==1)            {                p2.add(poker.get(i));            }            else if(i%3==2)            {                p3.add(poker.get(i));            }        }

5. 看牌,也就是三个玩家分别遍历自己的牌

//看牌---分别展示三位玩家自己的牌          show("大忽悠",p1);         show("小忽悠",p2);         show("超级无敌大忽悠",p3);         //展示底牌        System.out.print("底牌如下: ");        for(var Dp:dp)            System.out.print(Dp+" ");

看牌的方法定义:

 public static  void show(String  name,ArrayList<String> arr)    {        System.out.print(name+"的牌: ");        for(int i=0;i<arr.size();i++)        {            System.out.print(arr.get(i)+" ");        }        System.out.println();    }

完整代码和演示结果

完整代码:

import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Main{    public static void main(String[] args)    {        //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现        ArrayList<String> poker=new ArrayList<String>();       //往牌盒里面装牌        /*            ◆2,◆3,◆4.....◆k,◆A            ♣2,...            ♥2,...            ♠2,...            小王  , 大王        */        //定义花色数组        String[] colors={"◆","♣","♥","♠"};        //定义点数数组        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};        //将所有牌组合放入牌盒        for(String col:colors)        {            for(String num:numbers)            {                poker.add(col+num);            }        }        //将最后两张大小王放入牌盒        poker.add("小王");        poker.add("大王");        //洗牌---把牌打乱        Collections.shuffle(poker);       //发牌--》遍历牌盒,给三个玩家发牌        ArrayList<String> p1=new ArrayList<>();        ArrayList<String> p2=new ArrayList<>();        ArrayList<String> p3=new ArrayList<>();        //留下三张底牌        ArrayList<String> dp=new ArrayList<>();        //将牌分发        for(int i=0;i<poker.size();i++)        {            if(i>=poker.size()-3)            {                dp.add(poker.get(i));            }            else if(i%3==0)            {                p1.add(poker.get(i));            }            else if(i%3==1)            {                p2.add(poker.get(i));            }            else if(i%3==2)            {                p3.add(poker.get(i));            }        }         //看牌---分别展示三位玩家自己的牌          show("大忽悠",p1);         show("小忽悠",p2);         show("超级无敌大忽悠",p3);         //展示底牌        System.out.print("底牌如下: ");        for(var Dp:dp)            System.out.print(Dp+" ");    }    public static  void show(String  name,ArrayList<String> arr)    {        System.out.print(name+"的牌: ");        for(int i=0;i<arr.size();i++)        {            System.out.print(arr.get(i)+" ");        }        System.out.println();    }}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;public class Main{    public static void main(String[] args)    {        //HashMap存放索引和对应的牌        HashMap<Integer,String> map=new HashMap<>();        //存放索引的数组        ArrayList<Integer> index=new ArrayList<>();        //花色和点数数组        String[] colors={"◆","♣","♥","♠"};        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};        //发牌        int pos=0;//索引        for(var col:colors)        {            for(var num:numbers)            {                map.put(pos,col+num);                index.add(pos);                pos++;            }        }        //对索引执行洗牌操作        Collections.shuffle(index);        //发牌        TreeSet<Integer> p1=new TreeSet<>();        TreeSet<Integer> p2=new TreeSet<>();        TreeSet<Integer> p3=new TreeSet<>();        TreeSet<Integer> dp=new TreeSet<>();            for(int i=0;i<index.size();i++)            {                if(i>=index.size()-3)                {                    dp.add(index.get(i));                }                else if(i%3==0)                {                    p1.add(index.get(i));                }                else if(i%3==1)                {                    p2.add(index.get(i));                }                else if(i%3==2)                {                    p3.add(index.get(i));                }            }            //看牌        //看牌---分别展示三位玩家自己的牌        show("大忽悠",p1,map);        show("小忽悠",p2,map);        show("超级无敌大忽悠",p3,map);        //展示底牌        System.out.print("底牌如下: ");       for(var Dp:dp)       {           System.out.print(map.get(Dp)+" ");       }    }    public static  void show(String  name,TreeSet<Integer> arr,HashMap<Integer,String> map)    {        System.out.print(name+"牌如下: ");       for(var ele:arr)       {           System.out.print(map.get(ele)+" ");       }        System.out.println();    }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

不要惧怕黑暗,人间没有永恒的夜晚;不要担心严寒,

Java实现斗地主之洗牌发牌

相关文章:

你感兴趣的文章:

标签云: