问题描述
packageday1Today5;importjava.util.Scanner;/**4,砸金花游戏(控制台版本)*描述:编写程序实现砸金花的扑克游戏,程序允许用户和电脑对玩,*程序开始时要求用户输入总赌本,电脑和玩家的赌本一样多。*每次开局前,提示用户输入本次赌注,并在一副牌中随机发两手牌(去掉大小王),*每手牌三张,然后比较这两手牌的大小,若A比B大,则用户赢得赌注,*反之,则输掉赌注,直到有一方(用户或电脑)的赌注为0,则退出游戏。*每手牌的大小比较规则:*1)三条>同花顺>同花>顺子>对子>单张*2)处于同一级别的两手牌比较最大的一张牌的大小*3)若两手牌同为对子,则应比较成对的那张牌的大小*///本题有两个方法特别重要,打印出牌面的方法printpai(),比牌的大小的方法compara()publicclassCardGame{staticintuserMoney=0;staticintcomputerMoney=0;staticint[]handcards=newint[6];publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入赌本:");userMoney=sc.nextInt();computerMoney=userMoney;while(userMoney>0&&computerMoney>0){System.out.println("请输入本局赌注:");intduzhu=sc.nextInt();if(duzhu<=0||duzhu>userMoney||duzhu>computerMoney){System.out.println("赌注不正确,请重新输入:");continue;}printpai();System.out.println();if(compara()>0){System.out.println("玩家获胜!");userMoney+=duzhu;computerMoney-=duzhu;}elseif(compara()<0){System.out.println("电脑获胜!");userMoney-=duzhu;computerMoney+=duzhu;}else{System.out.println("平局!");}System.out.println("玩家赌本为:"+userMoney+"电脑赌本为:"+computerMoney);}}publicstaticvoidprintpai(){for(intj=0;j<handcards.length;j++){inthuase=(int)(Math.random()*4+1);intpaimian=(int)(Math.random()*13+2);handcards[j]=(huase*100+paimian);switch(huase){case1:System.out.print("黑桃");break;case2:System.out.print("红桃");break;case3:System.out.print("梅花");break;case4:System.out.print("方块");break;}if(handcards[j]%100<=10){System.out.print(handcards[j]%100+"");}else{switch(handcards[j]%10){case1:System.out.print("J");break;case2:System.out.print("Q");break;case3:System.out.print("K");break;case4:System.out.print("A");break;}}}}//比较两手牌时不能用数字的大小sum+(handcards[j]=(huase*100+paimian))//的加以判断,那样判断的结果会令黑桃A<小于梅花8,红桃9>黑桃Q的情况,不符合现实publicstaticintcompara(){int[]userCard=newint[handcards.length/2];int[]computerCard=newint[handcards.length/2];//打印数字类型的牌面值,数组//System.out.println(Arrays.toString(handcards));//定义玩家的牌,取数组元素的前三个for(inti=0;i<userCard.length;i++){userCard[i]=handcards[i];}//定义电脑的牌,取数组元素的后三个for(inti=handcards.length/2;i<handcards.length;i++){computerCard[i-handcards.length/2]=handcards[i];}//比较两玩家的牌的大小值returnfromCardToNumber(userCard)-fromCardToNumber(computerCard);}publicstaticintfromCardToNumber(int[]temp){//下面是一段冒泡排序for(inti=0;i<temp.length;i++){//比牌面值的大小,即现实中红桃5(代表205)永远是比黑桃(K113)要小的,对牌的大小顺序进行排序for(intj=0;j<temp.length-i-1;j++){if(temp[j]%100<temp[j+1]%100){inttmp=temp[j];temp[j]=temp[j+1];temp[j+1]=tmp;}}//输出冒泡排序的两组数字,前面一半的数组值代表玩家的,后一半的数组值代表式电脑的//System.out.print(temp[i]+"");}//System.out.println();intnum=0;//判断三条的情况if(temp[0]%100==temp[1]%100&&temp[1]%100==temp[2]%100){num=6*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;}elseif(temp[0]/100==temp[1]/100&&temp[1]/100==temp[2]/100&&temp[0]%100==temp[1]%100+1&&temp[1]%100==temp[2]%100+1){num=5*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;}elseif(temp[0]/100==temp[1]/100&&temp[1]/100==temp[2]/100){num=4*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;}elseif(temp[0]%100==temp[1]%100+1&&temp[1]%100==temp[2]%100+1){num=3*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;//数组是从大到小排列的,因此在比较时要注意}elseif(temp[0]%100==temp[1]%100||temp[1]%100==temp[2]%100){num=2*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;}else{num=1*1000000+temp[0]%100*10000+temp[1]%100*100+temp[2]%100;}returnnum;}}--------------------------------------------------------------------------------------------------------------/**用面向对象的方式重写扑克牌游戏程序,定义以下类型:1,花色,枚举类型,包含枚举值:黑,红,梅,方。2,点数,枚举类型,包含枚举值:2-A3,一张扑克牌(Card):包含属性:花色,点数4,一手扑克牌(OneHandCards):包含属性:Card[]cards;//三张扑克牌方法:publicintcompareTo(OneHandCardsc);该方法返回某两手扑克牌大小比较的结果:如果当前这手牌比c大,则返回>0的值如果当前这手牌比c小,则返回<0的值如果当前这手牌和c相等,则返回05,玩家类(Player):包含属性:姓名,赌本,当前一手牌6,游戏类(Game):包含属性:两个玩家包含方法:void发牌();为该游戏中的所有玩家发牌。voidstartGame();开始游戏。*/
解决方案
解决方案二:
该回复于2010-12-23 09:13:56被版主删除
解决方案三:
该回复于2010-12-23 09:48:33被版主删除
解决方案四:
你想让我们写吗?