91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java怎么實現斗地主之洗牌發牌功能

發布時間:2021-06-15 09:12:49 來源:億速云 閱讀:176 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關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();
    }
}

Java怎么實現斗地主之洗牌發牌功能

哈希表優化

區別: 上面是用一個字符串數組來存儲所有牌的組合,并且也是對字符串數組進行洗牌操作,較為麻煩,而用哈希表之后,我們可以對每一張牌對應的索引進行洗牌操作。

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

Java怎么實現斗地主之洗牌發牌功能

思路:

Java怎么實現斗地主之洗牌發牌功能

代碼實現:

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怎么實現斗地主之洗牌發牌功能

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永寿县| 阿拉尔市| 汉沽区| 兴城市| 乐亭县| 息烽县| 平湖市| 介休市| 都江堰市| 福泉市| 嘉义市| 嘉祥县| 阳江市| 宜宾市| 吉木乃县| 泉州市| 六安市| 新乡市| 德保县| 长沙县| 河南省| 调兵山市| 天台县| 兴城市| 志丹县| 南溪县| 新巴尔虎左旗| 阿巴嘎旗| 天水市| 塘沽区| 红安县| 图片| 郁南县| 武清区| 祁阳县| 多伦县| 潮州市| 湾仔区| 容城县| 萝北县| 和龙市|