黑桃k游戏java实战_Java入门第三季项目实战——扑克游戏
实现一个简单的扑克牌游戏点数玩法
*/
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入门第三季项目实战——扑克游戏相关推荐
- 黑桃k游戏java实战_JAVA入门第三季综合实战-简易扑克游戏
自己写加参考,解决了抛异常只抛一次的问题 ,使程序更加完整 卡片类 package practice; public class Card { @Override public int hashCod ...
- java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...
玩家类: package playingCardsGame; import java.util.ArrayList; import java.util.List; /* * 玩家类 */ public ...
- 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点
java 入门第三季的6-5 作业, 希望大家指点 public static void main(String[] args) { // TODO Auto-generated method stu ...
- Java入门第三季-综合实战:简易扑克牌游戏
一.概述 第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下: 1.创建一副扑克牌 包括四种花色: 黑桃 红桃 梅花 方片 十三种点数 2-10,JQKA,不考虑大小王 2.创建两名玩家 玩 ...
- 《Java从入门到项目实战(全程视频版)》(李兴华 著)【配套资源及赠送资源】
<Java从入门到项目实战(全程视频版)>(李兴华 著)[配套资源及赠送资源] 其他Java全部资料 公号:纯洁的明依.回复 Java从入门到项目实战
- 《好好学Java 从零基础到项目实战》姗姗而来
梦里寻她千百度,千呼万唤始出来.从决定开始写这本书,到最终出版上市,数数已经是第三个夏天了.今年疫情有点紧,各行各业都受到影响,多亏出版社各位老师东奔西走,总算排除了万般艰难险阻,这才有了<好好 ...
- 【赠书活动】赠送清华社的《好好学Java:从零基础到项目实战》
零基础学习Java的朋友有福利啦,本博客现联合公众号"老欧说安卓"开展送书活动,下面就是本次活动要赠送的书籍封面 书籍信息: 作者:欧阳燊 出版时间:2020年7月 定价:128元 ...
- 20天从入门到项目实战:学习小组C1任务训练实录
经过20天的探索,来自国防科技大学.北航.华工等49所高校小伙伴们组建了19个学习小组,其中大部分成员已经完成了C1的训练任务,包括修改游戏存档.网络接入等. 小组成员积极讨论,以布置的任务为主线,辅 ...
- 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js
20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第三章:简单控件
第 3 章 简单控件 本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图.容纳视图的常用布局.响应点击的按钮控件.显示图片的图像视图等.然后结合本章所学的知识,演示了一个实战项 ...
最新文章
- 2019-05-26 Java学习日记之Set集合
- Juniper SRX340防火墙恢复出厂设置
- 提高 Google 搜索效率的基本语法
- 常用库函数_跑马灯实验和我为什么使用库函数?
- [Python] L1-024. 后天-PAT团体程序设计天梯赛GPLT
- php 多层 对象,php多层数组和对象的转换
- 实际运用中DataSet、DataTable、DataRow点滴
- matlab lu分解求线性方程组_线性代数10——矩阵的LU分解
- CMD中可执行的结束进程命令
- 第九章 DirectX 输入和声音(下)
- 计算机三级-未来教育考试题库做完题不显示正确与否解决办法
- 用html设计logo,终于知道网页logo设计要点
- Unity3D自带案例AngryBots分析(二)——人物动作控制逻辑
- 2019江西(南昌)安博会 数字冰雹“警视”即将惊艳亮相
- 统计笔记4:ANOVA
- Photoshop的时间轴是灰色的,不能使的解决方法
- CAS:1818880-26-0,4-Arm PEG-AC,四臂-聚乙二醇-丙烯酸酯试剂供应
- jadx重新打包_[原创]360加固之onCreate函数还原并重打包
- 2023年全国最新高校辅导员精选真题及答案57
- 亿信华辰亮相2020华为全联接大会,共创行业新价值