模拟保皇游戏开始的发牌过程。

规则:4副扑克,5个玩家。1)有一个大王标记为皇上。每次发牌时,所发牌中有该大王的玩家是皇上。2)皇帝选择侍卫(也叫保儿、腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己的牌中选择一张拥有相同三张(点数和花色都相同)的一张牌(不能是2、3、大小王),其他四个玩家中有这张牌的就是侍卫。例如,皇上有三个红桃5,其他四个玩家中有红桃5的玩家就是侍卫。

特殊情况是:1)皇上有一套四张牌相同的点数的牌,皇帝可以自己做侍卫;2)皇帝没有满足要求的牌,无法获得侍卫。

程序要求:程序启动后生成5个玩家,并自动给他们发牌。然后输出:1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;2)那张作为侍卫所特有的牌(“花色”+“点数”)。如果无法得到侍卫,则程序输出相应的提示。

输出样例:

皇帝:玩家1

皇帝的牌:[皇上, 小王, 小王, 小王, 小王, 方片2, 黑桃2, 黑桃A, 黑桃A, 红桃A, 方片K, 梅花K, 黑桃K, 红桃K, 梅花Q, 梅花Q, 黑桃Q,方片J, 方片J, 方片J, 红桃J, 梅花9, 黑桃9, 黑桃9, 方片8, 梅花8, 红桃8, 梅花7, 黑桃7, 黑桃7, 红桃7, 梅花6, 梅花6, 黑桃6, 黑桃6, 方片5, 梅花5, 黑桃5, 黑桃5, 梅花4, 梅花4, 梅花4, 方片3, 红桃3]

侍卫对应的牌:方片J

侍卫:玩家2

侍卫的牌:[方片2, 黑桃2, 红桃2, 方片A, 方片K, 梅花K, 梅花K, 黑桃K, 红桃K, 红桃K, 黑桃Q, 红桃Q,方片J, 方片10, 黑桃10, 红桃10, 红桃10, 红桃10, 方片9, 红桃9, 方片8, 梅花8, 梅花8, 黑桃8, 黑桃8, 黑桃8, 红桃8, 红桃8, 方片7, 黑桃7, 黑桃7, 方片6, 黑桃6, 黑桃5, 梅花4, 黑桃4, 红桃4, 红桃4, 方片3, 梅花3, 黑桃3, 红桃3, 红桃3]

思路:

1.先创建一个Card类,类中包含两个属性,牌的花色(用int表示,再将其转化为String类型)和点数,该类实现Comparable接口,可以实现排序,另外该类重写equals方法和toString方法
2.创建一个Player类,类中包含两个属性,玩家名字(String)和玩家的手牌(Card数组),在玩家类中实现对该玩家手牌的排序,重写toString方法,方便输出,再添加两个方法,一个方法找出皇帝牌,一个方法找出保子牌
3.创建一个Card数组,将四副牌中所有的牌存到这个数组中,调用Collections.shuffle()方法打乱顺序
4.将Card数组中的牌依此发给五个玩家
5.对五个玩家中的手牌排序,找出皇帝,并找出侍卫牌,找出侍卫牌后,再找出侍卫
6.按照格式输出

以下为具体实现:

1.Card类实现:

class Card implements Comparable<Card>{private int colour;//取值范围为1-6,1:红桃,2:黑桃,3:梅花,4:方片,5:小王,6:大王,7:皇帝private String scolour;private int value;//取值范围为3-16,3-13为基本牌,14为A,15为2,16为王private String svalue;Card(int colour,int value){this.colour = colour;this.value = value;switch(colour){case 1:this.scolour = "红桃";break;case 2:this.scolour = "黑桃";break;case 3:this.scolour = "梅花";break;case 4:this.scolour = "方片";break;case 5:this.scolour = "小王";break;case 6:this.scolour = "大王";break;case 7:this.scoluor = "皇帝";break;}switch(value){case 11:this.svalue = "J";break;case 12:this.svalue = "Q";break;case 13:this.svalue = "K";break;case 14:this.svalue = "A";break;case 15:this.svalue = "2";break;case 16:this.svalue = "";break;default:this.svalue = String.valueOf(value);}}public int compareTo(Card c){if(c==this)return 0;if(this.value>c.value)return -1;else if(this.value<c.value)return 1;else{if(this.colour>c.colour)return -1;else if(this.colour<c.colour)return 1;elsereturn 0;}}public int hashCode(){int result = 17;result = 31*result+colour;result = 31*result+value;return result;}public boolean equals(Object obj){if(this == obj)return true;if(obj == null)return false;if(getClass() != obj.getClass())return false;Card c = (Card)obj;if(this.colour!=c.colour)return false;if(this.value!=c.value)return false;return true;}public String toString(){return scolour+svalue;}
}

