实现一个简单的扑克牌游戏点数玩法

*/

public class CardsPlay

{

private static Scanner sn = new Scanner(System.in); //创建一个静态用户输入Scanner对象

private static ArrayList cards = new ArrayList(); //创建一个静态扑克牌泛型集合列表

private static ArrayList players = new ArrayList(); //创建一个静态玩家泛型集合列表

/**

创建至少 1 副扑克牌

*/

private void createCards()

{

System.out.println("-------------------------创建扑克牌-------------------------");

int count;

do

{

System.out.print("请输入需要扑克牌的副数(至少一副): ");

count = sn.nextInt();

}

while (count <=0);

// 根据用户输入的扑克牌多少副数量来创建扑克牌集合

for(int i=0; i< count; i++)

{

// 一副牌有52张

for(int j=0; j<52; j++)

{

//0/3 =0, 1 / 3=0, 2 / 3=0, 3 / 3=1

//0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0

cards.add(new Card(j / 13 * 13, j % 13 + 2));

}

}

System.out.println(cards); //打印输出时用到 Card 类中的 toString() 重写方法

System.out.println("-------------------------扑克牌创建成功-------------------------");

}

/**

创建至少两名玩家,包含 id 和 名称

*/

private void createPayers()

{

System.out.println("-------------------------创建玩家-------------------------");

// 取得用户设定的玩家数量

int count ;

do

{

System.out.print("输入玩家数量(至少2个玩家):");

count = sn.nextInt();

}

while(count < 1);

for(int i= 0; i< count; i++)

{

System.out.println("请输入第" + (i + 1) + "玩家的ID和姓名:");

// 玩家ID

int id;

do

{

System.out.print("输入ID(1~" + count + "):");

id= sn.nextInt();

}

while(id<1 || id>count || players.contains(new Player (id,"")));

// 玩家姓名

System.out.print("输入姓名:");

String playerName = sn.next();

players.add(new Player(id, playerName));

}

for(Player player : players)

{

System.out.println("-------欢迎玩家:" + player.getName());

}

}

/**

洗牌,将扑克牌打乱顺序

*/

private void shuffleCards()

{

System.out.println("-------------------------开始洗牌-------------------------");

Collections.shuffle(cards);

System.out.println("-------------------------洗牌完成-------------------------");

}

/**

发牌,一人一张的方式发牌

*/

private void getHandCards()

{

System.out.println("-------------------------开始发牌-------------------------");

int countMax;

do

{

System.out.print("输入每个玩家最多抓取几张牌(至少一张):");

countMax = sn.nextInt();

}

while(countMax < 1);

for(int i =0;i < cards.size(); i++)

{

//0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0

Player player = players.get((i % players.size()));

if(player.handCards.size() >= countMax)

{

break;

}

player.handCards.add(cards.get(i));

System.out.println("玩家:" + player.getName() + "-拿牌");

}

System.out.println("-------------------------发牌结束-------------------------");

}

/**

游戏开始,取各自手中最大点数,谁大谁赢

*/

private void playGame()

{

System.out.println("-------------------------开始游戏-------------------------");

// 将玩家各自手中的牌按从大到小排序

ArrayList maxHandList = new ArrayList();

for(Player player : players)

{

Collections.sort(player.handCards, Collections.reverseOrder());//从大->小排序

maxHandList.add(player.handCards.get(0));

System.out.println("玩家:" + player.getName() + "最大手牌为:" + player.handCards.get(0));

}

// 收集所有玩家手中最大点数比较确认谁获胜

ArrayList maxPlayer = new ArrayList();

Collections.sort(maxHandList, Collections.reverseOrder());//从大->小排序

for(Player player : players)

{

if(player.handCards.get(0).equals(maxHandList.get(0)))

{

maxPlayer.add(player);

}

}

// 输出获胜玩家

if(maxPlayer.size() ==1)

{

System.out.println("-------------------------玩家:" + maxPlayer.get(0).getName() + "获胜-------------------------");

}

else if(maxPlayer.size() > 1)

{

String strPlayer ="";

for(int i =0 ; i< maxPlayer.size(); i++)

{

strPlayer = strPlayer + maxPlayer.get(i).getName() + " ";

}

System.out.println("-------------------------玩家:" + strPlayer + "获胜-------------------------");

}

// 输出各玩家手中的牌

System.out.println("玩家各自的手牌为:");

for(Player player : players)

{

System.out.println(player.getName() + ":" + player.handCards);

}

}

/**

主要有以下几种方法完成游戏

1.创建至少 1 副扑克牌

2.创建至少两名玩家,包含 id 和 名称

3.洗牌,将扑克牌打乱顺序,用到 Collections.shuffle(List) 方法

4.发牌,一人一张的方式发牌

5.游戏开始,取各自手中最大点数,谁大谁赢

*/

public static void main(String[] args)

{

CardsPlay cplay = new CardsPlay();

// 创建至少 1 副扑克牌, 一副牌52

cplay.createCards();

// 创建至少两名玩家,包含 id 和 名称

cplay.createPayers();

if(cards.isEmpty())

{

System.out.println("扑克牌数量为空, 无法完成发牌, 请检查程序!");

return;

}

if(players.isEmpty())

{

System.out.println("玩家人数为空, 无法完成发牌, 请检查程序!");

return;

}

// 洗牌,将扑克牌打乱顺序

cplay.shuffleCards();

// 发牌,一人一张的方式发牌

cplay.getHandCards();

// 游戏开始,取各自手中最大点数,谁大谁赢

cplay.playGame();

}

}

