为了账号安全,请及时绑定邮箱和手机立即绑定

有些方法还是不太会,要参照老师讲的用法才能写对~


  1. package fourth;

  2. /**

  3.  * 扑克牌类

  4.  * @author jiuge

  5.  *

  6.  */

  7. public class poker implements Comparable<poker>{

  8. public String type;    //花色

  9. public String name;    //牌名

  10. public int typevalue;  //通过两个value方便对牌进行大小比较

  11. public int namevalue;

  12. public poker(){


  13. }

  14. public poker(String type,String name){

  15. this.type=type;

  16. this.name=name;

  17. if(type=="红桃") this.typevalue=4;

  18. else if(type=="黑桃") this.typevalue=3;

  19. else if(type=="方块") this.typevalue=2;

  20. else if(type=="梅花") this.typevalue=1;

  21. if(name=="J") this.namevalue=11;

  22. else if(name=="Q") this.namevalue=12;

  23. else if(name=="K") this.namevalue=13;

  24. else if(name=="A") this.namevalue=14;

  25. else this.namevalue=Integer.valueOf(name);

  26. }

  27. @Override

  28. public int compareTo(poker o) { //重写compare方法

  29. int returnvalue = -1000;

  30. if(this.namevalue>o.namevalue)

  31. returnvalue= 1;

  32. else if(this.namevalue<o.namevalue)

  33. returnvalue= -1;

  34. else if(this.namevalue==o.namevalue){

  35. if(this.typevalue>o.typevalue)

  36. returnvalue= 1;

  37. else if(this.typevalue<o.typevalue)

  38. returnvalue= -1;

  39. else returnvalue=0;

  40. }

  41. return returnvalue;

  42. }

  43. }



  1. package fourth;


  2. public class player {

  3. String id;

  4. String name;

  5. public player(String id,String name){

  6. this.id=id;

  7. this.name=name;

  8. }

  9. }


  1. package fourth;

  2. import java.util.*;

  3. public class test {

  4. public void creat(){

  5. /***********************给牌****************************/

  6. poker[] pokers = new poker[52];

  7. String[] types={"红桃","黑桃","方块","梅花"};

  8. String[] names={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

  9. for(int i=0;i<4;i++){          //创建一副牌,这时的扑克牌组是有顺序的

  10. for(int j=0;j<13;j++){

  11. pokers[(i*13+j)]=new poker(types[i],names[j]);

  12. }

  13. }

  14. /************************洗牌***************************/

  15. Integer[] arr=new Integer[52];   //建立一个52长度(一副牌的长度)的数组,将下标作为值

  16. for(int i=0;i<52;i++){

  17. arr[i]=i;

  18. }

  19. List<Integer> num=new ArrayList<Integer>();

  20. num.addAll(Arrays.asList(arr));  //把该数组转换成序列后打乱顺序

  21. Collections.shuffle(num);

  22. for (int i : num) {      //把乱序的值再返回给数组,得到一个乱序的数组,且每次运行程序这个数组都不一样

  23. arr[i]=num.get(i);   //把这个乱序的数组作为扑克牌组的下标,能够达到洗牌的效果

  24. }

  25. /************************发牌****************************/

  26. Scanner in=new Scanner(System.in);//准备创建两名玩家

  27. System.out.print("请输入第一位玩家的name:");

  28. String name=in.next();

  29. player player1=new player("1",name);

  30. System.out.print("请输入第二位玩家的name:");

  31. name=in.next();

  32. player player2=new player("2",name);

  33. List<poker> p1=new ArrayList<poker>();//player1的牌组

  34. List<poker> p2=new ArrayList<poker>();//player2的牌组

  35. System.out.print("请输入发牌数量(26张以内):");

  36. int i;

  37. do{

  38. i=in.nextInt();

  39. if(i<0||i>26) System.out.print("选择错误!请重新选择发牌数量:");

  40. }while(i<0||i>26);

  41. for(int n=0;n<2*i;n++){    //给两名玩家交替发牌

  42. if(n%2==0){           

  43. p1.add(pokers[arr[n]]);  //pokers中的对象已固定,通过乱序的数组arr作为下标,实现洗牌功能

  44. System.out.println("玩家"+player1.name+"发到一张牌");

  45. }

  46. else{

  47. p2.add(pokers[arr[n]]);

  48. System.out.println("玩家"+player2.name+"发到一张牌");

  49. }

  50. }

  51. System.out.println("**********发牌完毕***********");

  52. /*************************输赢***************************/

  53. System.out.print("玩家"+player1.name+"的牌:"); //玩家一获得的牌

  54. for(int a=0;a<p1.size();a++){       

  55. poker po1=p1.get(a);

  56. System.out.print(po1.type+po1.name+" ");

  57. }

  58. System.out.println();

  59. System.out.print("玩家"+player2.name+"的牌:"); //玩家二获得的牌

  60. for(int a=0;a<p2.size();a++){

  61. poker po2=p2.get(a);

  62. System.out.print(po2.type+po2.name+" ");

  63. }

  64. System.out.println();

  65. Collections.sort(p1);//这里对牌进行排序,排序是递增的,故最后一张牌是最大的

  66. Collections.sort(p2);//下面获取两名玩家各自最大的牌

  67. System.out.println("玩家"+player1.name+"最大的牌:"+p1.get((p1.size()-1)).type+p1.get((p1.size()-1)).name);

  68. System.out.println("玩家"+player2.name+"最大的牌:"+p2.get((p2.size()-1)).type+p2.get((p2.size()-1)).name);

  69. int result=p1.get((p1.size()-1)).compareTo(p2.get((p2.size()-1)));//对两名玩家最大的牌进行比较

  70. switch(result){

  71. case -1:System.out.println("玩家"+player2.name+"赢了!");break;

  72. case 1:System.out.println("玩家"+player1.name+"赢了!");break;

  73. }

  74. in.close();

  75. }

  76. public static void main(String[] args) {

  77. System.out.println("-------------------欢迎使用扑克牌!--------------------");

  78. System.out.println("规则一:双方发等量的牌,比较其中最大的牌,牌的点数是主要因素。");

  79. System.out.println("规则二:若点数相等,则继续比较牌的花色,花色权重为红桃>黑桃>方块>梅花。");

  80. test t=new test();

  81. t.creat();

  82. }


  83. }


正在回答

3 回答

pokers[(i*13+j)]=new poker(types[i],names[j]);

求解为什么是i*13+j

?

1 回复 有任何疑惑可以回复我~
#1

Linser 提问者

i是外层循环,代表四种花色;j是内层循环,代表13张不同点数的牌。代表全部的牌
2019-09-02 回复 有任何疑惑可以回复我~

大佬求膜拜

1 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5d36d217000116c405610401.jpg大致做出来了

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有些方法还是不太会,要参照老师讲的用法才能写对~

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信