评论

收藏

[Java] Java基础高级综合练习题扑克牌的创建

编程语言 编程语言 发布于:2021-10-05 20:52 | 阅读数:503 | 评论:0

今天小编就为大家分享一篇关于Java基础高级综合练习题扑克牌的创建,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
最近学了很多的知识,脑容量小,记不清,还是得做做练习!
今天就做了一个扑克牌的练习
首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌
DSC0000.png

首先分析 一张扑克
一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(a,2,3…..j,q,k)就这两种属性,对吧!
那么花色符号,点数符号是个啥? 花色符号就是来代替我们的花色的,我们不可能拿着“红桃”这种文字写进程序吧!所以我们可以用数字来代替
我们就按照下面的,一 一对应
/**
* 王 ♥ ♠ ♣ ♦ 
* 1 2 3 4 5 
* a j q k 小王 大王 
* 1 11 12 13 14 15 
**/
好了,我们已经把每张特殊一点的扑克给对应好了!我们可以开始写代码了
我的代码文件:

  • apoker.java————–一张扑克
  • poker.java—————-一副扑克
  • test.java——————测试
apoker.java先给大家展示
public class apoker {
  //implements comparable<apoker>
   //花色
   private int color;
   //点数  
   private int count;
   //花色符号
   private string colortext;
   //点数符号
   private string counttext;
   //写构造方法
  public apoker(int color, int count, string colortext, string counttext) {
  super();
  this.color = color;
  this.count = count;
  this.colortext = colortext;
  this.counttext = counttext;
  }
  //get set 方法,进行封装
  public int getcolor() {
  return color;
  }
  public void setcolor(int color) {
  this.color = color;
  }
  public int getcount() {
  return count;
  }
  public void setcount(int count) {
  this.count = count;
  }
  public string getcolortext() {
  return colortext;
  }
  public void setcolortext(string colortext) {
  this.colortext = colortext;
  }
  public string getcounttext() {
  return counttext;
  }
  public void setcounttext(string counttext) {
  this.counttext = counttext;
  }
  //重写 tostring 方法,因为我们需要显示每张牌的具体情况
  @override
  public string tostring() {
  return "apoker [color=" + color + ", count=" + count + ", colortext=" + colortext + ", counttext=" + counttext
    + "]\n";
  }  
}
这里还是非常容易理解的,无非就是进行了封装和重写tostring方法。
ok,一张扑克写完了,我们接下来写一副扑克牌
一副扑克牌
我再把那个图拿下来

我们发现一副扑克牌里面有花色数量,扑克牌的数量,以及所有牌(所有牌也就是一个集合)。另外这里面还有着几个方法,这里我就写创建扑克(),洗牌()抽取一张() 吧。
现在看下
poker.java:
import java.util.arraylist;
import java.util.collections;
import java.util.list;
import java.util.random;
public class poker {
  //花色数量
 private int colorcount;
  //牌的数量
 private int pokercount;
 //牌的集合
 private list<apoker> mlist;
 //进行封装
public int getcolorcount() {
  return colorcount;
}
public void setcolorcount(int colorcount) {
  this.colorcount = colorcount;
}
public int getpokercount() {
  return pokercount;
}
public void setpokercount(int pokercount) {
  this.pokercount = pokercount;
}
public list<apoker> getmlist() {
  return mlist;
}
public void setmlist(list<apoker> mlist) {
  this.mlist = mlist;
}
/**
 * 王 &hearts; &spades; &clubs; &diams;
 * 1 2 3 4 5
 * a j  q  k  小王  大王
 * 1 11 12 13  14  15
 **/
    //创建一副扑克牌
   public list<apoker> creatpoker() {
    //初始化colorcount pokercount
     colorcount=5;//一副扑克有 王 &hearts; &spades; &clubs; &diams;这五种花色
     pokercount=54;//一副扑克共有54张牌
     mlist=new arraylist<apoker>();
     //  &hearts; &spades; &clubs; &diams;----------先分析这四种,因为这四种里面才含有a-k的值,小王大王后面处理
     for (int i = 2; i <=5; i++) {
     //得到每种花色里面的牌
     for (int j = 1; j <= 13; j++) {
       string colortext=null;
       string counttext=null;
      switch (i) {
       case 2:
      colortext="&hearts;";
      break;
       case 3:
       colortext="&spades;";
        break;
       case 4:
       colortext="&clubs;";
        break;
       case 5:
       colortext="&diams;";
      break;
      }
      switch (j) {
      case 1:
      counttext="a";
      break;
      case 11:
      counttext="j";
      break;
      case 12:
      counttext="q";
      break;
      case 13:
      counttext="k";
      break;
      default:
      counttext=j+""; //除了a,j,q,k,都直接使用数字,这里是将j转化为字符
      break;
      }
       apoker apoker1=new apoker(i, j, colortext, counttext);
       mlist.add(apoker1); //把&hearts; &spades; &clubs; &diams;这四种花色塞进一副扑克里面
    }
    }
     apoker apoker2=new apoker(1, 14, "王", "小王");//写小王
     apoker apoker3=new apoker(1, 14, "王", "大王");//写大王
     mlist.add(apoker2);//把小王塞进一副扑克里面去
     mlist.add(apoker3);//把大王塞进一副扑克里面去
    return mlist;
  }
    /**
    *洗牌方法
    **/
   public list<apoker> shufflepoker() {
    collections.shuffle(mlist); //这是collections的一个把集合打乱的方法
    return mlist;
  }
   /**
   * 随机抽牌
   **/
   public apoker getrandompoker() {
     random random=new random();//获取一个随机数
     int index=random.nextint(54);
     return mlist.get(index);
  }
}
这里慢慢看也很容易的,我已经全部把每一步解释了,大家根据那个对应关系应该很容易理解。
两个写好了,我们可以进行使用了
test.java就是我们用来测试我们之前写好的代码!
创建一副扑克
import java.util.list;
public class test {
  public static void main(string[] args) {
  poker poker=new poker();//创建一副扑克对象
  list<apoker> mlist=poker.creatpoker(); 调用creatpoker()方法,创建一副扑克
  system.out.println(mlist);打印出来!
  }
}
我们来看结果
DSC0001.jpg

ok 54张扑克被创建了!
洗牌
我们修改一下test.java的内容
import java.util.list;
public class test {
  public static void main(string[] args) {
  poker poker=new poker();
  list<apoker> mlist=poker.creatpoker();
  list<apoker> mlist2=poker.shufflepoker();
  system.out.println(mlist2);
  }
}
打印一下
DSC0002.jpg

果然,,牌的顺序已经乱了,我们进行了洗牌
随机抽牌
我们继续重写一下test.java
import java.util.list;
public class test {
  public static void main(string[] args) {
  poker poker=new poker();
  list<apoker> mlist=poker.creatpoker();
  apoker ap=poker.getrandompoker();
   system.out.println(ap); 
  }
}
打印一下
DSC0003.jpg

果然它随机抽取了一张,每次打印抽取的牌都是不同的,这里就不展示了!
ok,大家继续学习吧,come on!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对CodeAE代码之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/qq_36547531/article/details/81582632

关注下面的标签,发现更多相似文章