package com.imooc; /* * 扑克牌类 * 实现Comparable接口用于比较大小 * */ public class Card implements Comparable<Card> { //牌的点数 private String pokerpoints; //牌的花色 private String pokercolor; //初始化构造方法 public Card(String pokerpoints,String pokercolor){ this.pokerpoints=pokerpoints; this.pokercolor=pokercolor; } public Card(){ } public String getPokerpoints() { return pokerpoints; } public void setPokerpoints(String pokerpoints) { this.pokerpoints = pokerpoints; } public String getPokercolor() { return pokercolor; } public void setPokercolor(String pokercolor) { this.pokercolor = pokercolor; } @Override public String toString() { return pokercolor+pokerpoints+""; } //重写Comparable的compareTO方法 @Override public int compareTo(Card o) { //用来比较点数 String ifpokerpoints="2,3,4,5,6,7,8,9,10,J,Q,K,A"; //用来比较花色 String ifpokercolor="方片,梅花,红桃,黑桃"; //当前扑克牌点数第一次出现的位置减去O对象扑克牌点数第一次出现的位置 int i=ifpokerpoints.indexOf(o.getPokerpoints())-ifpokerpoints.indexOf(this.getPokerpoints()); //如果点数的位置相同那么点数是一样的 if(i==0){ //如果点数一样那么比较花色的位置是否相同 i=ifpokercolor.indexOf(o.getPokercolor())-ifpokercolor.indexOf(this.getPokercolor()); } //返回i的值正数大于负数小于 return i; } } package com.imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* * 正副扑克牌的类 * */ public class Poker { //用来存放扑克牌的集合 List<Card> listcard=new ArrayList<Card>(); //创建扑克牌 public void creatPoker(){ System.out.println("-----创建扑克牌-----"); //定义一个牌数的数组 String[] name={"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //定义一个花色数组 String[] color={"方片","梅花","红桃","黑桃"}; //循环往扑克牌集合中添加扑克 for(int i=0;i<name.length;i++){ for(int j=0;j<color.length;j++){ listcard.add(new Card(name[i],color[j])); } } System.out.println(listcard); System.out.println("-----创建完成-----"); } //洗牌 public void randompoker(){ System.out.println("-----开始洗牌-----"); //调用Collections.shuffle()就可以实现顺序打乱 Collections.shuffle(listcard); System.out.println(listcard); System.out.println("-----洗牌完成-----"); } //获取扑克牌的数量 public int size(){ return this.listcard.size(); } //返回当前扑克牌集合 public List<Card> getlistCard(){ return this.listcard; } } package com.imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* * 玩家类 * 包括玩家id,玩家姓名 * 玩家手中最大的牌和存放玩家手牌的集合 * */ public class Player implements Comparable<Player> { //玩家id private int id; //玩家姓名 private String name; //玩家手中最大的牌 private Card maxcard; //存放玩家手牌的集合 private List<Card> cards=new ArrayList<Card>(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Card> getCards() { return cards; } public void setCards(List<Card> cards) { this.cards = cards; } //构造方法 public Player(int id,String name){ this.id=id; this.name=name; } //获取玩家手中最大的牌 public Card getMaxcard(){ //先排序,Card类中重写了comprarTo()方法,下标为0的是最大的值 Collections.sort(cards); //返回获取到的最大的值 return this.maxcard=cards.get(0); } @Override public int compareTo(Player o) { // 根据玩家手中最大的牌进行排序,获胜的玩家排在最前面 return this.getMaxcard().compareTo(o.getMaxcard()); } //玩家拿牌的方法 public void add(Card card){ System.out.println("玩家:"+this.name+"拿牌:"+card); //添加到手牌集合 this.cards.add(card); } //输出玩家最大的手牌 public void showMax(){ System.out.println("玩家:"+this.name+"的最大手牌为:"+this.getMaxcard()); } } package com.imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; /* * 扑克牌游戏类 * 创建玩家 * 根据输入的玩家信息进行发牌 * 最后比较大小 * */ public class PokerGema { //存放玩家的集合 private List<Player> listplayer=new ArrayList<Player>(); //整幅扑克牌的类 Poker poker=new Poker(); //接收用户输入的信息 private Scanner scanner=new Scanner(System.in); //保存玩家的人数 int number=0; //创建玩家人数 public void creatplayerNumber(){ System.out.println("扑克牌的总数为:"+poker.size()); System.out.println("-----请输入要创建的玩家人数-----"); //判断键盘是否有输入,当有输入时进行循坏 while(scanner.hasNext()){ //判断输入的值是否为整形,当为整形时执行循坏 if(scanner.hasNextInt()){ int j=scanner.nextInt(); //判断输入的值是否大于2并且小于扑克牌的数量 if(j>1&&j<poker.size()){ //接收用户输入的信息 number=j; break; }else{ System.out.println("请输入正确的玩家人数"); System.out.println("玩家人数要大于2,并且小于扑克牌的总数:"+poker.size()); continue;//继续循环 } }else{ System.out.println("请输入数字哦!"); //清空scanner的数据 scanner.next(); continue;//继续循环 } } //循环添加玩家 for(int i=1;i<=number;i++){ System.out.println("请输入第:"+i+"个玩家姓名"); listplayer.add(new Player(i,scanner.next()));//添加玩家 } //循坏输出玩家信息 for (Player player : listplayer) { System.out.println("欢迎玩家:"+player.getName()); } } //开始创建扑克牌 public void StartCreatingPoker(){ //创建扑克牌 poker.creatPoker(); //洗牌 poker.randompoker(); } //发牌 public void dealpoker(){ //提示用户输入信息 System.out.println("请设置每位玩家发多少张牌"); System.out.println("每位玩家发牌的数量必须大于0并且发牌的总数不能超过扑克牌的数量:"+poker.size()); //用于保存每位玩家发牌的数量 int i=0; //判断是否有输入 while(scanner.hasNext()){ //判断输入的是否是int型 if(scanner.hasNextInt()){ int j=scanner.nextInt();//将输入的值赋值给j; int k=j*number;//计算玩家人乘以每位玩家发牌的牌数得到总的发牌数量 //判断每位玩家的牌数要大于0并且小于扑克牌的数量 if(j>0&&k<poker.size()){ i=j; break;//跳出循环 }else{ System.out.println("每位玩家发牌的数量必须大于0并且小于扑克牌的总数:"+poker.size()); continue;//继续循环 } }else{ System.out.println("请输入整数"); //清空scanner输入的信息 scanner.next(); continue;//继续循环 } } //每位玩家发牌的数量乘以玩家的人数得到发牌的总数 int pokernumber=i*number; //每位玩家拿牌的数量乘以玩家的人数得到发牌的总数,然后总数多少就循环多少次 for(int j=0;j<pokernumber;){ //依次向玩家1添加扑克牌1,玩家2添加扑克牌2,玩家1添加扑克牌3,玩家2添加扑克牌4.。。。。。 for(int b=0;b<number;b++){ //获得每位玩家然后依次添加扑克牌 listplayer.get(b).add(poker.getlistCard().get(j)); j++;//每次基数加一 } } } //输出玩家手中各自的手牌和最大的扑克牌 public void PlayerMaxPoker(){ //输出玩家各自的手牌 for (Player playername : listplayer) { System.out.println("玩家:"+playername.getName()+"的手牌为:"+playername.getCards().toString()); } //输出最大的手牌 for (Player playername : listplayer) { playername.showMax(); } } //比较大小,根据玩家手中最大的牌进行排序 public void comparePlayer(){ Collections.sort(listplayer); System.out.println("玩家:"+listplayer.get(0).getName()+"获胜!"); } } package com.imooc; public class Test { /** *主程序测试类 */ public static void main(String[] args) { //创建扑克牌游戏类的实例 PokerGema pokergema=new PokerGema(); //创建扑克牌 pokergema.StartCreatingPoker(); //创建玩家 pokergema.creatplayerNumber(); //发牌 pokergema.dealpoker(); ////输出玩家手中各自的手牌和最大的扑克牌 pokergema.PlayerMaxPoker(); //比较大小,根据玩家手中最大的牌进行排序 pokergema.comparePlayer(); } }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