黑桃k游戏java实战_Java入门第三季项目实战——扑克游戏相关推荐

  1. 黑桃k游戏java实战_JAVA入门第三季综合实战-简易扑克游戏

    自己写加参考,解决了抛异常只抛一次的问题 ,使程序更加完整 卡片类 package practice; public class Card { @Override public int hashCod ...

  2. java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...

    玩家类: package playingCardsGame; import java.util.ArrayList; import java.util.List; /* * 玩家类 */ public ...

  3. 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点

    java 入门第三季的6-5 作业, 希望大家指点 public static void main(String[] args) { // TODO Auto-generated method stu ...

  4. Java入门第三季-综合实战:简易扑克牌游戏

    一.概述 第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下: 1.创建一副扑克牌 包括四种花色: 黑桃 红桃 梅花 方片 十三种点数 2-10,JQKA,不考虑大小王 2.创建两名玩家 玩 ...

  5. 《Java从入门到项目实战(全程视频版)》(李兴华 著)【配套资源及赠送资源】

    <Java从入门到项目实战(全程视频版)>(李兴华 著)[配套资源及赠送资源] 其他Java全部资料 公号:纯洁的明依.回复 Java从入门到项目实战

  6. 《好好学Java 从零基础到项目实战》姗姗而来

    梦里寻她千百度,千呼万唤始出来.从决定开始写这本书,到最终出版上市,数数已经是第三个夏天了.今年疫情有点紧,各行各业都受到影响,多亏出版社各位老师东奔西走,总算排除了万般艰难险阻,这才有了<好好 ...

  7. 【赠书活动】赠送清华社的《好好学Java:从零基础到项目实战》

    零基础学习Java的朋友有福利啦,本博客现联合公众号"老欧说安卓"开展送书活动,下面就是本次活动要赠送的书籍封面 书籍信息: 作者:欧阳燊 出版时间:2020年7月 定价:128元 ...

  8. 20天从入门到项目实战:学习小组C1任务训练实录

    经过20天的探索,来自国防科技大学.北航.华工等49所高校小伙伴们组建了19个学习小组,其中大部分成员已经完成了C1的训练任务,包括修改游戏存档.网络接入等. 小组成员积极讨论,以布置的任务为主线,辅 ...

  9. 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js

    20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...

  10. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第三章:简单控件

    第 3 章 简单控件 本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图.容纳视图的常用布局.响应点击的按钮控件.显示图片的图像视图等.然后结合本章所学的知识,演示了一个实战项 ...

最新文章

  1. 2019-05-26 Java学习日记之Set集合
  2. Juniper SRX340防火墙恢复出厂设置
  3. 提高 Google 搜索效率的基本语法
  4. 常用库函数_跑马灯实验和我为什么使用库函数?
  5. [Python] L1-024. 后天-PAT团体程序设计天梯赛GPLT
  6. php 多层 对象,php多层数组和对象的转换
  7. 实际运用中DataSet、DataTable、DataRow点滴
  8. matlab lu分解求线性方程组_线性代数10——矩阵的LU分解
  9. CMD中可执行的结束进程命令
  10. 第九章 DirectX 输入和声音(下)
  11. 计算机三级-未来教育考试题库做完题不显示正确与否解决办法
  12. 用html设计logo,终于知道网页logo设计要点
  13. Unity3D自带案例AngryBots分析(二)——人物动作控制逻辑
  14. 2019江西(南昌)安博会 数字冰雹“警视”即将惊艳亮相
  15. 统计笔记4:ANOVA
  16. Photoshop的时间轴是灰色的,不能使的解决方法
  17. CAS:1818880-26-0,4-Arm PEG-AC,四臂-聚乙二醇-丙烯酸酯试剂供应
  18. jadx重新打包_[原创]360加固之onCreate函数还原并重打包
  19. 2023年全国最新高校辅导员精选真题及答案57
  20. 亿信华辰亮相2020华为全联接大会,共创行业新价值

热门文章

  1. NSIS中文乱码问题
  2. 计算机网络之网络安全基础
  3. visio双线方框怎么画_visio透明框怎么画? visio绘制方框透明的教程
  4. Unity 接入科大讯飞语音sdk
  5. linux下使用SSH实现端口映射
  6. fir 低通 matlab,用MATLAB设计FIR滤波器
  7. C语言杨辉三角形代码
  8. 钢材规格解读的软件_钢结构常用设计软件的总结与分析
  9. jquery学习文档
  10. Android SDK下载失败解决