• 首先放上测试效果图


  • 设计框架


  • 具体的代码实现

  • 创建玩家类

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. luogu4155/bzoj4444 国旗计划 (倍增)

    成环,把每个区间变成两个然后展开成链 一个人的下一个人肯定是在彼此相交的基础上,右端点越大越好 于是就把它连到相交的.右端点最大的点上,连成一棵树 于是每次只要从某个节点开始,一直在树上跳到覆盖了一个 ...

  2. (转) Eclipse通过HibernateTools实现逆向生成Hibernate实体类

    背景:工作中使用Hibernate进行持久化的开发工作,所以有必要详细了解这方面的知识. ps:这里有个问题就是刷新表的时候速度太慢了.还不如自己手动去创建.如果表太多倒是可以采取批量生成的策略. 在 ...

  3. Hadoop生态圈-使用Kafka命令在Zookeeper中对应关系

    Hadoop生态圈-使用Kafka命令在Zookeeper中对应关系 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zookeeper保存kafka的目录     二.使用Ka ...

  4. hdu 527 Necklace

    http://acm.hdu.edu.cn/showproblem.php?pid=5727 阶乘 爆搜阴性宝石的排列,二分图最大匹配判断最多能使多少个阳性宝石不褪色 注: 1.O(n-1 !) 即可 ...

  5. 流媒体技术学习笔记之(十二)Linux(Ubuntu)环境运行EasyDarwin

    Debug问题??? ./easydarwin -c ./easydarwin.xml & //这样的话是80端口 ./easydarwin -c ./easydarwin.xml -d // ...

  6. Python 入门基础8 --函数基础1 定义、分类与嵌套使用

    目录 零.了解函数 一.函数的组成 二.函数的定义 三.函数的使用 四.函数的分类 五.函数的嵌套使用 零.了解函数 1.什么是函数 在程序中函数就是具备某一功能的工具 2.为何用函数 为了解决以下问 ...

  7. 让浏览器重新下载css文件,解决不刷新缓存的问题

    网站页面源代码中的css文件和js文件后面带一个问号,后面跟着一连串数字或字符,问号起不到实际作用,仅能当作后缀,如果用问号加参数的方法,可以添加版本号等信息 它的作用有:1.作为版本号,让自己方便记 ...

  8. sort命令的k选项大讨论【转】

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  9. C# Message类的属性Msg所关联的消息ID

    C# Message类的属性Msg所关联的消息ID   https://msdn.microsoft.com/en-us/library/windows/desktop/ms645606(v=vs.8 ...

  10. 虚拟机 VMware安装系统,提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态

    VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态 VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态这是怎么回事呢? Intel VT ...