Java实现扑克牌程序
作者:dhdhdhdhg 时间:2023-11-11 12:09:52
本文实例为大家分享了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
标签:java,扑克牌
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android中aapt命令实践
2021-10-26 08:57:45
![](https://img.aspxhome.com/file/2023/0/88120_0s.jpg)
Android图片实现压缩处理的实例代码
2022-05-28 20:29:12
Android自定义View圆形进度条控件(三)
2021-11-13 10:17:51
![](https://img.aspxhome.com/file/2023/3/138183_0s.gif)
Spring Boot整合MyBatis操作过程
2022-08-02 13:50:22
通过实例解析Socket套接字通信原理
2023-11-02 20:17:35
![](https://img.aspxhome.com/file/2023/4/58684_0s.png)
解析mybatis-plus中的resultMap简单使用
2021-09-03 03:53:06
![](https://img.aspxhome.com/file/2023/1/132211_0s.png)
深入学习java枚举的应用
2022-10-27 19:56:34
![](https://img.aspxhome.com/file/2023/7/122187_0s.png)
Android需要提升权限的操作方法
2021-07-17 11:25:47
C#内置队列类Queue用法实例
2023-07-18 14:12:05
Java中Optional类及orElse方法详解
2022-07-12 03:21:36
Java毕业设计实战之在线网盘系统的实现
2023-03-05 05:42:47
![](https://img.aspxhome.com/file/2023/3/72523_0s.jpg)
Java语言中的内存泄露代码详解
2023-08-26 22:51:06
![](https://img.aspxhome.com/file/2023/5/75005_0s.png)
Spring Cloud 使用 Resilience4j 实现服务熔断的方法
2021-11-09 12:36:10
![](https://img.aspxhome.com/file/2023/7/119777_0s.png)
Spring Native项目实战(体验79毫秒启动springboot应用)
2022-03-14 22:18:42
![](https://img.aspxhome.com/file/2023/1/78361_0s.png)
简单聊一聊Java线程池ThreadPoolExecutor
2021-10-23 15:56:58
![](https://img.aspxhome.com/file/2023/3/64053_0s.jpg)
java内存泄漏与内存溢出关系解析
2023-08-07 01:58:59
springboot使用redis实现从配置到实战
2023-05-05 09:49:08
Springboot项目与vue项目整合打包的实现方式
2022-01-14 19:25:03
![](https://img.aspxhome.com/file/2023/3/119783_0s.png)
SpringBoot集成Spring security JWT实现接口权限认证
2023-02-02 07:31:08
![](https://img.aspxhome.com/file/2023/1/113201_0s.jpg)
Java8新特性之泛型的目标类型推断_动力节点Java学院整理
2023-11-26 10:38:21