java代码实现斗地主发牌功能
本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下
实现斗地主发牌功能
共54张牌,地主比其他两名玩家多三张牌。
有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法。
为了模拟每个玩家的牌都是随机的,我是这样想的:
1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号。
2)利用随机数,将每个序号打乱存到一个新数组里。
3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内。
附一个在老师指导下写的:斗地主发牌功能,自己还是有些没考虑周到。/_\
代码如下:
牌类
publicclassCard{ /**花色*/ privateStringHuaSe; /**点数*/ privateStringDianShu; /**序号*/ privateintXuHao; publicCard(StringhuaSe,StringdianShu,intxuHao){ super(); HuaSe=huaSe; DianShu=dianShu; XuHao=xuHao; } publicStringgetHuaSe(){ returnHuaSe; } publicvoidsetHuaSe(StringhuaSe){ HuaSe=huaSe; } publicStringgetDianShu(){ returnDianShu; } publicvoidsetDianShu(StringdianShu){ DianShu=dianShu; } publicintgetXuHao(){ returnXuHao; } publicvoidsetXuHao(intxuHao){ XuHao=xuHao; } @Override publicStringtoString(){ return"["+HuaSe+DianShu+"]"; } }
玩家类
publicclassPlayer{ /**玩家id*/ privateintid; /**玩家姓名*/ privateStringname; /**是否是地主*/ privatebooleandizhu; /**牌的集合*/ privateArrayListlist; publicPlayer(intid,Stringname,booleandizhu){ super(); this.id=id; this.name=name; this.dizhu=dizhu; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicbooleanisDizhu(){ returndizhu; } publicvoidsetDizhu(booleandizhu){ this.dizhu=dizhu; } publicArrayList getList(){ returnlist; } publicvoidsetList(ArrayList list){ this.list=list; } @Override publicStringtoString(){ returnname+",牌:"+list; } }
发牌类:这里还有许多缺陷:例如地主是需要自己指定而不是随机的,在给每个人发牌时,可以利用remove()方法将已经发过的牌移除,这样可以节省很多重复代码。
publicclassSendCard{ staticArrayListarrayList=newArrayList (); Randomr=newRandom(); /** *初始话牌库 */ publicvoidinit(){ for(inti=1;i<14;i++){ arrayList.add(newCard("梅花",Integer.toString(i),i)); arrayList.add(newCard("方块",Integer.toString(i),13+i)); arrayList.add(newCard("红心",Integer.toString(i),26+i)); arrayList.add(newCard("黑桃",Integer.toString(i),39+i)); } arrayList.add(newCard("","大王",53)); arrayList.add(newCard("","小王",54)); } /** *发牌(默认p3为地主) *@paramp1 *@paramp2 *@paramp3 */ publicvoidsend(Playerp1,Playerp2,Playerp3){ ArrayList intList=newArrayList (); intList=fenpei(intList); //给p1发牌 ArrayList clist=newArrayList (); for(inti=0;i<17;i++){ clist.add(arrayList.get(intList.get(i))); } p1.setList(clist); //给p2发牌 clist=newArrayList (); for(inti=17;i<34;i++){ clist.add(arrayList.get(intList.get(i))); } p2.setList(clist); //给p3发牌 clist=newArrayList (); for(inti=34;i<54;i++){ clist.add(arrayList.get(intList.get(i))); } p3.setList(clist); } /** *将初始化牌库打乱后存入新数组 *@paramlist *@return */ publicArrayList fenpei(ArrayList list){ intindex=0; while(true){ inti=r.nextInt(54); for(Integerinteger:list){ if(integer==i){ index=1; break; } index=0; } if(index==0) list.add(i); if(list.size()==54) break; } returnlist; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。