2.Player类的实现:

import java.util.Collections;
import java.util.LinkedList;
class Player{private String name;public LinkedList<Card> playerscard = new LinkedList<Card>();Player(String name){this.name = name;}public String getName(){return this.name;}public void sortc(){Collectoins.sort(this.playerscard);}public Card IfisEmperor(){//找出并返回侍卫牌,否则返回nullCard c = null;for(int i=0;i<this.playerscard.size()-2;i++){if((this.playerscard.get(i).equals(this.playerscard.get(i+1)))&&(this.playerscard.get(i).equals(this.playerscard.get(i+2)))){c=playerscard.get(i);break;}}return c;}public boolean IfisBodyguard(Card c){//判断玩家是不是侍卫,是的话返回true,否则返回falseint flag=0;for(int i=0;i<this.playerscard.size();i++){if(this.playerscard.get(i).equals(c)){flag=1;break;}}if(flag==1)return true;elsereturn false;}public void show(){System.out.print("["+this.playerscard.get(0));for(int i=1;i<this.playerscard.size();i++){System.out.print(","+this.playerscard.get(i));}System.out.print("]");}
}

3.main函数的实现(控制台类Main的实现)

import java.util.Scanner;
import java.util.Collections;
import java.util.LinkedList;
class Main{public static void main(String[] args) {Scanner input = new Scanner(System.in);LinkedList<Card> cards = new LinkedList<Card>();Player[] players = new Player[5];//将所有的牌存入cards链表中for(int i=3;i<16;i++){//十三张基本牌for(int j=1;j<5;j++){//四个基本花色for(int k=0;k<4;k++){cards.add(new Card(j,i));//将四副牌的基本牌存入到数组中}}}for(int i=0;i<4;i++){//将四副牌的小王存入cards.add(new Card(5,16));}for(int i=0;i<3;i++){//将四副牌中出皇帝牌外的三张大王存入cards.add(new Card(6,16));}cards.add(new Card(7,16));//将皇帝牌存入for(int i=0;i<5;i++){//初始化玩家姓名String name = input.nextLine();players[i] = new Player(name);}//洗牌(打乱牌的顺序)Collections.shuffle(cards);//发牌while(!cards.isEmpty()){for(int i=0;i<5;i++){if(cards.isEmpty())break;players[i].playerscard.add(cards.get(0));cards.remove(0);}}//给每个玩家排手牌for(int i=0;i<players.length;i++){players[i].sortc();}//找出皇帝Card cemperor = null;//皇帝能够叫的侍卫牌int iemperor = 0;//皇帝在players数组中的位置String s = "皇帝";for(int i=0;i<players.length;i++){if(s.equals(players[i].playerscard.get(0).toString())){iemperor = i;cemperor = players[i].IfisEmperor();}}System.out.println("皇帝:"+players[iemperor].getName());System.out.print("皇帝的牌:");players[iemperor].show();System.out.println();if(cemperor == null){//皇帝没有三张花色一样的牌System.out.println("皇帝叫不起侍卫牌");}else{//皇帝有三张花色一样的牌,找出侍卫,并输出侍卫的牌System.out.println("侍卫对应的牌:"+cemperor);System.out.println();int ibodyguard=0;for(int i=0;i<players.length;i++){if(i==iemperor)continue;if(players[i].IfisBodyguard(cemperor)){ibodyguard = i;break;}}if(ibodyguard==0) {ibodyguard=iemperor;System.out.println("皇帝自保");}System.out.println("侍卫:"+players[ibodyguard].getName());System.out.println();System.out.print("侍卫的牌:");players[ibodyguard].show();System.out.println();}}
}

Java保皇游戏发牌模拟相关推荐

