Java使用集合實現(xiàn)斗地主分牌完整代碼
前言
今天使用集合TreeSet來實現(xiàn)一個斗地主的分牌流程。
TreeSet集合的一個特點就是 元素有序,這樣就方便我們分的牌自動排序。
0.思路
1.創(chuàng)建玩家手牌集合
我們到時候分的牌都存儲在這里,但你可能會有疑問,因為存儲的泛型是Integer,但撲克牌是有花色的,這該如何實現(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)建了一個名為poke的HashMap結(jié)構(gòu),poke用來存儲我們的撲克,而poke的key是每一張牌的一個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"};
我們到時候洗牌的時候,洗的是這些id,但是并不是直接在poke中洗,poke的作用只是記錄我們有哪些牌。所以 我們在創(chuàng)建一個用來洗牌的數(shù)組,并把所有的id放入。
ArrayList<Integer> xipai=new ArrayList<Integer>();
3. 把牌放入牌堆
遍歷我們的String數(shù)組,把花色和牌號組合一下并放入poke中,同時把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.進行分牌
如果只剩下最后三張了,就直接放入到我們的底牌集合當中,否則的話就進行模3取余操作進行判斷應(yīng)該分給誰。
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); //進行發(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)); } } //進行看牌,用方法實現(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使用集合實現(xiàn)斗地主分牌完整代碼的文章就介紹到這了,更多相關(guān)Java集合實現(xiàn)斗地主分牌內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis的通俗理解:SqlSession.getMapper()源碼解讀
這篇文章主要介紹了MyBatis的通俗理解:SqlSession.getMapper()源碼解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03在ssm中使用ModelAndView跳轉(zhuǎn)頁面失效的解決
這篇文章主要介紹了在ssm中使用ModelAndView跳轉(zhuǎn)頁面失效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05詳細分析Java中String、StringBuffer、StringBuilder類的性能
在Java中,String類和StringBuffer類以及StringBuilder類都能用于創(chuàng)建字符串對象,而在分別操作這些對象時我們會發(fā)現(xiàn)JVM執(zhí)行它們的性能并不相同,下面我們就來詳細分析Java中String、StringBuffer、StringBuilder類的性能2016-05-05Java的Swing編程中使用SwingWorker線程模式及頂層容器
這篇文章主要介紹了在Java的Swing編程中使用SwingWorker線程模式及頂層容器的方法,適用于客戶端圖形化界面軟件的開發(fā),需要的朋友可以參考下2016-01-01基于Java實現(xiàn)一個簡單的單詞本Android App的實踐
本文基于Java實現(xiàn)了一個簡單的單詞本安卓app,用的是SQLite數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Java數(shù)據(jù)結(jié)構(gòu)及算法實例:快速計算二進制數(shù)中1的個數(shù)(Fast Bit Counting)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:快速計算二進制數(shù)中1的個數(shù)(Fast Bit Counting),本文直接給出實現(xiàn)代碼,代碼中包含詳細注釋,需要的朋友可以參考下2015-06-06