- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 如何使用java集合模擬實(shí)現斗地主洗牌和發(fā)牌
這篇文章給大家分享的是有關(guān)如何使用java集合模擬實(shí)現斗地主洗牌和發(fā)牌的內容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
案例分析:
我們現在要做的是模擬斗地主小游戲來(lái)進(jìn)行洗牌和發(fā)牌。
具體步驟:
A:首先,創(chuàng )建一個(gè)ArrayList集合來(lái)存儲牌,將牌的花色和點(diǎn)數存儲在倆個(gè)字符串數組中中,然后用for循環(huán)加強遍歷將每張牌的花色點(diǎn)數及大王小王存儲在集合中。
B:進(jìn)行洗牌,調用collectionas的shuffle方法。
C:進(jìn)行發(fā)牌,創(chuàng )建四個(gè)ArrayList集合,分別用來(lái)存儲玩家一,玩家二,玩家三,和底牌對應發(fā)到手上的牌。然后用for循環(huán)遍歷這幅撲克牌用If語(yǔ)句判斷,然后發(fā)牌。
D:創(chuàng )建一個(gè)看牌的方法,調用即可。
具體代碼:
package com.study_01; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* * 模擬斗地主洗牌和發(fā)牌 * 分析步驟: * 1:創(chuàng )建一個(gè)集合來(lái)存儲牌 * 2:洗牌 * 3:發(fā)牌 * 4:看牌 * */ public class Poker1 { public static void main(String[] args) { //創(chuàng )建一個(gè)集合來(lái)存牌 ArrayList <String> Pokers=new ArrayList<>(); String[] colors={"?","?","?","?"}; String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"}; for(String color:colors){ for(String number:numbers){ Pokers.add(color+number); } Pokers.add("大王"); Pokers.add("小王"); }//洗牌 Collections.shuffle(Pokers); //發(fā)牌 /*創(chuàng )建四個(gè)集合來(lái)存儲 * 1:張三 * 2:李四 * 3:王麻 * 4:底牌 */ ArrayList<String> Zhangsan=new ArrayList<>(); ArrayList<String> Lisi=new ArrayList<>(); ArrayList<String> Wangma=new ArrayList<>(); ArrayList<String> Dipai=new ArrayList<>(); for(int i=0;i<Pokers.size();i++){ if(i>=Pokers.size()-3){ Dipai.add(Pokers.get(i)); }else if(i%3==0){ Zhangsan.add(Pokers.get(i)); }else if(i%3==1){ Lisi.add(Pokers.get(i)); }else if(i%3==2){ Wangma.add(Pokers.get(i)); } }//看牌 lookPokers("張三",Zhangsan); lookPokers("李四",Lisi); lookPokers("王麻",Wangma); lookPokers("底牌",Dipai); } private static void lookPokers(String name, ArrayList<String> Pokers){ System.out.println(name+"的牌是:"); for(String poker:Pokers){ System.out.print(poker+" "); }System.out.println(); } }
運行結果:
具體步驟:
A:創(chuàng )建TreeMap集合存儲牌,并且大的鍵對應大的牌,小的鍵對應小的牌,同上創(chuàng )建倆個(gè)數組,一個(gè)用來(lái)存儲花色,一個(gè)用來(lái)存儲點(diǎn)數,另外創(chuàng )建一個(gè)ArrayList集合,用來(lái)存儲沒(méi)有任意一張牌對應的索引。
B:.洗牌,洗的是索引(map集合中每一張牌對應的鍵),我們這里用的是ArrayList來(lái)存儲。
C:發(fā)牌,發(fā)的索引,并且對這個(gè)索引進(jìn)行排序,這是利用了TreeSet的有序性。
D:看牌,根據發(fā)到的索引去map集合中找出對應的值。
具體代碼:
package com.study_01; import java.util.ArrayList; import java.util.Collections; import java.util.TreeMap; import java.util.TreeSet; /** * 1.創(chuàng )建Map集合存儲牌,并且大的鍵對應大的牌,小的鍵對應小的牌 * 2.洗牌,洗的是索引(map集合中每一張牌對應的鍵) * 3.發(fā)牌,發(fā)的索引,并且歲這個(gè)索引進(jìn)行排序 * 4.看牌,根據發(fā)到的鍵去map集合中找出對應的值 */ public class Poker2 { public static void main(String[] args) { //創(chuàng )建一個(gè)TreeMap集合 TreeMap<Integer,String> Pokers=new TreeMap<>(); String[] colors={"?","?","?","?"}; String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2",}; //創(chuàng )建一個(gè)ArrayList集合,用來(lái)存儲沒(méi)有一張牌對應的索引 ArrayList<Integer> indexs=new ArrayList<>(); int index = 0; for(String color:colors){ for(String number:numbers){ Pokers.put(index, color+number); indexs.add(index); index++; }//存大王,小王 Pokers.put(index, "大王"); indexs.add(index); index++; Pokers.put(index, "小王"); indexs.add(index); index++; }//洗牌,洗的是索引(map集合中每一張牌對應的鍵) Collections.shuffle(indexs); //發(fā)牌,發(fā)的是索引根據索引來(lái)找它對應的值 TreeSet<Integer> zhangsan=new TreeSet<>(); TreeSet<Integer> lisi=new TreeSet<>(); TreeSet<Integer> wangma=new TreeSet<>(); TreeSet<Integer> dipai=new TreeSet<>(); for(int i=0;i<Pokers.size();i++){ if(i>=Pokers.size()-3){ dipai.add(indexs.get(i)); }else if(i%3==0){ zhangsan.add(indexs.get(i)); }else if(i%3==1){ lisi.add(indexs.get(i)); }else if(i%3==2){ wangma.add(indexs.get(i)); } }//看牌 lookPoker("張三",zhangsan,Pokers); lookPoker("李四",lisi,Pokers); lookPoker("王麻",wangma,Pokers); lookPoker("底牌",dipai,Pokers); } private static void lookPoker(String name, TreeSet<Integer> indexs, TreeMap<Integer, String> Pokers) { System.out.println(name+"的牌是:"); for(Integer index:indexs){ System.out.print(Pokers.get(index)); }System.out.println(); } }
運行結果:
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站