Java实现扑克牌程序
作者:dhdhdhdhg 发布时间:2023-11-11 12:09:52
标签:java,扑克牌
本文实例为大家分享了Java实现扑克牌程序的具体代码,供大家参考,具体内容如下
思路:
在实现之前,先要想好步骤,思路清晰才不会出错。
要实现一副扑克牌,首先要创建这个类,然后有一副扑克牌,之后进行洗牌,抓牌。
1.定义一个Card类
2.实现这个游戏:
①构造一副扑克牌(52张)这里不包含大小王
②洗牌
③三个人每个人抓五张牌
代码实现及其细节:
1.定义一个Card类
一张牌中包括两个属性:花色和牌面值
public class MyCard {
public char suit; //花色
public String rank; //牌面值
public MyCard(String rank, char suit) {
this.suit = suit;
this.rank = rank;
}
public String toString(){
return String.format("[%s %c]",rank,suit);
}
}
2.实现这个游戏
写一个CardGame来实现这个扑克牌游戏,其中分为很多细小的分支。
1.买一副牌
前面写了Card来表示一张牌,这里我们买一副牌,就是52个Card放在一起,就组成一个List,所以这里一副牌的类型为List<Card>。
public List<MyCard> buyDeck(){
//首先将花色和牌面值陈列出来
//因为牌面值有A,J,Q,K,这里采用的是字符串数组
//也可以将A,J,Q,K单独处理,剩下的写作一个整型数组
char[] suits={'♦','♥','♠','♣'};
String[] ranks={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//创建52张牌
List<MyCard> deck=new ArrayList<>(52);
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
deck.add(new MyCard(ranks[j],suits[i]));
}
}
return deck;
}
2.洗牌:
使用随机数
//写一个交换函数方便洗牌方法实现
public void swap(List<MyCard> deck,int i,int j){
MyCard temp=deck.get(i);
deck.set(i,deck.get(j));
deck.set(j,temp);
}
public void shuffle(List<MyCard> deck){
//设置随机数
Random r=new Random();//实例化一个Random类
for(int j=deck.size()-1;j>0;j--){
int i=r.nextInt(j); //随机产生一个大于等于0小于51的整数
swap(deck,i,j); //将生成的0-51的随机数与与最后一个数交换实现洗牌
}
}
3.主函数:
在这里实现发牌,每人五张牌,三个人轮流抓,将三个人放在一个List当中,三个人中的牌信息为List<Card>,所以hands的类型为List<List<Card>>.
public static void main(String[] args){
CardGame cg=new CardGame();
List<MyCard> deck=cg.buyDeck();
System.out.println("刚买回来的牌:");
System.out.println(deck);
cg.shuffle(deck);
System.out.println("洗完的牌:");
System.out.println(deck);
//三人轮流抓牌,一人抓五张
//将三个玩家放到一个List当中
List<List<MyCard>> hands=new ArrayList<>(3);
//三个人手中每个人五张牌
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
hands.add(new ArrayList<>(5));
//ABC三个人抓牌
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
//从deck里面抓走的
//抓的时候把最顶上的抓走
hands.get(j).add(deck.remove(0));;
}
}
System.out.println("剩下的牌:");
System.out.println("A手中的牌:");
System.out.println(hands.get(0));
System.out.println("B手中的牌:");
System.out.println(hands.get(1));
System.out.println("C手中的牌:");
System.out.println(hands.get(2));
}
输出结果:
后面的没显示全
来源:https://blog.csdn.net/m0_51405559/article/details/120808011


猜你喜欢
- 出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象)
- SpringMVC用Post方式重定向正常会以return "redirect:/XXX"这种方式直接重定向,但是这种方
- 1、AndroidManifest.xml中将activity<activity &nb
- 通过子类调用父类的变量,有两种方法:1、把父类的变量设置成public:package triangle.opengl.wlz.stu.ch
- 最近要实现一个功能,就是checkbox跨页多选,在网上看了一下,资料很少,而且大多是不完全的。不过经过我的努力,终于做出来了。
- 1.首先要导入json相关的jar包引入的jar包:(版本自行定义,可以选用使用人数偏多的版本,这样比较稳定)commons-beanuti
- 一.并行LINQSystem.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上。尽管E
- 前言众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点
- java语言是一种面向对象的程序设计语言吗java语言是面向对象的程序设计语言支持部分或绝大部分面向对象特性(类和实例、封装性、继承、多态)
- 目录常见的实现方式效果图:完整代码布局代码常见的实现方式切图,做旋转动画自定义View,绘制效果gif图1、切图会增加体积,但相对简单,不过
- Quote在学习 Kotlin 的过程中,对 Kotlin 的类型系统产生了好奇,Kotlin 是否存在类似于 Java 中 Object
- 方法一:递归算法/// <summary>/// 一列数的规则如下: 1、1、2、3、5、8、13、21、34求第30位数是多少
- 一、悲观锁和乐观锁1.1. 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期
- 遇到一个@ConditionalOnMissingBean失效的问题,今天花点时间来分析一下。现场回放services首先介绍下代码结构:有
- 现在,汽车的踪影无处不在,公路上疾驰,大街边临停,小区中停靠,车库里停泊。管理监控如此庞大数量的汽车是个头疼的问题。精明的人们把目光放在车牌
- 简介在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需
- 本文实例为大家分享了Java实现图片拼接的具体代码,供大家参考,具体内容如下/** * 拼接图片(注:图片需长宽一致) * @param f
- 1. Java中导致死锁的原因Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得
- 在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计。java.awt中定义了多种布局类,每种布局类对应
- 本文实例为大家分享了Android SurfaceView画板操作的具体代码,供大家参考,具体内容如下画板—&m