  1. 集合的应用-模拟保皇游戏发牌

    问题描述 模拟保皇游戏开始的发牌过程.规则:4副扑克,5个玩家.1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的 ...

  2. java 模拟保皇游戏开始的发牌过程

    模拟保皇游戏开始的发牌过程.规则:4副扑克,5个玩家.1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己 ...

  3. 3.java 模拟保皇游戏开始的发牌过程

    3.模拟保皇游戏开始的发牌过程. 规则:4副扑克,5个玩家. 1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上. 2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的 ...

  4. Java实验-模拟保皇游戏开始的发牌过程

    3.模拟保皇游戏开始的发牌过程. 规则:4副扑克,5个玩家. 1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上. 2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的 ...

  5. 模拟保皇游戏开始的发牌过程

    模拟保皇游戏开始的发牌过程.规则:4副扑克,5个玩家.1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己 ...

  6. 作业3 容器 5、模拟保皇游戏开始的发牌过程

    作业3 容器 5.模拟保皇游戏开始的发牌过程. 此题目来自计算机学院张老师 规则:4副扑克,5个玩家. 1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上. 2)皇帝选择侍卫(也叫保儿 ...

  7. 编程题 模拟保皇游戏开始的发牌过程

    模拟保皇游戏开始的发牌过程 问题描述:规则:4副扑克,5个玩家.1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的 ...

  8. 保皇游戏 ——Java实验

    模拟:保皇游戏开始的发牌过程.规则: 4 副扑克, 5 个玩家.1 )有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2 )皇帝选择侍卫(也叫保儿,腿子,游戏过程中与皇帝一伙):作为皇 ...

  9. Java 实验 容器题目 保皇游戏

    模拟保皇游戏开始的发牌过程.规则:4副扑克,5个玩家.1)有一个大王标记为皇上.每次发牌时,所发牌中有该大王的玩家是皇上.2)皇帝选择侍卫(也叫保儿.腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己 ...

最新文章

  1. 三天学会Selenium,阿里p7精心整理自动化测试Selenium大礼包
  2. ansible调用callbacks插件 保存执行结果
  3. net core 使用 rabbitmq
  4. Linux桌面新彩虹-Fedora 14 炫酷应用新体验
  5. java 线程的几种状态(转载)
  6. javascript json_爬虫里总要用到的 JSON 是什么?
  7. Python中的条件语句和循环语句
  8. [转]iPhone本地化总结
  9. JDBC(Java语言连接数据库)
  10. jsp中java代码if_jsp中jstl标签的类似 if - else 语句 的语法
  11. Java使用easyexcel读大文件
  12. 计算机改网络id,Windows 8普通版移除“网络ID”修改功能
  13. 2020 【第十一届蓝桥杯省赛】 C/C++ B组 (第二场)
  14. redis数据类型:hashes
  15. 给予redis和zookeeper的分布式锁
  16. (转)vpp feature node使用分析总结(snat)
  17. 远程桌面总是显示正在配置远程会话_Jump Desktop for mac (远程控制软件)
  18. sketchup 图片转模型_3d模型转su模型(如何将3D模型转化为sketchup)
  19. DllMain函数参数简介
  20. 百度地图API之绘制折线及点击事件

热门文章

  1. catia 快速确定指南针方向窗口打开
  2. 《IDA权威指南》复习笔记
  3. 论文降重的网站和工具
  4. 华为鸿蒙苹果降价,果然,库克又杀回来了,华为鸿蒙一出来,iPhone就降价了
  5. cad怎么把图层英文变成中文_CAD图层标准-中英文对照.doc
  6. 刚刚,我顺藤摸瓜端了知名色情网站的老窝,并劝他从良
  7. rosbag 修改 topic 名称
  8. WLK数据模拟软件RAWR使用说明 软件是开源哦,对于有心研究WPF开发者是不错的选择
  9. 【力扣72. 编辑距离】dp(Python3)
  10. 阿里巴巴集团增持丁丁网