求大神指点能在哪些部分精简,还有面向对象思想有哪些不足,类和方法的分配是否合理 package 简易扑克牌; public class Attribute{ private String value;//点数 private String color;//花色 public Attribute(String value,String color){//承载并初始化一张扑克牌 this.value=value; this.color=color; } public boolean equals(Attribute att) {//判断两张扑克牌是否相同 if(att==null)return false; if(att==this)return true; if(att instanceof Attribute) return (att.value).equals(this.value)&&(att.color).equals(this.color); return false; } public String getValue() { return value; } public String getColor() { return color; } } package 简易扑克牌; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class WanJia { private String ID;//玩家id private String Name;//玩家姓名 private List<Attribute> shouPai; private Scanner input=new Scanner(System.in); public WanJia(){//创建并初始化玩家 System.out.print("ID:"); this.ID=input.next(); System.out.print("Name:"); this.Name=input.next(); this.shouPai=new ArrayList<Attribute>(); } public List<Attribute> getShouPai() { return shouPai; } public void setShouPai(List<Attribute> shouPai) { this.shouPai = shouPai; } public String getID() { return ID; } public String getName() { return Name; } } package 简易扑克牌; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Random; public class PuKePai implements Comparator<Attribute>{ final String[] values={"1","2","3","4","5","6","7","8","9","10","J","Q","K"};//一副扑克牌的所有点数 final String[] colors={"方块","梅花","红桃","黑桃"};//一副扑克牌的所有花色 private List<Attribute> pukepai;//承载一副扑克牌 private Random random=new Random();//创建随机数 public PuKePai(){//创建并初始化一副扑克牌 this.pukepai=new ArrayList<Attribute>(); for(int i=0;i<values.length;i++){ for(int j=0;j<colors.length;j++){ Attribute att=new Attribute(values[i],colors[j]); this.pukepai.add(att); } } } public void showAll(){//输出整副扑克牌 int count=0; for(int i=0;i<this.pukepai.size();i++){ System.out.print(this.pukepai.get(i).getColor()+this.pukepai.get(i).getValue()); count++; if(count==4){ System.out.print("\t"); }else if(count==8){ System.out.println(); count=0; }else{ System.out.print(" "); } } System.out.println(); } public void XiPai(){//洗牌,返回洗完后的扑克牌 List<Attribute> npkp=new ArrayList<Attribute>(); if(this.pukepai!=null){ while(this.pukepai.size()!=0){ int i=random.nextInt(this.pukepai.size()); if(!npkp.contains(this.pukepai.get(i))){ npkp.add(this.pukepai.get(i)); this.pukepai.remove(i); } } }else{ System.out.println("该扑克牌尚未进行初始化"); } this.pukepai=npkp; } public List<Attribute> FaPai(int num){//发牌,返回发手牌 List<Attribute> npkp=new ArrayList<Attribute>(); if(num>0||num<=52/num){ for(int j=0;j<num;j++){ int i=random.nextInt(this.pukepai.size()); npkp.add(this.pukepai.get(i)); this.pukepai.remove(i); } }else{ System.out.println("输入的手牌数量应该介于0-52"); } return npkp; } @Override public int compare(Attribute a1, Attribute a2) {//重写比较规则 PuKePai pk=new PuKePai(); for(int i=0;i<pk.getPukepai().size();i++){ if(a1.equals(pk.getPukepai().get(i)))return -1; if(a2.equals(pk.getPukepai().get(i)))return 1; } return 0; } public void setPukepai(List<Attribute> pukepai) { this.pukepai = pukepai; } public List<Attribute> getPukepai() { return pukepai; } } package 简易扑克牌; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Test { private static Scanner input=new Scanner(System.in);//输入流 public static void main(String args[]){ int IF=0;//是否进入游戏 System.out.println("-----------------欢迎来到简易扑克牌游戏-----------------"); System.out.println("操作指南:\t1-进入游戏\t0-退出"); System.out.print("请输入您的选择:"); try{ IF=input.nextInt(); }catch(Exception e){ System.out.println("命令错误,请输入数字命令:"); Scanner input=new Scanner(System.in); } while(IF!=0){//IF!=0,则进入游戏 System.out.println("-----------------游戏开始-----------------\n"); System.out.println("------------正在创建扑克牌------------\n");//创建并初始化扑克牌 PuKePai puke=new PuKePai(); puke.showAll(); System.out.println("------------创建扑克牌成功------------\n"); System.out.print("请输入要创建的玩家数量:");//创建并初始化玩家 int numWJ=input.nextInt();//玩家数量 WanJia[] wjs=new WanJia[numWJ];//承载多个玩家 System.out.println("------------正在创建玩家信息------------\n"); for(int i=0;i<numWJ;i++){ System.out.println("------------正在创建玩家"+(i+1)+"------------\n"); wjs[i]=new WanJia(); System.out.println("玩家"+(i+1)+"创建成功----ID:"+wjs[i].getID()+"\tName:"+wjs[i].getName()); } System.out.println("------------所有玩家创建完毕------------\n"); System.out.println("------------开始洗牌------------\n");//洗牌并输出 puke.XiPai(); puke.showAll(); System.out.println("------------洗牌完毕------------\n"); System.out.print("请输入每个玩家的手牌数量:");//发牌并对玩家手牌排序后输出 int numSP=input.nextInt(); System.out.println("------------开始发牌------------\n"); for(int i=0;i<numWJ;i++){ wjs[i].setShouPai(puke.FaPai(numSP)); System.out.print("玩家"+wjs[i].getName()+"的手牌:"); Collections.sort(wjs[i].getShouPai(),new PuKePai());//排序,sort通过Comparator重写compare规则 for(int j=0;j<numSP;j++){ System.out.print(wjs[i].getShouPai().get(j).getColor()+wjs[i].getShouPai().get(j).getValue()); System.out.print(" "); } System.out.println(); } System.out.println("\n------------发牌完毕------------\n"); System.out.println("------------开始比较大小------------\n");//对玩家每一张手牌进行比较大小 int[] result=new int[numWJ]; for(int i=0;i<numSP;i++){//手牌数量控制总的比较次数 System.out.print("正在比较第"+(i+1)+"张牌:"); int j=0; int record=j; Attribute max=wjs[j].getShouPai().get(i); for(j=1;j<numWJ;j++){//玩家数量控制每张牌比较次数 if(puke.compare(max, wjs[j].getShouPai().get(i))==-1){ max=wjs[j].getShouPai().get(i); record=j; } } result[record]++;//记录每个玩家胜利的次数 System.out.println("玩家"+wjs[record].getName()+"大");//输出当次比较胜利的玩家 } int i=0,j=0; for(i=1;i<numWJ;i++){ if(result[j]<result[i]){ j=i; } } System.out.println("最后的赢家是:玩家"+wjs[j].getID()+" "+wjs[j].getName()+",胜"+result[j]+"盘"); IF=0; } } }
Miahuang
相关分类