求大神指點能在哪些部分精簡,還有面向?qū)ο笏枷胗心男┎蛔?,類和方法的分配是否合?
package?簡易撲克牌;
public?class?Attribute{
private?String?value;//點數(shù)
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(){//創(chuàng)建并初始化玩家
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"};//一副撲克牌的所有點數(shù)
final?String[]?colors={"方塊","梅花","紅桃","黑桃"};//一副撲克牌的所有花色
private?List<Attribute>?pukepai;//承載一副撲克牌
private?Random?random=new?Random();//創(chuàng)建隨機(jī)數(shù)
public?PuKePai(){//創(chuàng)建并初始化一副撲克牌
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("該撲克牌尚未進(jìn)行初始化");
}
this.pukepai=npkp;
}
public?List<Attribute>?FaPai(int?num){//發(fā)牌,返回發(fā)手牌
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("輸入的手牌數(shù)量應(yīng)該介于0-52");
}
return?npkp;
}
@Override
public?int?compare(Attribute?a1,?Attribute?a2)?{//重寫比較規(guī)則
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;//是否進(jìn)入游戲
System.out.println("-----------------歡迎來到簡易撲克牌游戲-----------------");
System.out.println("操作指南:\t1-進(jìn)入游戲\t0-退出");
System.out.print("請輸入您的選擇:");
try{
???? IF=input.nextInt();
}catch(Exception?e){
System.out.println("命令錯誤,請輸入數(shù)字命令:");
Scanner?input=new?Scanner(System.in);
}
while(IF!=0){//IF!=0,則進(jìn)入游戲
System.out.println("-----------------游戲開始-----------------\n");
System.out.println("------------正在創(chuàng)建撲克牌------------\n");//創(chuàng)建并初始化撲克牌
PuKePai?puke=new?PuKePai();
puke.showAll();
System.out.println("------------創(chuàng)建撲克牌成功------------\n");
System.out.print("請輸入要創(chuàng)建的玩家數(shù)量:");//創(chuàng)建并初始化玩家
int?numWJ=input.nextInt();//玩家數(shù)量
WanJia[]?wjs=new?WanJia[numWJ];//承載多個玩家
System.out.println("------------正在創(chuàng)建玩家信息------------\n");
for(int?i=0;i<numWJ;i++){
???? System.out.println("------------正在創(chuàng)建玩家"+(i+1)+"------------\n");
???? wjs[i]=new?WanJia();
???? System.out.println("玩家"+(i+1)+"創(chuàng)建成功----ID:"+wjs[i].getID()+"\tName:"+wjs[i].getName());
}
System.out.println("------------所有玩家創(chuàng)建完畢------------\n");
System.out.println("------------開始洗牌------------\n");//洗牌并輸出
puke.XiPai();
puke.showAll();
System.out.println("------------洗牌完畢------------\n");
System.out.print("請輸入每個玩家的手牌數(shù)量:");//發(fā)牌并對玩家手牌排序后輸出
int?numSP=input.nextInt();
System.out.println("------------開始發(fā)牌------------\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規(guī)則
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------------發(fā)牌完畢------------\n");
System.out.println("------------開始比較大小------------\n");//對玩家每一張手牌進(jìn)行比較大小
int[]?result=new?int[numWJ];
for(int?i=0;i<numSP;i++){//手牌數(shù)量控制總的比較次數(shù)
System.out.print("正在比較第"+(i+1)+"張牌:");
int?j=0;
int?record=j;
Attribute?max=wjs[j].getShouPai().get(i);
for(j=1;j<numWJ;j++){//玩家數(shù)量控制每張牌比較次數(shù)
if(puke.compare(max,?wjs[j].getShouPai().get(i))==-1){
max=wjs[j].getShouPai().get(i);
record=j;
}
}
result[record]++;//記錄每個玩家勝利的次數(shù)
System.out.println("玩家"+wjs[record].getName()+"大");//輸出當(dāng)次比較勝利的玩家
}
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;
}
}
}
添加回答
舉報
0/150
提交
取消