溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-06-15 09:12:49 來源:億速云 閱讀:166 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Java怎么實現(xiàn)斗地主之洗牌發(fā)牌功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

本文通過實例為大家分享了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();
    }
}

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

哈希表優(yōu)化

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

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

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

思路:

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

代碼實現(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();
    }
}

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

關(guān)于“Java怎么實現(xiàn)斗地主之洗牌發(fā)牌功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI