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;
}
publicArrayListgetList(){
returnlist;
}
publicvoidsetList(ArrayListlist){
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){
ArrayListintList=newArrayList();
intList=fenpei(intList);
//给p1发牌
ArrayListclist=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
*/
publicArrayListfenpei(ArrayListlist){
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;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。