欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

案例分析

需求:

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

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

思路

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

代碼實(shí)現(xiàn)

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

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

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

//往牌盒里面裝牌
        /*
            ◆2,◆3,◆4.....◆k,◆A
            ♣2,...
            ♥2,...
            ♠2,...
            小王  , 大王
        */
        //定義花色數(shù)組
        String[] colors={"◆","♣","♥","♠"};
        //定義點(diǎn)數(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()方法實(shí)現(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集合實(shí)現(xiàn)
        ArrayList<String> poker=new ArrayList<String>();
       //往牌盒里面裝牌
        /*
            ◆2,◆3,◆4.....◆k,◆A
            ♣2,...
            ♥2,...
            ♠2,...
            小王  , 大王
        */
        //定義花色數(shù)組
        String[] colors={"◆","♣","♥","♠"};
        //定義點(diǎn)數(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ù)組進(jìn)行洗牌操作,較為麻煩,而用哈希表之后,我們可以對每一張牌對應(yīng)的索引進(jìn)行洗牌操作。

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

思路:

代碼實(shí)現(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<>();
        //花色和點(diǎn)數(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)文章

  • IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧

    IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧

    IDEA 是 JetBrains 公司的產(chǎn)品,總部位于捷克的首都布拉格,IDEA在業(yè)界被公認(rèn)為最好的 Java 開發(fā)工具,今天通過本文給大家介紹IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • springboot如何使用thymeleaf模板訪問html頁面

    springboot如何使用thymeleaf模板訪問html頁面

    springboot中推薦使用thymeleaf模板,使用html作為頁面展示。那么如何通過Controller來訪問來訪問html頁面呢?下面通過本文給大家詳細(xì)介紹,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-05-05
  • IDEA提高開發(fā)效率的7個插件(推薦)

    IDEA提高開發(fā)效率的7個插件(推薦)

    這篇文章主要介紹了IDEA提高開發(fā)效率的7個插件(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法

    Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法

    這篇文章主要為大家詳細(xì)介紹了Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • IDEA實(shí)現(xiàn)導(dǎo)入module并成功運(yùn)行

    IDEA實(shí)現(xiàn)導(dǎo)入module并成功運(yùn)行

    這篇文章主要介紹了IDEA實(shí)現(xiàn)導(dǎo)入module并成功運(yùn)行方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • springboot websocket集群(stomp協(xié)議)連接時(shí)候傳遞參數(shù)

    springboot websocket集群(stomp協(xié)議)連接時(shí)候傳遞參數(shù)

    這篇文章主要介紹了springboot websocket集群(stomp協(xié)議)連接時(shí)候傳遞參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • java 通過反射遍歷所有字段修改值的實(shí)例代碼

    java 通過反射遍歷所有字段修改值的實(shí)例代碼

    這篇文章主要介紹了java 通過反射遍歷所有字段修改值,通過java 的反射,遍歷所有字段,進(jìn)行一個判斷,取出來的值是帶有圖片鏈接的,進(jìn)行操作,省去了很多代碼,理解也很容易,下面跟隨小編看下實(shí)例代碼吧
    2021-05-05
  • Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    AutoGenerator是MyBatis-Plus的代碼生成器,通過AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個模塊的代碼,極大的提升了開發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡介和使用,需要的朋友可以參考下
    2023-05-05
  • SpringBoot?SPI?機(jī)制和實(shí)現(xiàn)自定義?starter

    SpringBoot?SPI?機(jī)制和實(shí)現(xiàn)自定義?starter

    這篇文章主要介紹了SpringBoot?SPI機(jī)制和實(shí)現(xiàn)自定義?starter,全稱是Service?Provider?Interface。簡單翻譯的話,就是服務(wù)提供者接口,是一種尋找服務(wù)實(shí)現(xiàn)的機(jī)制
    2022-08-08
  • 使用Java進(jìn)行圖像處理的一些基礎(chǔ)操作

    使用Java進(jìn)行圖像處理的一些基礎(chǔ)操作

    這篇文章主要介紹了使用Java進(jìn)行圖像處理的一些基礎(chǔ)操作,就載入和輸出相關(guān)的知識進(jìn)行了講解,需要的朋友可以參考下
    2015-10-10

最新評論