Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习
- 首先放上测试效果图

- 设计框架

- 具体的代码实现
- 创建玩家类
public class Player implements Comparable<Player>{
int id;
String name;
List<Card> cardList;
Integer maxCard;
public Player(int id, String name){
this.id = id;
this.name = name;
this.cardList = new ArrayList<Card>();
}
public int compareTo(Player o) {
return this.maxCard.compareTo(o.maxCard);
}
}
- 创建扑克牌类
public class Card implements Comparable<Card>{
Integer id;
String value;
public Card(Integer id, String value) {
this.id = id;
this.value = value;
}
public int compareTo(Card o) {
return this.id.compareTo(o.id);
}
}
- 创建进行游戏类
public class PlayCards {
Scanner console;
List<Card> cardlist;
Map<Integer, Player> playermap;
List<Card> shufflelist;
public PlayCards(){
console = new Scanner(System.in);
cardlist = new ArrayList<Card>();
playermap = new HashMap<Integer, Player>();
shufflelist = new ArrayList<Card>();
}
//创建扑克牌的方法
public void creatCard() {
System.out.println("------创建扑克牌------");
String[] head = {"方片","梅花","红桃","黑桃"};
String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
int id = 0;
for (int i = 0; i < 13; i++) {
for (int j = 0; j < 4; j++) {
String tempstr = head[j] + number[i];
Card card = new Card(id++, tempstr);
cardlist.add(card);
}
}
System.out.println("------扑克牌创建成功!------");
System.out.println("*********************************************");
for (int i = 0; i < 52; i++) {
if(i % 13 == 0) {
System.out.println();
}
System.out.print(cardlist.get(i).value);
}
System.out.println("\n**********************************************");
}
//进行洗牌的方法
public void shuffle() {
Random random = new Random();
System.out.println("------开始洗牌------");
for (int i = 52; i > 0; i--) {
int tempNum = random.nextInt(i);
Card tempcard = cardlist.get(tempNum);
cardlist.remove(tempNum);
shufflelist.add(tempcard);
}
System.out.println("------洗牌结束!------");
}
//创建玩家并录入相关id与姓名的方法
public void creatPlayer() {
System.out.println("------创建玩家------");
int i = 1;
while(i < 3) {
try {
System.out.println("请输入第" + i + "位玩家的ID和姓名");
System.out.println("请输入整数ID:");
Scanner input = new Scanner(System.in);
Integer integer = input.nextInt();
Player player = playermap.get(integer);
if(player == null) {
System.out.println("请输入姓名:");
String name = console.next();
Player newPlayer = new Player(integer, name);
playermap.put(integer, newPlayer);
i++;
}else {
System.out.println("玩家ID被已占用,请重新输入!");
continue;
}
}catch(InputMismatchException e) {
System.out.println("玩家ID输入有误,请输入规定的整数");
continue;
}
}
Set<Entry<Integer, Player>> entry = playermap.entrySet();
for (Entry<Integer, Player> ey: entry) {
System.out.println("----欢迎玩家:" + ey.getValue().name);
}
}
//进行发牌给玩家的方法
public void sendCardToPyer() {
System.out.println("规定两位玩家的手牌数小于27张");
try {
System.out.println("请输入每位玩家的手牌数:");
Scanner input = new Scanner(System.in);
int cardNum = input.nextInt();
if (cardNum > 26 || cardNum < 1) {
sendCardToPyer();
}else {
System.out.println("------开始发牌------");
int k = 0;
Set<Entry<Integer, Player>> entry = playermap.entrySet();
for (int i = 0; i < cardNum; i++) {
for (Entry<Integer, Player> ey: entry) {
ey.getValue().cardList.add(shufflelist.get(k++));
System.out.println("玩家:" + ey.getValue().name + "-拿牌");
}
}
System.out.println("------发牌结束------");
}
}catch(InputMismatchException e) {
sendCardToPyer();
}
}
//两位玩家取出最大的手牌比较并决定胜负以及亮手牌的方法
public void whoIsWinner() {
Set<Entry<Integer, Player>> entry = playermap.entrySet();
List<Player> playerlist = new ArrayList<Player>();
for (Entry<Integer, Player> ey: entry) {
Collections.sort(ey.getValue().cardList);
int listsize = ey.getValue().cardList.size();
ey.getValue().maxCard = ey.getValue().cardList.get(listsize -1).id ;
playerlist.add(ey.getValue());
System.out.println("玩家:" + ey.getValue().name + "最大的手牌为:"
+ ey.getValue().cardList.get(listsize - 1).value);
}
Collections.sort(playerlist);
System.out.println("------玩家:" + playerlist.get(playerlist.size() - 1).name + "获胜!------");
System.out.println("玩家各自的手牌为:");
for (Player player: playerlist){
System.out.print(player.name + ": ");
for (Card card: player.cardList) {
System.out.print(card.value + " ");
}
System.out.println();
}
}
}
- 创建初始类
public class Initial {
public static void main(String[] args) {
Scanner input = null;
int i = 0;
while(true) {
System.out.println("按 任意数字 开始游戏");
try {
input = new Scanner(System.in);
i = input.nextInt();
break;
}catch(InputMismatchException e) {
System.out.println("请按要求输入!!!");
}
}
PlayCards playcards = new PlayCards();
playcards.creatCard();
playcards.shuffle();
playcards.creatPlayer();
playcards.sendCardToPyer();
playcards.whoIsWinner();
System.out.println("欢迎下次游戏!!!");
System.exit(0);
if (input != null) {
input.close();
input = null;
}
}
}
Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习的更多相关文章
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- Java练习(模拟扫雷游戏)
要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读入3 ...
- 在包a中编写一个类Father,具有属性:年龄(私有)、姓名(公有); 具有功能:工作(公有)、开车(公有)。 在包a中编写一个子类Son,具有属性:年龄(受保护的)、姓名; 具有功能:玩(私有)、学习(公有)。 最后在包b中编写主类Test,在主类的main方法中测试类Father与类Son。
package a; public class Father { public String name; private int age; public Father(String name) { t ...
- 使用Java语言实现,自己主动生成10个整数(1~100,求出生成数列中的最大值和最小值,不同意使用Arrays类的sort方法
这是考察主要的java基础,没啥难点,直接上代码,近期在准备面试,所以做一些基础的面试题练练手 public class Demo1 { public static void main(String[ ...
- Java-杂项:Java数组Array和集合List、Set、Map
ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...
- Java类成员之方法
方法含义: 1. 方法是类或对象行为特征的抽象,用来完成某个功能操作. 2.在某些语言中也称为函数或过程. 3.将功能封装为方法的目的是简化代码,可以实现代码重用. 4.在Java里的方法不能独立存在 ...
- 装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用
通过模拟咖啡馆的点单系统来剖析装饰者模式的使用 参考:https://blog.csdn.net/gududedabai/article/details/81989196 一).传统的点单系统构建,每 ...
- 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。
需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...
- HDU 2209 翻纸牌游戏
翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
随机推荐
- 解题:九省联考2018 IIIDX
题面 我当时在考场上划水的时候好像乱搞搞了20pts,然后发现一堆同届的都写了55pts的贪心=.=??? 那就先说那55pts的贪心吧,这个现在看起来还是非常显然的,就是按题意来每一块是分属一个点的 ...
- linux command ------ unlink 和 rm 的区别
unlink 不能用于删除文件夹,rm 可以删除文件和文件夹 当删除文件时,rm 和 unlink 是完全一样的.
- (转)flask的context机制
本文转自:https://blog.tonyseek.com/post/the-context-mechanism-of-flask/ 作者:无知的 TonySeek 注意:本文仅仅作为个人mark, ...
- Nginx利用lua剪辑FastDFS图片
Nginx利用lua剪辑FastDFS中的图片 我们经常用FastDFS来做图片服务器,通过nginx来上传或者获取图片.本文要实现的功能是,当客户端要获取不同尺寸的图片是,lua根据url中的尺寸大 ...
- P2073 送花
P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...
- vue ssr服务端渲染
SSR:Server Side Rendering(服务端渲染) 目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...
- Solr记录-solr检索和查询数据
Solr检索数据 在本章中,我们将讨论如何使用Java Client API检索数据.假设有一个名为sample.csv的.csv文档,其中包含以下内容. 001,9848022337,Hyderab ...
- POJ - 2299 Ultra-QuickSort(归并排序)
https://vjudge.net/problem/POJ-2299 题意 求对于给定的无序数组,求出经过最少多少次相邻元素的交换之后,可以使数组从小到大有序. 分析 很明显是求逆序对的数目,那就要 ...
- JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...
- JavaScript编写风格指南 (三)
七(七):严格模式 // 严格模式应当仅限在函数内部使用,千万不要在全局使用 //不好的写法:全局使用严格模式"user strict"; function doSomething ...