梭哈游戏程序设计题意分析.docx
- 文档编号:8588805
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:13
- 大小:18.10KB
梭哈游戏程序设计题意分析.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;i for(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;i for(intj=i+1;j if(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());*/ } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 梭哈 游戏 程序设计 题意 分析