• 首先放上测试效果图


  • 设计框架


  • 具体的代码实现

  • 创建玩家类

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方法对指定类进行通过特定属性排序,输入异常处理等的学习的更多相关文章

  1. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较

    参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...

  2. Java练习(模拟扫雷游戏)

    要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读入3 ...

  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 ...

  4. 使用Java语言实现,自己主动生成10个整数(1~100,求出生成数列中的最大值和最小值,不同意使用Arrays类的sort方法

    这是考察主要的java基础,没啥难点,直接上代码,近期在准备面试,所以做一些基础的面试题练练手 public class Demo1 { public static void main(String[ ...

  5. Java-杂项:Java数组Array和集合List、Set、Map

    ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...

  6. Java类成员之方法

    方法含义: 1. 方法是类或对象行为特征的抽象,用来完成某个功能操作. 2.在某些语言中也称为函数或过程. 3.将功能封装为方法的目的是简化代码,可以实现代码重用. 4.在Java里的方法不能独立存在 ...

  7. 装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用

    通过模拟咖啡馆的点单系统来剖析装饰者模式的使用 参考:https://blog.csdn.net/gududedabai/article/details/81989196 一).传统的点单系统构建,每 ...

  8. 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。

    需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...

  9. HDU 2209 翻纸牌游戏

    翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

随机推荐

  1. 为harbor部署swagger-ui

    有了swagger,所有REST API就一览无余了. Harbor官方已经准备好了部署脚本,部署起来其实特别简单,这里仅作记录. 1.下载部署脚本和swagger文件到本地harbor目录. # c ...

  2. mes平台的一些方法

    1.打开的一个缓存的页面的代码 $.openPane({ "width":"1500px",     "height":"1000 ...

  3. 记踩坑--Flask Web开发:S6电子邮件 ----[Errno 11004] getaddrinfo failed

    必须要记录下踩过的坑,一来,为后来者铺路,二来,实在摔得疼,提醒自己写代码要谨小慎微. [Errno 11004] getaddrinfo failed 1.先排除邮箱账号和授权码的错误 测试如下代码 ...

  4. Python 内置变量

    Python 隐藏变量 __doc__ # 表示本文件的注释__file__ # 表示本文件的路径 __package__ # 导入的py文件所在的文件夹路径__cached__ # 导入文件的缓存_ ...

  5. NameError: name 'reload' is not defined

    对于 Python 2.X: import sys reload(sys) sys.setdefaultencoding("utf-8") 对于 <= Python 3.3: ...

  6. android编译时出现org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJavaWithJavac'.错误

    android studio中使用terminal工具.在android studio最下面的底部菜单栏中有(如果没有那cmd中进入项目根目录后): 使用命令  gradlew compileDebu ...

  7. JavaScript编写风格指南 (三)

    七(七):严格模式 // 严格模式应当仅限在函数内部使用,千万不要在全局使用 //不好的写法:全局使用严格模式"user strict"; function doSomething ...

  8. 01 workerman之GatewayWorker框架简单使用

    1.GatewayWorker框架是什么? GatewayWorker基于Workerman开发的一个项目框架,用于快速开发TCP长连接应用,例如app推送服务端.即时IM服务端.游戏服务端.物联网. ...

  9. mybatis开发dao的方法——(三)

    ------------------------1.    SqlSession使用范围------------------- 1.1     SqlSessionFactoryBuilder 通过S ...

  10. 一份最中肯的Java学习路线+资源分享(拒绝傻逼式分享)

    这是一篇针对Java初学者,或者说在Java学习路线上出了一些问题(不知道该学什么.不知道整体的学习路线是什么样的) 第一步:Java基础(一个月左右) 推荐视频: 下面的是黑马内部视频,我比较推荐的 ...