问题描述

模拟保皇游戏开始的发牌过程。规则: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]

代码开始

Baohuang.java

package problem5;
import java.util.*;public class Baohuang {public static void main(String[] args) {ArrayList t = new ArrayList();Cards.CreatCards(t);player[] Players = new player[5];for (int i = 0; i < 5; i++) {Players[i] = new player();}player.AcquireCards(Players, t);player.SortCards(Players);
//      int EmperorNum = player.FindEmperor(Players);Cards tt = new Cards(0, 0);int flag = player.EmperorCards(Players, EmperorNum, tt);Iterator iter2 = Players[EmperorNum].Mine.iterator();System.out.println("皇帝是" + EmperorNum);System.out.print("皇帝的牌是:[");int flag1 = 0;while (iter2.hasNext()) {Cards result = (Cards) iter2.next();if (flag1 == 0) {System.out.print(Cards.CardsToString(result));flag1 = 1;} elseSystem.out.print("," + Cards.CardsToString(result));}System.out.println("]");if (flag == 1) {int GuardNum = player.FindGuard(tt, Players, EmperorNum);System.out.println("侍卫是" + GuardNum);System.out.println("侍卫的对应的牌是" + Cards.CardsToString(tt));System.out.print("侍卫的牌是:[");int flag2 = 0;Iterator iter3 = Players[GuardNum].Mine.iterator();while (iter3.hasNext()) {Cards result = (Cards) iter3.next();if (flag2 == 0) {System.out.print(Cards.CardsToString(result));flag2 = 1;} elseSystem.out.print("," + Cards.CardsToString(result));}System.out.println("]");}if (flag == 2) {System.out.println("皇帝可以自己当侍卫");}if (flag == 0) {System.out.println("皇帝没有可选的侍卫");}}
//
//
//      System.out.println(" ");
//      while(iter2.hasNext())
//      {   Cards result=(Cards)iter1.next();
//          System.out.print(Cards.CardsToString(result));
//      }}

Cards.java

package problem5;
import java.util.*;
public class Cards {private int type;private int num;Cards(int type,int num){this.type=type;this.num=num;}static String CardsToString(Cards t)//将数字翻译成牌号{ String s1=null,s2=null;switch (t.type){case 0:{s1="黑桃";break;}case 1:{s1="红桃";break;}case 2:{s1="方片";break;}case 3:{s1="梅花";break;}case 4:{s1="小王";break;}case 5:{s1="大王";break;}case 6:{s1="皇帝";break;}}switch(t.num){case 8:{s2="J";break;}case 9:{s2="Q";break;}case 10:{s2="K";break;}case 11:{s2="A";break;}case 12:{s2="2";break;}case 13:{s2="";break;}default:{s2=Integer.toString(t.num+3);break;}}return s1+s2;}public void setType(int type) {this.type = type;}public void setNum(int num) {this.num = num;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + num;result = prime * result + type;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Cards other = (Cards) obj;if (num != other.num)return false;if (type != other.type)return false;return true;}static void CreatCards(ArrayList t)//创建4副卡牌,并将其存入arraylist中,进行洗牌{   for(int k=0;k<13;k++)//13种有4种花色的牌for(int i=0;i<4;i++)//4副for(int j=0;j<4;j++)//4种花色{t.add(new Cards(j,k));}for(int i=0;i<4;i++)//4副大王t.add(new Cards(4,13));for(int i=0;i<4;i++)//4副小王t.add(new Cards(5,13));t.add(new Cards(6,13));Collections.shuffle(t);}public int getType() {return type;}public int getNum() {return num;}/*public static void main(String[] args) {ArrayList t=new ArrayList();CreatCards(t);Iterator iter=t.iterator();while(iter.hasNext()){Cards c=(Cards)iter.next();System.out.println(c.CardsToString(c));}}*/
}

player.java

package problem5;
import java.util.*;
public class player {ArrayList<Cards> Mine=new ArrayList<Cards>();class SortByNum implements Comparator<Cards>{public int compare(Cards t1,Cards t2){if(t1.getNum()<t2.getNum())return -1;else if(t1.getNum()>t2.getNum())return 1;else {if(t1.getType()<t2.getType())return -1;else if(t1.getType()>t2.getType())return 1;else return 0;}}}static void AcquireCards(player []Players,ArrayList<Cards> t)//每个人获取牌{Random r=new Random();int num=r.nextInt(5);Iterator iter=t.iterator();while(iter.hasNext()){  Cards result=(Cards)iter.next();Players[num].Mine.add(new Cards(result.getType(),result.getNum()));num=(num+1)%5;}}static void SortCards(player []Player){   player n=new player();for(int i=0;i<Player.length;i++){SortByNum sc=n.new SortByNum();Collections.sort(Player[i].Mine,sc);}}static int FindEmperor(player []Player){    int num=0;for(int i=0;i<Player.length;i++){if(Player[i].Mine.contains(new Cards(6,13))){ num=i;break;           }}return num;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((Mine == null) ? 0 : Mine.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;player other = (player) obj;if (Mine == null) {if (other.Mine != null)return false;} else if (!Mine.equals(other.Mine))return false;return true;}static int EmperorCards(player []Player,int num,Cards tt){   Cards cd=(Cards)Player[num].Mine.get(0);Iterator iter=Player[num].Mine.iterator();int a=cd.getNum();int b=cd.getType();Cards et=(Cards)iter.next();int record=1;int flag1 =0;int flag2=0;int result=0;while(iter.hasNext()){    et=(Cards)iter.next();if(a==et.getNum()&&b==et.getType()&&a!=0&&a!=0&&a!=12&&b!=4&&b!=5&&b!=6){record++;}else{a=et.getNum();b=et.getType();record=1;}if(record==3&&flag1==0){flag1=1;tt.setNum(et.getNum());tt.setType(et.getType());}if(record==4){flag2=1;}} if(flag1==0&&flag2==0){result=0;}else if(flag2==1){result=2;}else {result=1;}return result;}static int FindGuard(Cards t,player []Player,int num){ int result=0;for(int i=0;i<Player.length;i++){if(Player[i].Mine.contains(new Cards(t.getType(),t.getNum()))&&i!=num){result=i;break;}          }return result;}}

输出结果

皇帝是1
皇帝的牌是:[黑桃3,红桃3,红桃3,方片3,黑桃4,黑桃4,红桃4,红桃5,红桃5,红桃5,方片5,方片5,梅花5,梅花5,黑桃6,红桃6,方片6,梅花6,黑桃7,红桃8,红桃8,方片8,黑桃9,黑桃9,方片9,梅花9,黑桃10,梅花10,方片J,方片J,方片Q,方片Q,方片Q,梅花Q,黑桃K,梅花K,红桃A,方片A,方片A,黑桃2,红桃2,红桃2,大王,皇帝]
侍卫是0
侍卫的对应的牌是红桃5
侍卫的牌是:[黑桃3,红桃3,方片3,梅花3,黑桃5,黑桃5,红桃5,方片5,梅花5,梅花5,黑桃6,梅花6,梅花6,黑桃7,红桃7,红桃7,梅花7,梅花7,黑桃8,梅花8,梅花8,黑桃9,红桃9,红桃9,方片9,梅花9,方片10,方片10,梅花10,黑桃J,红桃J,梅花J,梅花J,红桃Q,梅花Q,黑桃K,梅花K,黑桃A,黑桃A,红桃A,黑桃2,小王,小王]

总结

1、要选择恰当的容器。
2、充分利用好容器类的方法。

集合的应用-模拟保皇游戏发牌相关推荐

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

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

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

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

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

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

  4. Java保皇游戏发牌模拟

    模拟保皇游戏开始的发牌过程. 规则: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作业 实现模拟保皇开始的发牌环节

    最近写了一个比较大的java作业文件,由于是自己一点一点写的,遇到了一些问题,收获了很多,所以放在这里保存一下. 题目: 模拟保皇游戏开始的发牌过程.规则:4副扑克,5个玩家.1)有一个大王标记为皇上 ...

最新文章

  1. 作为Leader如何与团队成员更好地沟通?
  2. 如何查看某个端口被哪个进程占用
  3. python typeerror console未定义,Python ctypes加载错误:未定义的符号
  4. spring boot security学习
  5. “宜小搭”萌新报到,请多关照!
  6. mini2440-Openwrt启动信息
  7. sklearn自定义svm核函数(外部和内部定义)
  8. cocos2dx遇到的坑1
  9. pandas读取csv文件数据并对数据求和使用matplotlib画饼图
  10. WIN10中如何关闭Windows Search
  11. 37 个 Python Web 开发框架总结
  12. opencv自适应二值化的应用
  13. html5新年拜年模板,关于春节拜年日记模板合集7篇
  14. python怎么做计算题_用python做算术题
  15. Nginx 单IP绑定多域名配置 顶级域名重定向到www域名
  16. 将指定的计数添加到该信号量中会导致其超过最大计数
  17. 爬虫:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position
  18. java @around_解决@Around对静态方法不生效的问题
  19. 初次BERT使用者的可视化指南
  20. 计算机博士英语缩写,学士、硕士、博士学位英文缩写.pdf

热门文章

  1. 全国计算机等级考试——三级网络技术复习资料
  2. 游戏开发 c++基础学习 第四天笔记摘要
  3. 目标跟踪之相关滤波:CF及后续改进篇
  4. 从大众角度看计算机的发展史
  5. [附源码]计算机毕业设计Pythonssm新能源电动汽车充电桩服务APP(程序+源码+LW文档)
  6. 从零开始C语言精讲篇5:指针
  7. 论文四 ERP 开发的应用
  8. python爬取王者_教你用Python爬取手机APP数据!以王者荣耀的数据信息为例
  9. php volist判断某个值,thinkphp中volist if条件判断最后一条记录
  10. 【英宝通Unity4.0公开课学习 】(一)资源管理