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

Java使用集合實(shí)現(xiàn)斗地主分牌完整代碼

 更新時(shí)間:2024年05月15日 10:26:07   作者:哈__  
在斗地主游戲中,通常是將一副牌平均分成3份,每份17張牌,并留3張底牌,我們可以使用集合來(lái)實(shí)現(xiàn)這一功能,這篇文章主要給大家介紹了關(guān)于Java使用集合實(shí)現(xiàn)斗地主分牌的相關(guān)資料,需要的朋友可以參考下

前言

今天使用集合TreeSet來(lái)實(shí)現(xiàn)一個(gè)斗地主的分牌流程。

TreeSet集合的一個(gè)特點(diǎn)就是 元素有序,這樣就方便我們分的牌自動(dòng)排序。

0.思路

1.創(chuàng)建玩家手牌集合

我們到時(shí)候分的牌都存儲(chǔ)在這里,但你可能會(huì)有疑問(wèn),因?yàn)榇鎯?chǔ)的泛型是Integer,但撲克牌是有花色的,這該如何實(shí)現(xiàn)?

         TreeSet<Integer> zhangsan=new TreeSet<Integer>();
        TreeSet<Integer> lisi=new TreeSet<Integer>();
        TreeSet<Integer> wangwu=new TreeSet<Integer>();
        TreeSet<Integer> dipai=new TreeSet<Integer>();

2.創(chuàng)建牌堆 

我們創(chuàng)建了一個(gè)名為poke的HashMap結(jié)構(gòu),poke用來(lái)存儲(chǔ)我們的撲克,而poke的key是每一張牌的一個(gè)id,value就是具體的牌。

        HashMap<Integer,String>poke=new HashMap<Integer,String>();
        String[] color={"?","?","?","?"};
        String[] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

我們到時(shí)候洗牌的時(shí)候,洗的是這些id,但是并不是直接在poke中洗,poke的作用只是記錄我們有哪些牌。所以 我們?cè)趧?chuàng)建一個(gè)用來(lái)洗牌的數(shù)組,并把所有的id放入。

        ArrayList<Integer> xipai=new ArrayList<Integer>();

3. 把牌放入牌堆

遍歷我們的String數(shù)組,把花色和牌號(hào)組合一下并放入poke中,同時(shí)把poke中的key放入我們的洗牌集合中。最后不要忘了大小王。

        int index=0;
        for(String Number:number){
            for(String Color:color){
                String POKE=Color+Number;
                poke.put(index,POKE);
                xipai.add(index);
                index+=1;
            }
        }
        poke.put(52,"小王");
        poke.put(53,"大王");
        xipai.add(52);
        xipai.add(53);

4.洗牌 

一行代碼即可,使用Collecitons自帶的數(shù)組打亂方法。

    Collections.shuffle(xipai);

5.進(jìn)行分牌 

如果只剩下最后三張了,就直接放入到我們的底牌集合當(dāng)中,否則的話(huà)就進(jìn)行模3取余操作進(jìn)行判斷應(yīng)該分給誰(shuí)。

        for(int i=0;i<xipai.size();i++){
            if(i>=xipai.size()-3){
                dipai.add(xipai.get(i));
            }else{
                if(i%3==0){
                    zhangsan.add(xipai.get(i));
                }else if(i%3==1){
                    lisi.add(xipai.get(i));
                }else
                    wangwu.add(xipai.get(i));
            }
        }

6.完整代碼 

public class Poker {
    public static void main(String[] args) {
        HashMap<Integer,String>poke=new HashMap<Integer,String>();
        String[] color={"?","?","?","?"};
        String[] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        ArrayList<Integer> xipai=new ArrayList<Integer>();
        TreeSet<Integer> zhangsan=new TreeSet<Integer>();
        TreeSet<Integer> lisi=new TreeSet<Integer>();
        TreeSet<Integer> wangwu=new TreeSet<Integer>();
        TreeSet<Integer> dipai=new TreeSet<Integer>();
        int index=0;
        for(String Number:number){
            for(String Color:color){
                String POKE=Color+Number;
                poke.put(index,POKE);
                xipai.add(index);
                index+=1;
            }
        }
        poke.put(52,"小王");
        poke.put(53,"大王");
        xipai.add(52);
        xipai.add(53);
        Collections.shuffle(xipai);
        //進(jìn)行發(fā)牌
        for(int i=0;i<xipai.size();i++){
            if(i>=xipai.size()-3){
                dipai.add(xipai.get(i));
            }else{
                if(i%3==0){
                    zhangsan.add(xipai.get(i));
                }else if(i%3==1){
                    lisi.add(xipai.get(i));
                }else
                    wangwu.add(xipai.get(i));
            }
        }
        //進(jìn)行看牌,用方法實(shí)現(xiàn)
        LookPoker("張三",gyh,poke);
        LookPoker("李四",zch,poke);
        LookPoker("王五",wjq,poke);
        LookPoker("底牌",dipai,poke);
        //System.out.println(poke);
    }
    public static void LookPoker(String name,TreeSet<Integer>set,HashMap<Integer,String>map){
        System.out.print(name+"的牌是:");
        for(Integer i:set){
            String poke=map.get(i);
            System.out.print(poke+" ");
        }
        System.out.println();
    }
}

