最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)斗地主之洗牌發(fā)牌

 更新時間:2021年06月14日 06:20:43   作者:大忽悠愛忽悠  
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)斗地主之洗牌發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文通過實例為大家分享了Java實現(xiàn)斗地主之洗牌發(fā)牌的具體代碼,供大家參考,具體內(nèi)容如下

案例分析

需求:

實現(xiàn)斗地主過程中的洗牌,發(fā)牌和看牌。

并且確保每一位玩家手上拿到的牌是隨機并且按照大小排序好的

思路

1.創(chuàng)建一個牌盒,也就是定義一個集合對象,用ArrayList集合實現(xiàn)
2.往牌盒里面裝牌
3.洗牌,也就是把牌打散,用Collections的shuffle()方法實現(xiàn)
4.發(fā)牌,也就是遍歷結(jié)合,給三個玩家發(fā)牌
5.看牌,也就是三個玩家分別遍歷自己的牌

代碼實現(xiàn)

1.創(chuàng)建牌盒,存放所有牌

 //創(chuàng)建一個牌盒,也就是定義一個集合對象,用ArrayList集合實現(xiàn)
        ArrayList<String> poker=new ArrayList<String>();

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

//往牌盒里面裝牌
        /*
            ◆2,◆3,◆4.....◆k,◆A
            ♣2,...
            ♥2,...
            ♠2,...
            小王  , 大王
        */
        //定義花色數(shù)組
        String[] colors={"◆","♣","♥","♠"};
        //定義點數(shù)數(shù)組
        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()方法實現(xiàn)

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

4. 發(fā)牌,也就是遍歷結(jié)合,給三個玩家發(fā)牌

//發(fā)牌--》遍歷牌盒,給三個玩家發(fā)牌
        ArrayList<String> p1=new ArrayList<>();
        ArrayList<String> p2=new ArrayList<>();
        ArrayList<String> p3=new ArrayList<>();
        //留下三張底牌
        ArrayList<String> dp=new ArrayList<>();
        //將牌分發(fā)
        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();
    }

完整代碼和演示結(jié)果

完整代碼:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        //創(chuàng)建一個牌盒,也就是定義一個集合對象,用ArrayList集合實現(xiàn)
        ArrayList<String> poker=new ArrayList<String>();
       //往牌盒里面裝牌
        /*
            ◆2,◆3,◆4.....◆k,◆A
            ♣2,...
            ♥2,...
            ♠2,...
            小王  , 大王
        */
        //定義花色數(shù)組
        String[] colors={"◆","♣","♥","♠"};
        //定義點數(shù)數(shù)組
        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);
       //發(fā)牌--》遍歷牌盒,給三個玩家發(fā)牌
        ArrayList<String> p1=new ArrayList<>();
        ArrayList<String> p2=new ArrayList<>();
        ArrayList<String> p3=new ArrayList<>();
        //留下三張底牌
        ArrayList<String> dp=new ArrayList<>();
        //將牌分發(fā)
        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();
    }
}

哈希表優(yōu)化

區(qū)別: 上面是用一個字符串?dāng)?shù)組來存儲所有牌的組合,并且也是對字符串?dāng)?shù)組進行洗牌操作,較為麻煩,而用哈希表之后,我們可以對每一張牌對應(yīng)的索引進行洗牌操作。

并且上面也要求了,對每一位玩家的牌進行排序,而上面我們并沒有實現(xiàn),因此下面我們使用Treeset來保存每一位玩家所拿到的牌,確保完成了排序功能

思路:

代碼實現(xiàn):

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        //HashMap存放索引和對應(yīng)的牌
        HashMap<Integer,String> map=new HashMap<>();
        //存放索引的數(shù)組
        ArrayList<Integer> index=new ArrayList<>();
        //花色和點數(shù)數(shù)組
        String[] colors={"◆","♣","♥","♠"};
        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //發(fā)牌
        int pos=0;//索引
        for(var col:colors)
        {
            for(var num:numbers)
            {
                map.put(pos,col+num);
                index.add(pos);
                pos++;
            }
        }
        //對索引執(zhí)行洗牌操作
        Collections.shuffle(index);
        //發(fā)牌
        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();
    }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文詳解SpringBoot使用Kafka如何保證消息不丟失

    一文詳解SpringBoot使用Kafka如何保證消息不丟失

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用Kafka如何保證消息不丟失的相關(guān)知識,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2025-01-01
  • Javaweb EL自定義函數(shù)開發(fā)及代碼實例

    Javaweb EL自定義函數(shù)開發(fā)及代碼實例

    這篇文章主要介紹了Javaweb EL自定義函數(shù)開發(fā)及代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • java 內(nèi)嵌Groovy動態(tài)腳本操作

    java 內(nèi)嵌Groovy動態(tài)腳本操作

    這篇文章主要介紹了java 內(nèi)嵌Groovy動態(tài)腳本操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringMVC @ResponseBody 415錯誤處理方式

    SpringMVC @ResponseBody 415錯誤處理方式

    這篇文章主要介紹了SpringMVC @ResponseBody 415錯誤處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java線程池ForkJoinPool(工作竊取算法)的使用

    Java線程池ForkJoinPool(工作竊取算法)的使用

    Fork就是把一個大任務(wù)切分為若干個子任務(wù)并行地執(zhí)行,Join就是合并這些子任務(wù)的執(zhí)行結(jié)果,最后得到這個大任務(wù)的結(jié)果。Fork/Join?框架使用的是工作竊取算法。本文主要介紹了ForkJoinPool的使用,需要的可以參考一下
    2022-11-11
  • spring security實現(xiàn)下次自動登錄功能過程解析

    spring security實現(xiàn)下次自動登錄功能過程解析

    這篇文章主要介紹了spring security實現(xiàn)記住我下次自動登錄功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • MyBatis插入數(shù)據(jù)返回主鍵的介紹

    MyBatis插入數(shù)據(jù)返回主鍵的介紹

    今天小編就為大家分享一篇關(guān)于MyBatis插入數(shù)據(jù)返回主鍵的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 最新評論

    贵溪市| 万州区| 尤溪县| 朝阳县| 弋阳县| 湄潭县| 融水| 云林县| 武夷山市| 清远市| 襄城县| 左权县| 九寨沟县| 龙泉市| 樟树市| 称多县| 濮阳市| 历史| 九龙县| 朝阳市| 嘉鱼县| 斗六市| 建昌县| 海口市| 黄大仙区| 成武县| 西盟| 海林市| 正阳县| 巴楚县| 西城区| 鹤山市| 仁怀市| 同仁县| 霍城县| 壶关县| 依安县| 静安区| 赣榆县| 开平市| 陆丰市|