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
0
投稿
猜你喜欢
- 最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的
- 在项目迁移到Spring Boot之后,发生内存使用量过高的问题。本文介绍了整个排查过程以及使用到的工具,也非常适用于其他堆外内存排查。背景
- 一、Jvm加载对象在说Java * 之前,还是要说一下Jvm加载对象的过程,这个依旧是理解 * 的基础性原理:Java类即源代码程序.j
- 话不多说,请看代码:<!DOCTYPE html><html><head> <meta
- 通用配置#下面介绍的整合JDBC和整合MyBatis都需要添加的实体类和配置数据库表#CREATE TABLE `user` ( `id`
- 最近的一个接口项目,传的参数要求是json,需要特殊处理一下。重点是这两句话:httpPost.setHeader("Conten
- 1)首先启动hadoop2个进程,进入hadoop/sbin目录下,依次启动如下命令[root@node02 sbin]# pwd/usr/
- 一、创建支付宝沙箱跳转 : 支付宝沙箱平台1、进入控制台2、创建小程序,编写名称和绑定商家即可3、返回第一个页面,往下滑进入沙箱4、进行相关
- 前言对于 InterruptedException,一种常见的处理方式是 “生吞(swallow)” 它 —— 捕捉它,然后什么也不做(或者
- 在本博客中,可以找到一篇《c#实现输出的字符靠右对齐的示例》它有教大家怎样实现字符串输出进行左齐或者是右对齐。本篇的方法,超简单,是使用st
- 什么是ByteBuddyByteBuddy是一个java的运行时代码生成库,他可以帮助你以字节码的方式动态修改java类的代码。为什么需要B
- 由于我们在eclipse ee中把项目部署在web端经常会出现报404错误。原因为:404状态码是一种http状态码,其意思是: 所请求的页
- 线程池中ThreadGroup的坑在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产
- 接口:官方的含义是---->java接口是一系列方法的声明,是一些方法特征的集合疑问:那为什么不用抽象类呢?把他们共有的方法集合起来放
- 本文实例讲述了Java编程实现非对称加密的方法。分享给大家供大家参考,具体如下:对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算
- 项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传
- 在上一篇文章《驱动开发:内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法,本章将继续探索字符串的拷贝与比较,与应
- 一、饿汉式单例类public class Singleton { privat
- 最近在配置OpenCV的时候,由于使用的是VS2019,结果找不到Microsoft.Cpp.X64.user这个文件。导致每次新建项目都得
- 1. 前言Spring除了IOC和DI,还有另一个杀手锏功能——Spring AOP。AOP是一种面