總結(jié) 

到此這篇關(guān)于Java使用集合實(shí)現(xiàn)斗地主分牌完整代碼的文章就介紹到這了,更多相關(guān)Java集合實(shí)現(xiàn)斗地主分牌內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中@Autowired注解的原理詳解

    Spring中@Autowired注解的原理詳解

    這篇文章主要介紹了Spring中@Autowired注解的原理詳解,對(duì)于spring配置一個(gè)bean時(shí),如果需要給該bean提供一些初始化參數(shù),則需要通過(guò)依賴(lài)注入方式,所謂的依賴(lài)注入就是通過(guò)spring將bean所需要的一些參數(shù)傳遞到bean實(shí)例對(duì)象的過(guò)程,需要的朋友可以參考下
    2023-11-11
  • MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    這篇文章主要介紹了MyBatis的通俗理解:SqlSession.getMapper()源碼解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中PreparedStatement的用法解析

    Java中PreparedStatement的用法解析

    這篇文章主要介紹了Java中PreparedStatement的用法解析,在JDBC應(yīng)用中,PreparedStatement是一種比Statement更好的選擇,PreparedStatement可以通過(guò)使用參數(shù)化查詢(xún)來(lái)避免SQL注入攻擊,并且可以提高查詢(xún)性能,需要的朋友可以參考下
    2023-09-09
  • SpringBoot 自動(dòng)裝配的原理詳解分析

    SpringBoot 自動(dòng)裝配的原理詳解分析

    這篇文章主要介紹了SpringBoot 自動(dòng)裝配的原理詳解分析,文章通過(guò)通過(guò)一個(gè)案例來(lái)看一下自動(dòng)裝配的效果展開(kāi)詳情,感興趣的小伙伴可以參考一下
    2022-08-08
  • Java多線(xiàn)程之同步鎖-lock詳解

    Java多線(xiàn)程之同步鎖-lock詳解

    這篇文章主要為大家詳細(xì)介紹了Java多線(xiàn)程中同步鎖-lock的原理與使用,文中的示例代碼講解詳細(xì),對(duì)我們了解線(xiàn)程有一定幫助,需要的可以參考一下
    2022-10-10
  • 在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決

    在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決

    這篇文章主要介紹了在ssm中使用ModelAndView跳轉(zhuǎn)頁(yè)面失效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳細(xì)分析Java中String、StringBuffer、StringBuilder類(lèi)的性能

    詳細(xì)分析Java中String、StringBuffer、StringBuilder類(lèi)的性能

    在Java中,String類(lèi)和StringBuffer類(lèi)以及StringBuilder類(lèi)都能用于創(chuàng)建字符串對(duì)象,而在分別操作這些對(duì)象時(shí)我們會(huì)發(fā)現(xiàn)JVM執(zhí)行它們的性能并不相同,下面我們就來(lái)詳細(xì)分析Java中String、StringBuffer、StringBuilder類(lèi)的性能
    2016-05-05
  • Java的Swing編程中使用SwingWorker線(xiàn)程模式及頂層容器

    Java的Swing編程中使用SwingWorker線(xiàn)程模式及頂層容器

    這篇文章主要介紹了在Java的Swing編程中使用SwingWorker線(xiàn)程模式及頂層容器的方法,適用于客戶(hù)端圖形化界面軟件的開(kāi)發(fā),需要的朋友可以參考下
    2016-01-01
  • 基于Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的單詞本Android App的實(shí)踐

    基于Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的單詞本Android App的實(shí)踐

    本文基于Java實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的單詞本安卓app,用的是SQLite數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting)

    Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting)

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting),本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06

最新評(píng)論