????個(gè)人主頁(yè):哈__
期待您的關(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ù)組打亂方法。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-860019.html
Collections.shuffle(xipai);
5.進(jìn)行分牌?
如果只剩下最后三張了,就直接放入到我們的底牌集合當(dāng)中,否則的話就進(jìn)行模3取余操作進(jìn)行判斷應(yīng)該分給誰(shuí)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-860019.html
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();
}
}
到了這里,關(guān)于【Java】Java基礎(chǔ) 使用集合實(shí)現(xiàn)斗地主分牌的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!