梭哈游戏程序设计题意分析.docx
《梭哈游戏程序设计题意分析.docx》由会员分享,可在线阅读,更多相关《梭哈游戏程序设计题意分析.docx(13页珍藏版)》请在冰豆网上搜索。
梭哈游戏程序设计题意分析
•题目1:
请按照游戏规则和要求编程。
◦“梭哈”游戏规则如下:
•梭哈(来自英文showhands)是从扑克牌中借鉴过来的。
每人五个骰子,摇出后,依其点数牌形可分为:
散牌(五个骰子点数各不一样)、一对(五个骰子中仅有两个骰子点数一样,其余皆不一样)、两对(两个对子加一个其他点数,如一对二加一对四加一个三)、三条(三个骰子的点数一致,余下两个骰子点数各不相同,如三个四加一个二和一个六)、葫芦(也就是扑克牌中的三条带一对:
三个骰子点数同为某数,余下两个骰子点数同为另一数,如三个三加一对二)、(其中四个骰子的点数一致,如四个一加一个五)、顺子(五个骰子点数呈连续分布,如12345和23456)、豹子(五个骰子点数全一样)。
•胜负规则为豹子>顺子>>葫芦>三条>两对>对子>散牌。
若属于同一类型,则依次比较类型构成主次要成分的骰子点数大小。
如先比较四个相同骰子的点数,再比较散牌;葫芦先比较三个相同骰子再比较对牌;两对先比较较大的对,再比较稍小的对,最后比较散牌;如此类推。
比较点数时1>6>5>4>3>2。
试举例,如双方均为葫芦,一人为三个五带对二,另一人为三个四带对六,前者胜;又若双方均为两对,同有对二、对六,但一方散牌为五、另一方为一,则后者胜。
◦要求:
请编程实现如下功能:
•分别产生六组随机数(对应六个玩家),根据上面的规则判断所产生的骰子点数牌型,并输出。
•比较六个玩家的胜负,并输出。
◦
设计个类
该类有两个字段表示类的优先级
Card
{
kind;{1,2,3,4,5,6,7,8}//葫芦有两种,所以要区分开来我另外设计了类型
Rankscore//同一个类型下的积分分布
}
积分:
1、豹子:
积分按所得骰子的getrankscore()
2、顺子,分布12345积分为1,分布23456积分为0
3、葫芦4:
所得最多骰子的getrankscore*100+剩余的一个的getrankscore
4、葫芦3:
所得最多的骰子的getrankscore*100+剩余的两个的getrankscore
5、三条:
所得最多骰子的getrankscore*100+一个getrankscore*10+一个getrankscore
6、两对。
所得骰子rank前的一对getrankscore*100+第二对geteankscore*10+余下的一个的骰子分getrankscore
7、一对、所得骰子对getrankscore*1000+剩余骰子rank最前的getrankscore*100+......(类似)
8散牌,没有的那一张的rank分(另外设计一个函数)
packageshowHands.FiveDice;
importshowHands.Dice.*;
publicclassFiveDice{
privateintdices[]=newint[5];
publicFiveDice()
{
throwDices();
}
privatevoidthrowDices()
{
Dicedice=newDice();
for(inti=0;i<5;i++)
{
dices[i]=dice.rollTheDice();
}
}
publicint[]getDices()
{
throwDices();
returnthis.dices;
}
}
packageshowHands.Dice;
importjava.util.Random;
publicclassDice{
privateintnumber;
publicDice()
{
rollIt();
}
privatevoidrollIt()
{
Randomrand=newRandom();
this.number=1+rand.nextInt(6);
}
publicintrollTheDice()
{
rollIt();
returnthis.number;
}
}
importshowHands.FiveDice.*;
importshowHands.Dice.*;
publicclassGame{
finalintnumberOfPlayers=6;
intresults[][]=newint[6][5];
intspare[][]=newint[6][7];//每个点数的个数
//enumkindOfCad{baozi,shunzi,hulu4,hulu3,santiao,liangdui,yidui,sanpai}
Card[]card=newCard[6];
privatestaticclasskindOfCard
{
staticintbaozi=8;
staticintshunzi=7;
staticinthulu4=6;
staticinthulu3=5;
staticintsantiao=4;
staticintliangdui=3;
staticintyidui=2;
staticintsanpai=1;
}
classCard
{
publicintplayer;
publicintkind;
publicintscore;
}
publicGame()
{
play();
initSpare();
}
/*
*初始化每个点数个数为零
*/
privatevoidinitSpare()
{
for(inti=0;ifor(intj=0;j<7;j++)
spare[i][j]=0;
}
privatevoidplay()
{
for(inti=0;i{
FiveDicefivedice=newFiveDice();
results[i]=fivedice.getDices();
}
}
privatevoidprintRollResults()
{
for(inti=0;i{
System.out.print("Player"+(i+1)+"");
for(intj=0;j<5;j++)
System.out.print(this.results[i][j]+"");
System.out.println(getName(card[i].kind));
}
}
publicvoidprintGameResults()
{
getSpare();
judge();
printRollResults();
for(inti=0;i{
System.out.printf("第%d名玩家%d%s\n",i+1,card[i].player+1,getName(card[i].kind));
}
}
privatevoidgetSpare()
{
for(inti=0;i{
for(intj=0;j<5;j++)
{
this.spare[i][this.results[i][j]]++;//第I+1个人点数为results[i][j]的分布数加一
}
}
}
privatevoidjudge()
{
again:
for(inti=0;i{
card[i]=newCard();
card[i].player=i;
for(intj=1;j<7;j++)//根据点数个数来进行分类
{
if(this.spare[i][j]==5)//判断为豹子
{
card[i].kind=kindOfCard.baozi;
card[i].score=getRankScore(j);
continueagain;
}
elseif(this.spare[i][j]==4)//判断为葫芦4
{
card[i].kind=kindOfCard.hulu4;
for(intk=1;k<7;k++)
if(j!
=k&&this.spare[i][k]==1)
{
card[i].score=getRankScore(j)*100+getRankScore(k);
continueagain;
}
}
elseif(this.spare[i][j]==3)//三个同点数
{
for(intk=1;k<7;k++)
if(j!
=k&&this.spare[i][k]==2)//判断为葫芦3
{
card[i].kind=kindOfCard.hulu3;
card[i].score=getRankScore(j)*100+getRankScore(k);
continueagain;
}
elseif(j!
=k&&this.spare[i][k]==1)//判断为三条
{
for(intl=1;l<7;l++)
if(l!
=j&&this.spare[i][l]==1)
{
inta=getRankScore(k),b=getRankScore(l);//a,b对应相应的优先积分
card[i].kind=kindOfCard.santiao;
if(a>b)
card[i].score=getRankScore(j)*100+a*10+b;
else
card[i].score=getRankScore(j)*100+b*10+a;
continueagain;
}
}
}
elseif(this.spare[i][j]==2)//两个点数相同
{
for(intk=1;k<7;k++)
if(k!
=j&&this.spare[i][k]==2)//判断为两对
{
for(intl=1;l<7;l++)//两对
if(this.spare[i][l]==1)
{
card[i].kind=kindOfCard.liangdui;
card[i].score=getRankScore(j)*100+getRankScore(k)*10+getRankScore(l);
continueagain;
}
}
elseif(this.spare[i][k]==1)//判断为一对
{
for(intl=1;l<7;l++)
if(l!
=k&&this.spare[i][l]==1)
for(intm=1;m<7;m++)
if(m!
=k&&m!
=l&&this.spare[i][m]==1)
{
card[i].kind=kindOfCard.yidui;
card[i].score=getRankScore(j)*1000+getRankScore(k)*100+getRankScore(l)*10+getRankScore(m);
continueagain;
}
}
}
elseif(onlyOne(this.spare[i]))//处理每个点数只有一个的情况
{
if(this.spare[i][1]==0)
{
card[i].kind=kindOfCard.shunzi;
card[i].score=0;
continueagain;
}
elseif(this.spare[i][2]==0)
{
card[i].kind=kindOfCard.shunzi;
card[i].score=1;
continueagain;
}
else
{
for(intk=1;k<7;k++)
if(this.spare[i][k]==0)
{
intscore;//按缺失的牌计分
switch(k)
{
case1:
score=1;//一是最大的少掉了就是最小的
case6:
score=2;
case5:
score=3;
case4:
score=4;
case3:
score=5;
default:
score=6;
}
card[i].kind=kindOfCard.sanpai;
card[i].score=score;
continueagain;
}
}
}
}
}
compare();
}
privatebooleanonlyOne(inta[])
{
intnums=0;
for(inti=1;i<7;i++)
if(a[i]==1)nums++;
if(nums==5)
returntrue;
elsereturnfalse;
}
privatevoidcompare()
{
for(inti=0;ifor(intj=i+1;jif(card[i].kind{
Cardtemp;
temp=card[i];
card[i]=card[j];
card[j]=temp;
}
elseif(card[i].kind==card[j].kind)
{
if(card[i].score{
Cardtemp;
temp=card[i];
card[i]=card[j];
card[j]=temp;
}
}
}
privateintgetRankScore(intnum)
{
switch(num)
{
case1:
return6;
case6:
return5;
case5:
return4;
case4:
return3;
case3:
return2;
case2:
return1;
default:
return0;
}
}
privateStringgetName(intkind)
{
switch(kind)
{
case8:
return"豹子";
case7:
return"顺子";
case6:
case5:
return"葫芦";
case4:
return"三条";
case3:
return"两对";
case2:
return"一对";
case1:
return"散牌";
default:
return"恶心";
}
}
}
importshowHands.Dice.*;
importshowHands.FiveDice.*;
publicclassShowHands{
publicstaticvoidmain(String[]args)
{
/*Dicedice=newDice();
System.out.print(dice.rollTheDice());*/
Gamegame=newGame();
//game.printRollResults();
game.printGameResults();
/*FiveDicefd=newFiveDice();*/
/*intFIves[][]=newint[5][5];
for(inti=0;i<5;i++)
{
FiveDicefd=newFiveDice();
FIves[i]=fd.getDices();
}
for(inti=0;i<5;i++)
for(intj=0;j<5;j++)
System.out.print(FIves[i][j]);*/
/*Dicedice=newDice();
for(inti=0;i<100;i++)
System.out.print(dice.rollTheDice());*/
}
}