1、梭哈游戏程序设计题意分析 题目1:请按照游戏规则和要求编程。 “梭哈”游戏规则如下: 梭哈(来自英文showhands)是从扑克牌中借鉴过来的。每人五个骰子,摇出后,依其点数牌形可分为:散牌(五个骰子点数各不一样)、一对(五个骰子中仅有两个骰子点数一样,其余皆不一样)、两对(两个对子加一个其他点数,如一对二加一对四加一个三)、三条(三个骰子的点数一致,余下两个骰子点数各不相同,如三个四加一个二和一个六)、葫芦(也就是扑克牌中的三条带一对:三个骰子点数同为某数,余下两个骰子点数同为另一数,如三个三加一对二)、(其中四个骰子的点数一致,如四个一加一个五)、顺子(五个骰子点数呈连续分布,如12345
2、和23456)、豹子(五个骰子点数全一样)。 胜负规则为豹子顺子葫芦三条两对对子散牌。若属于同一类型,则依次比较类型构成主次要成分的骰子点数大小。如先比较四个相同骰子的点数,再比较散牌;葫芦先比较三个相同骰子再比较对牌;两对先比较较大的对,再比较稍小的对,最后比较散牌;如此类推。比较点数时165432。试举例,如双方均为葫芦,一人为三个五带对二,另一人为三个四带对六,前者胜;又若双方均为两对,同有对二、对六,但一方散牌为五、另一方为一,则后者胜。 要求:请编程实现如下功能: 分别产生六组随机数(对应六个玩家),根据上面的规则判断所产生的骰子点数牌型,并输出。 比较六个玩家的胜负,并输出。 设计
3、个类 该类有两个字段表示类的优先级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
4、*10 + 一个getrankscore 6、两对。所得骰子rank前的一对getrankscore*100+第二对geteankscore*10 + 余下的一个的骰子分getrankscore 7、一对、所得骰子对getrankscore*1000+剩余骰子rank最前的getrankscore*100 + .(类似) 8 散牌,没有的那一张的rank分(另外设计一个函数)package showHands.FiveDice;import showHands.Dice.*;public class FiveDice private int dices = new int5; public F
5、iveDice() throwDices(); private void throwDices() Dice dice = new Dice(); for(int i = 0; i 5 ; i +) dicesi = dice.rollTheDice(); public int getDices() throwDices(); return this.dices; package showHands.Dice;import java.util.Random;public class Dice private int number; public Dice() rollIt(); private
6、 void rollIt() Random rand = new Random(); this.number = 1 + rand.nextInt(6); public int rollTheDice() rollIt(); return this.number; import showHands.FiveDice.*;import showHands.Dice.*;public class Game final int numberOfPlayers = 6; int results = new int65; int spare = new int 67;/每个点数的个数 /enum kin
7、dOfCadbaozi,shunzi,hulu4,hulu3,santiao,liangdui,yidui,sanpai Card card = new Card6; private static class kindOfCard static int baozi = 8; static int shunzi = 7; static int hulu4 = 6; static int hulu3 = 5; static int santiao = 4; static int liangdui = 3; static int yidui = 2; static int sanpai = 1; c
8、lass Card public int player; public int kind; public int score; public Game() play(); initSpare(); /* * 初始化每个点数个数为零 */ private void initSpare() for(int i = 0 ; i this.numberOfPlayers ; i+ ) for( int j = 0 ; j 7 ; j+) spareij =0; private void play() for(int i = 0 ; i this.numberOfPlayers; i +) FiveDi
9、ce fivedice = new FiveDice(); resultsi = fivedice.getDices(); private void printRollResults() for(int i = 0 ; i this.numberOfPlayers ; i +) System.out.print(Player + (i+1) + ); for(int j = 0 ; j 5 ; j +) System.out.print(this.resultsij + ); System.out.println(getName(cardi.kind); public void printGa
10、meResults() getSpare(); judge(); printRollResults(); for(int i = 0 ; i this.numberOfPlayers ; i+) System.out.printf(第%d名 玩家%d %sn, i+1,cardi.player + 1,getName(cardi.kind); private void getSpare() for(int i = 0 ; i this.numberOfPlayers ; i+) for ( int j = 0 ; j 5 ; j +) this.spareithis.resultsij+;/第
11、 I + 1个人点数为resultsij的分布数加一 private void judge() again: for(int i = 0 ; i this.numberOfPlayers ; i+) cardi = new Card(); cardi.player = i; for(int j = 1 ; j 7 ; j +)/根据点数个数来进行分类 if(this.spareij = 5)/判断为豹子 cardi.kind = kindOfCard.baozi; cardi.score = getRankScore(j); continue again; else if (this.spar
12、eij = 4)/判断为葫芦 4 cardi.kind = kindOfCard.hulu4; for(int k = 1 ; k 7 ; k +) if( j != k & this.spareik=1) cardi.score = getRankScore(j)*100 + getRankScore(k); continue again; else if(this.spareij = 3)/三个同点数 for(int k =1; k 7 ; k+) if(j != k & this.spareik =2)/判断为葫芦 3 cardi.kind = kindOfCard.hulu3; car
13、di.score = getRankScore(j)*100 + getRankScore(k); continue again; else if( j!= k & this.spareik =1)/判断为三条 for(int l = 1 ; l b) cardi.score = getRankScore(j)*100 + a * 10 + b ; else cardi.score = getRankScore(j)*100 + b * 10 + a; continue again; else if(this.spareij = 2)/两个点数相同 for(int k = 1; k 7 ; k
14、+) if( k != j & this.spareik =2)/判断为两对 for(int l = 1 ; l 7 ; l+)/两对 if(this.spareil = 1) cardi.kind = kindOfCard.liangdui; cardi.score = getRankScore(j) * 100 + getRankScore(k)*10 + getRankScore(l); continue again; else if(this.spareik = 1)/判断为一对 for(int l = 1 ; l 7 ; l+) if( l != k & this.spareil =
15、 1) for(int m = 1 ; m 7 ; m +) if( m != k & m != l & this.spareim = 1) cardi.kind = kindOfCard.yidui; cardi.score = getRankScore(j)*1000+getRankScore(k)*100+getRankScore(l)*10+getRankScore(m); continue again; else if(onlyOne(this.sparei)/处理每个点数只有一个的情况 if(this.sparei1 = 0 ) cardi.kind = kindOfCard.sh
16、unzi; cardi.score = 0; continue again; else if( this.sparei2 = 0) cardi.kind = kindOfCard.shunzi; cardi.score = 1; continue again; else for( int k = 1 ; k 7; k+ ) if( this.spareik = 0) int score;/按缺失的牌计分 switch(k) case 1 :score = 1;/一是最大的少掉了就是最小的 case 6 :score = 2; case 5 :score = 3; case 4 :score =
17、 4; case 3 :score = 5; default :score = 6; cardi.kind = kindOfCard.sanpai; cardi.score = score; continue again; compare(); private boolean onlyOne(int a) int nums = 0; for(int i = 1 ; i 7 ; i+) if(ai = 1) nums +; if(nums = 5) return true; else return false; private void compare() for(int i = 0 ; i t
18、his.numberOfPlayers -1 ; i +) for(int j = i+1 ; j this.numberOfPlayers ; j +) if(cardi.kind cardj.kind) Card temp; temp = cardi; cardi = cardj; cardj = temp; else if(cardi.kind = cardj.kind) if(cardi.score cardj.score) Card temp; temp = cardi; cardi = cardj; cardj = temp; private int getRankScore(in
19、t num) switch(num) case 1 :return 6; case 6 :return 5; case 5 :return 4; case 4 :return 3; case 3 :return 2; case 2 :return 1; default: return 0; private String getName(int kind) switch(kind) case 8:return 豹子; case 7:return 顺子; case 6: case 5:return 葫芦; case 4:return 三条; case 3:return 两对; case 2:ret
20、urn 一对; case 1:return 散牌; default : return 恶心; import showHands.Dice.*;import showHands.FiveDice.*;public class ShowHands public static void main(String args) /*Dice dice = new Dice (); System.out.print(dice.rollTheDice();*/ Game game = new Game(); /game.printRollResults(); game.printGameResults();
21、/* FiveDice fd = new FiveDice();*/ /* int FIves = new int 55; for(int i = 0 ; i 5 ; i+) FiveDice fd = new FiveDice(); FIvesi = fd.getDices(); for(int i = 0 ; i 5; i +) for( int j = 0 ; j 5 ; j +) System.out.print(FIvesij);*/ /* Dice dice = new Dice(); for(int i = 0 ; i 100 ; i +) System.out.print(dice.rollTheDice();*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1