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

最近学了很多的知识,脑容量小,记不清,还是得做做练习!

今天就做了一个扑克牌的练习

首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌

首先分析 一张扑克

一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(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;
}
/**
 * 王 ♥ ♠ ♣ ♦
 * 1 2 3 4 5
 * A J  Q  K  小王  大王
 * 1 11 12 13  14  15
 **/
      //创建一副扑克牌
     public List<APoker> creatPoker() {
      //初始化colorcount pokercount
       colorcount=5;//一副扑克有 王 ♥ ♠ ♣ ♦这五种花色
       pokercount=54;//一副扑克共有54张牌
       mList=new ArrayList<APoker>();
       //  ♥ ♠ ♣ ♦----------先分析这四种,因为这四种里面才含有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="♥";
            break;
           case 3:
             colorText="♠";
              break;
           case 4:
             colorText="♣";
              break;
           case 5:
             colorText="♦";
            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); //把♥ ♠ ♣ ♦这四种花色塞进一副扑克里面
        }
      }
       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);打印出来!
  }
}

我们来看结果

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);
  }
}

打印一下

果然,,牌的顺序已经乱了,我们进行了洗牌

随机抽牌

我们继续重写一下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);
  }
}

打印一下

果然它随机抽取了一张,每次打印抽取的牌都是不同的,这里就不展示了!

OK,大家继续学习吧,come on!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

时间: 2019-01-12

Java模拟扑克牌洗牌实现生成52张扑克的方法示例

本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法.分享给大家供大家参考,具体如下: 要求: 生成52张扑克,模拟扑克牌洗牌,并输出. 实现代码: package com.NCU.ZHANGhuirong; import java.util.ArrayList; import java.util.Collections; public class Card { public String poker(int num) { String str = ""; String[] f

java实现斗地主游戏

感想: 第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的.有什么问题请多多指教! 思路: 1.创建一个扑克牌的实体类Poker,设置了四个参数:花色.数字.牌值(判断大小).是否地主牌,实现getset方法和构造方法: 2.创建一个玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法: 3.洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Col

JAVA collection集合之扑克牌游戏实例

Collection 层次结构中的根接口.Collection表示一组对象,这些对象也称为collection的元素.一些 collection 允许有重复的元素,而另一些则不允许.一些 collection 是有序的,而另一些则是无序的.JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现.此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection. 主要内容:这里使用collection集合,模拟香港电影中大佬们玩的

Java编写的24点纸牌游戏

任意4个1-13数字,加减乘除计算24点. 实现原理: 1)排列组合4个数字 2)计算每次排列组合的可能性 Cal24.java import java.util.HashSet; import java.util.Set; public class Cal24 { private static final double precision = 0.00001; private static final int target = 24; public String[] execute(Strin

Java实现洗牌发牌的方法

本文实例讲述了Java实现洗牌发牌的方法.分享给大家供大家参考.具体如下: import java.util.*; public class Main { /** * @param args the command line arguments */ static int numbersOfPlayers = 4; static int numbersOfHandCard = 13; public static void main(String[] args) { // TODO code ap

java实现多人多牌数比较游戏

本文实例为大家分享了java实现多人多牌数比较游戏的具体代码,供大家参考,具体内容如下 具体实现步骤如下: 实现扑克Card类,用于储存扑克牌,1-13代表点数,4-1代表花色(黑桃,红桃,梅花,分块) 实现扑克列表CardList类,用于实现生成一副牌,洗牌,发牌的功能 实现玩家Player类,用于储存玩家信息 实现玩家列表PlayerList类,用于储存所有玩家信息,并且实现玩家洗牌.发牌.比较牌大小的方法 主方法Index05类,用于启动扑克游戏 Card.java /** * */ pa

java实现纸牌游戏之小猫钓鱼算法

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出完时,游戏结束,对手获胜. 假如游戏开始时,小哼手中有 6 张牌,顺序为 2 4

C语言实现纸牌游戏之小猫钓鱼算法

本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下 星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏--"小猫钓鱼".游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份.小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出

C语言实现纸牌游戏(小猫钓鱼)

C语言使用队列和栈实现纸牌游戏–小猫钓鱼,供大家参考,具体内容如下 C语言: //纸牌游戏--小猫钓鱼--队列 栈--(所谓的拉火车) #include <stdio.h> struct queue //队列 { int data[1000]; int head; int tail; }; struct stack //栈 { int data[10]; int top; }; int main(void) { struct queue q1, q2; //小哼 q1 和小哈 q2 的队列 s

java实现24点纸牌游戏

本文题目为大家分享了java实现24点纸牌游戏的具体代码,供大家参考,具体内容如下 题目 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 分析 用穷举法列出四个数加上三个运算符号所构成的表达式所有

基于Java代码实现游戏服务器生成全局唯一ID的方法汇总

在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使用全局的唯一id,在游戏服务器中,全局唯一的id可以用于将来合服方便,不会出现键冲突.也可以将来在业务增长的情况下,实现分库分表,比如某一个用户的物品要放在同一个分片内,而这个分片段可能是根据用户id的范围值来确定的,比如用户id大于1000小于100000的用户在一个分片内.目前常用的有以下几种:

VC实现五子棋游戏的一个算法示例

本文讲述了VC实现五子棋游戏的一个算法示例,该算法采用极大极小剪枝博弈算法,感兴趣的读者可以对程序中不完善的部分进行修改与完善. 该设计主要包括:数据结构.估值函数.胜负判断.搜索算法 程序运行界面如下: 具体实现步骤如下: 1.数据结构 //记录每步棋,可以建立链表用来进行悔棋.后退(本程序没有实现) struct Step { int x,y; //棋子坐标 int ball; //表示下子方{BLACK,WHITE} }; //记录棋盘情况,用于搜索过程 class CBoardSitua

Java太阳系小游戏分析和源码详解

最近看了面向对象的一些知识,然后跟着老师的讲解做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下最近学的知识: 用到知识点:类的继承.方法的重载与重写.多态.封装等 分析: 1.需要加载图片.画图 2.建一个面板,主页面 3.行星类 效果图: 先看一下源码结构图: 现在逐步分析各个类的功能: 1)工具类-----util包中 --Constant类   封装了游戏中用到的常量 --GameUtil类  封装了游戏的图片加载功能 --MyFrame类  封装了游戏面板的构造,用于各面板的父类 -

java贪吃蛇游戏编写代码

本文实例为大家分享了java贪吃蛇游戏展示的具体代码,供大家参考,具体内容如下 1.采用MVC(model.view.control)框架模式 2.包和类的关系树形图为: 3.源码: package com.huai; import Java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.util.HashSet; import java.util.LinkedList; import java.u

java实现的RC4加密解密算法示例

本文实例讲述了java实现的RC4加密解密算法.分享给大家供大家参考,具体如下: 有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个Java 版本的RC4加解密算法. public static String HloveyRC4(String aInput,String aKey) { int[] iS = new int[256]; byte[] iK = new byte[256]; for (int i=0;i<256;i++) iS[i]=i; int j = 1;

Java矩阵连乘问题(动态规划)算法实例分析

本文实例讲述了Java矩阵连乘问题(动态规划)算法.分享给大家供大家参考,具体如下: 问题描述:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1.确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少.输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数. 问题解析:由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序.这种计算次序可以用加括号的方式来确定.若一个矩阵连乘积的计算次序完全确