为了账号安全,请及时绑定邮箱和手机立即绑定

终于完成了,和老师的一样,相互学习,望高手指点

/**
 * 创建扑克牌类
 * @author 
 *
 */
public class Card implements Comparable<Card> {

    String num;
    String type;
    int  rank;    //rank代表等级,值越大,等级越高        
    public Card(String type,String num,int rank) {
        this.num=num;
        this.type=type;
        this.rank=rank;
    }    
    
    public Card() {
        
    }

    @Override
    public int compareTo(Card o) {
         
        return this.rank-o.rank;      //比较rank值的大小
    }


}


/**
 * 创建玩家类
 * @author 
 *
 */
public class Player  {

    String id;    
    String name;
    List<Card>pCards;   //用于存放玩家手中的牌
    
    public Player(String id,String name) {
        this.id=id;
        this.name=name;
        pCards=new ArrayList<Card>();
    }

}


/**
 * 
 * @author 
 *
 */
public class CardDemo {

    List<Card>cards;
    List<Player>players;
    Player p1;    //玩家
    Player p2;
    Card p1max;   //玩家1最大的牌
    Card p2max;   //玩家2最大的牌
    Card p1min;   //玩家1最小的牌
    Card p2min;   //玩家2最小的牌
//创建扑克牌资源数组
    String[] CardType=new String[] {"方块","梅花","红桃","黑桃"};  //顺序不可调换,否则会影响大小比较的rank值
    String[] CardNum=new String[] {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        
    public CardDemo() {
        
        this.cards=new ArrayList<Card>();
        this.players=new ArrayList<Player>();
    }    
    
//创建扑克牌    
    public void CreatCard() {
        
        System.out.println("---------创建扑克牌-----------");
        for(int i=0;i<13;i++) {
            for(int j=0;j<4;j++) {
             cards.add(new Card(CardType[j],CardNum[i],i*13+j));
            }
        }
        //遍历打印扑克牌资源
         System.out.println("--------扑克牌创建成功!----------");
         System.out.print("扑克牌为");
         for(Card c:cards) { 
             System.out.print(c.type+c.num+","); 
         }
         System.out.println("总共52张");
    }
    
//进行洗牌    
    public void washCard() {
    System.out.println("----------开始洗牌--------------");    
        Collections.shuffle(cards);        //进行洗牌
    System.out.println("----------洗牌结束-------------");    
    
    }

//创建两名玩家
     public void creatPlayer() {
        //键盘上输入两名玩家信息      
        Scanner console=new Scanner(System.in);
        System.out.println("请输入第一位玩家的ID和姓名:");
        System.out.println("请输入ID");
        String id1=console.next(); 
        System.out.println("请输入姓名:");
        String name1=console.next();
        p1=new Player(id1, name1);
        players.add(p1);
        System.out.println("请输入第二位玩家的ID和姓名:");
        System.out.println("请输入ID");
        String id2=console.next(); 
        System.out.println("请输入姓名:");
        String name2=console.next();
        p2=new Player(id2, name2);
        players.add(p2);
        System.out.println("欢迎玩家:"+p1.name); 
        System.out.println("欢迎玩家:"+p2.name); 
     }
     
 //进行发牌
     public void distrubiteCard() {
        System.out.println("---------开始发牌------------"); 
        p1.pCards.add(cards.get(0));
        System.out.println("----玩家:"+p1.name+"-拿牌------");
        p2.pCards.add(cards.get(1));
        System.out.println("----玩家:"+p2.name+"-拿牌------");
        p1.pCards.add(cards.get(2));
        System.out.println("----玩家:"+p1.name+"-拿牌------");
        p2.pCards.add(cards.get(3));
        System.out.println("----玩家:"+p2.name+"-拿牌------");
        System.out.println("---------发牌结束------------"); 
     }
     
//开始游戏
     public void playGame() {
    System.out.println("--------开始游戏-----------");    
    Collections.sort(p1.pCards);     //对集合pCards进行排序
    Collections.sort(p2.pCards);
    p1max=p1.pCards.get(1);    
    p2max=p2.pCards.get(1);
    System.out.println(p1.name+"最大的手牌:"+p1max.type+p1max.num);   //输出玩家1的最大手牌
    System.out.println(p2.name+"最大的手牌:"+p2max.type+p2max.num);   //输出玩家2的最大手牌
    if(p1max.rank>p2max.rank)
        {  System.out.println("-----玩家"+p1.name+"获胜!-------");  }
    else    
        {  System.out.println("-----玩家"+p2.name+"获胜!--------");  }
    //输出玩家各自的手牌
    System.out.println("-------玩家各自的手牌为:----------");
    p1min=p1.pCards.get(0);
    p2min=p2.pCards.get(0);
    //打印两名玩家各自手上的两张牌
    System.out.println(p1.name+":"+p1max.type+p1max.num+","+p1min.type+p1min.num);
    System.out.println(p2.name+":"+p2max.type+p2max.num+","+p2min.type+p2min.num);
    System.out.println("--------游戏结束-----------");          
     }
     
//主函数    
    public static void main(String[] args) {
        CardDemo cd=new CardDemo();
        cd.CreatCard();          //创建扑克牌
        cd.washCard();           //洗牌
        cd.creatPlayer();        //创建玩家
        cd.distrubiteCard();     //进行发牌
        cd.playGame();           //开始游戏
    }

}


正在回答

12 回答

异常处理语句块并没有看到呢?


0 回复 有任何疑惑可以回复我~

受到你的启发,写了出来。我觉得我的更好一点,而且跟视频的一样。

package pick;


public class Card implements Comparable<Card> {

    String num;

    String type;

    int  rank;    //rank代表等级,值越大,等级越高        

    public Card(String type,String num,int rank) {

        this.num=num;

        this.type=type;

        this.rank=rank;

    }    

    

    public Card() {

        

    }

    @Override

    public int compareTo(Card o) {

         

        return this.rank-o.rank;      //比较rank值的大小

    }


}

package pick;


import java.util.ArrayList;

import java.util.InputMismatchException;

import java.util.List;

import java.util.Random;

import java.util.Scanner;


public class Dala {



public List<Card>pukepais;


/**

* 在构造器中初始化pukepais属性

*/

public Dala(){

this.pukepais=new ArrayList<Card>();

}


/**

* 创建扑克牌

*/

public void fapai(){

System.out.println("-----------创建扑克牌---------------");

String[] hu= {"方片","梅花","红桃","黑桃"};

String[] ku = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

int o=1;

for(int i=0;i<13;i++){

for(int t = 0;t<4;t++){

Card yu=new Card(hu[t],ku[i],o);

o++;

pukepais.add(yu);

}}

}


/**

* 遍历

*/

public void bianli(){

System.out.println("-----------扑克牌创建成功---------------");

for(int p=0;p<52;p++)

System.out.print(pukepais.get(p).type+pukepais.get(p).num+","+pukepais.get(p).rank);


}


/**

* 洗牌

*/

public void xipai(){

System.out.println("-----------开始洗牌---------------");

for(int i=0;i<52;i++){

Random ra = new Random();

int t = ra.nextInt(51);

Card y = pukepais.get(i);

pukepais.remove(i);

pukepais.add(i,pukepais.get(t));

pukepais.remove(t);

pukepais.add(t,y);

}

System.out.println("-----------洗牌结束---------------");

for(int p=0;p<52;p++)

System.out.print(pukepais.get(p).type+pukepais.get(p).num+",");


}


/**

* 创建玩家

*/

public void Wanjia(){

System.out.println("-----------创建玩家---------------");

Scanner c = new Scanner(System.in);

//输入整数id

 boolean is = true;

 while (is) {

   System.out.println("请输入第一位玩家的id:");

   try {

       int id = c.nextInt();

       is = false;

   } catch (InputMismatchException e) {

       // TODO: handle exception

       System.out.println("请输入整数类型的ID!");

       //清空数据,使下一次可以输入

       c.next();

       is = true;

       continue;

   } catch (Exception e) {

       // TODO: handle exception

       e.printStackTrace();

       break;

   }

}

System.out.println("请输入第一位玩家的姓名:");

String name = c.next();

is = true;

 while (is) {

   System.out.println("请输入第二位玩家的id:");

   try {

       int id2 = c.nextInt();

       is = false;

   } catch (InputMismatchException e) {

       // TODO: handle exception

       System.out.println("请输入整数类型的ID!");

       //清空数据,使下一次可以输入

       c.next();

       is = true;

       continue;

   } catch (Exception e) {

       // TODO: handle exception

       e.printStackTrace();

       break;

   }

}

System.out.println("请输入第二位玩家的姓名:");

String name2 = c.next();

System.out.println("欢迎玩家:"+name);

System.out.println("欢迎玩家:"+name2);

//发牌

System.out.println("-----------开始发牌--------------");

Card[] hu1 = new Card[2];

Card[] hu2 = new Card[2];

Random ra = new Random();

int x = 0;

for(int i=51;i>47;i=i-2){

int t = ra.nextInt(i);

hu1[x] = pukepais.get(t);

pukepais.remove(t);

System.out.println("---玩家:"+name+"-拿牌");

int y = ra.nextInt(i-1);

hu2[x] = pukepais.get(y);

pukepais.remove(y);

System.out.println("---玩家:"+name2+"-拿牌");

x++;

}

System.out.println("-----------发牌结束--------------");

//开始游戏

System.out.println("-----------开始游戏--------------");

Card[] ui = new Card[2];

if(hu1[0].rank>hu1[1].rank){

ui[0] = hu1[0];

System.out.println("玩家:"+name+"最大的手牌为:"+hu1[0].type+hu1[0].num);

}else{ui[0] = hu1[1];System.out.println("玩家:"+name+"最大的手牌为:"+hu1[1].type+hu1[1].num);}

if(hu2[0].rank>hu2[1].rank){

ui[1] = hu2[0];

System.out.println("玩家:"+name+"最大的手牌为:"+hu2[0].type+hu2[0].num);

}else{ui[1] = hu2[1];System.out.println("玩家:"+name2+"最大的手牌为:"+hu2[1].type+hu2[1].num);}

//获胜

if(ui[0].rank>ui[1].rank){

System.out.println("-----------玩家:"+name+"获胜!--------------");

}else{System.out.println("-----------玩家:"+name2+"获胜!--------------");}

}


/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Dala mo = new Dala();

mo.fapai();

mo.bianli();

mo.xipai();

mo.Wanjia();

}

}


0 回复 有任何疑惑可以回复我~

受到你的启发,写了出来。我觉得我的更好一点,而且跟视频的一样。

package pick;


public class Card implements Comparable<Card> {

    String num;

    String type;

    int  rank;    //rank代表等级,值越大,等级越高        

    public Card(String type,String num,int rank) {

        this.num=num;

        this.type=type;

        this.rank=rank;

    }    

    

    public Card() {

        

    }

    @Override

    public int compareTo(Card o) {

         

        return this.rank-o.rank;      //比较rank值的大小

    }


}

package pick;


import java.util.ArrayList;

import java.util.InputMismatchException;

import java.util.List;

import java.util.Random;

import java.util.Scanner;


public class Dala {


/**

* 用来承装学生类型的对象

*/

public List<Card>pukepais;

/**

* 在构造器中初始化pukepais属性

*/

public Dala(){

this.pukepais=new ArrayList<Card>();

}

/**

* 创建扑克牌

*/

public void fapai(){

System.out.println("-----------创建扑克牌---------------");

String[] hu= {"方片","梅花","红桃","黑桃"};

String[] ku = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

int o=1;

for(int i=0;i<13;i++){

for(int t = 0;t<4;t++){

Card yu=new Card(hu[t],ku[i],o);

o++;

pukepais.add(yu);

}}

}

/**

* 遍历

*/

public void bianli(){

System.out.println("-----------扑克牌创建成功---------------");

for(int p=0;p<52;p++)

System.out.print(pukepais.get(p).type+pukepais.get(p).num+","+pukepais.get(p).rank);

}

/**

* 洗牌

*/

public void xipai(){

System.out.println("-----------开始洗牌---------------");

for(int i=0;i<52;i++){

Random ra = new Random();

int t = ra.nextInt(51);

Card y = pukepais.get(i);

pukepais.remove(i);

pukepais.add(i,pukepais.get(t));

pukepais.remove(t);

pukepais.add(t,y);

}

System.out.println("-----------洗牌结束---------------");

for(int p=0;p<52;p++)

System.out.print(pukepais.get(p).type+pukepais.get(p).num+",");

}

/**

* 创建玩家

*/

public void Wanjia(){

System.out.println("-----------创建玩家---------------");

Scanner c = new Scanner(System.in);

//输入整数id

 boolean is = true;

 while (is) {

   System.out.println("请输入第一位玩家的id:");

   try {

       int id = c.nextInt();

       is = false;

   } catch (InputMismatchException e) {

       // TODO: handle exception

       System.out.println("请输入整数类型的ID!");

       //清空数据,使下一次可以输入

       c.next();

       is = true;

       continue;

   } catch (Exception e) {

       // TODO: handle exception

       e.printStackTrace();

       break;

   }

}

System.out.println("请输入第一位玩家的姓名:");

String name = c.next();

is = true;

 while (is) {

   System.out.println("请输入第二位玩家的id:");

   try {

       int id2 = c.nextInt();

       is = false;

   } catch (InputMismatchException e) {

       // TODO: handle exception

       System.out.println("请输入整数类型的ID!");

       //清空数据,使下一次可以输入

       c.next();

       is = true;

       continue;

   } catch (Exception e) {

       // TODO: handle exception

       e.printStackTrace();

       break;

   }

}

System.out.println("请输入第二位玩家的姓名:");

String name2 = c.next();

System.out.println("欢迎玩家:"+name);

System.out.println("欢迎玩家:"+name2);

//发牌

System.out.println("-----------开始发牌--------------");

Card[] hu1 = new Card[2];

Card[] hu2 = new Card[2];

Random ra = new Random();

int x = 0;

for(int i=51;i>47;i=i-2){

int t = ra.nextInt(i);

hu1[x] = pukepais.get(t);

pukepais.remove(t);

System.out.println("---玩家:"+name+"-拿牌");

int y = ra.nextInt(i-1);

hu2[x] = pukepais.get(y);

pukepais.remove(y);

System.out.println("---玩家:"+name2+"-拿牌");

x++;

}

System.out.println("-----------发牌结束--------------");

//开始游戏

System.out.println("-----------开始游戏--------------");

Card[] ui = new Card[2];

if(hu1[0].rank>hu1[1].rank){

ui[0] = hu1[0];

System.out.println("玩家:"+name+"最大的手牌为:"+hu1[0].type+hu1[0].num);

}else{ui[0] = hu1[1];System.out.println("玩家:"+name+"最大的手牌为:"+hu1[1].type+hu1[1].num);}

if(hu2[0].rank>hu2[1].rank){

ui[1] = hu2[0];

System.out.println("玩家:"+name+"最大的手牌为:"+hu2[0].type+hu2[0].num);

}else{ui[1] = hu2[1];System.out.println("玩家:"+name2+"最大的手牌为:"+hu2[1].type+hu2[1].num);}

//获胜

if(ui[0].rank>ui[1].rank){

System.out.println("-----------玩家:"+name+"获胜!--------------");

}else{System.out.println("-----------玩家:"+name2+"获胜!--------------");}

}


/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Dala mo = new Dala();

mo.fapai();

mo.bianli();

mo.xipai();

mo.Wanjia();

}

}


0 回复 有任何疑惑可以回复我~

作业的原意应该是先比较点数大小,如果点数相同,再比较花色,例如方片7是要大于黑桃2的

但如果只是给Card类加一个rank属性的话,这种通过先后比较两个属性的方法,体现不出来,所以你的compareTo方法的重写还可以改一下,用个两层的if循环把num和type先后比较一下;或者也可以继续用rank,但创建扑克牌的时候顺序换一下

0 回复 有任何疑惑可以回复我~

rank的想法很好


0 回复 有任何疑惑可以回复我~

我Collection.sort方法报错用不了,说不适合List这种类型

0 回复 有任何疑惑可以回复我~

我的发牌代码和你一样,但是不知道为什么会报空指针异常

1 回复 有任何疑惑可以回复我~

  Player player1=new Player(id1,name1);和  
  player1=new Player(id1,name1); 

 有什么区别吗?
我用第二个就可以运行,第一个就报错 


0 回复 有任何疑惑可以回复我~

我想问一下,在对两人手牌自己内部排序时使用了Collection.sort方法。传入的是集合Pcards,这个集合中的单个元素包含Card的三个属性,这里为什么默认的对rank属性进行的排序?求解

0 回复 有任何疑惑可以回复我~
#1

qq_不过六级不改名i_opIMVZ

哦哦我懂了。在Card类中已经定义了这个方法,我刚才傻了。。
2018-11-05 回复 有任何疑惑可以回复我~
#2

qq_不过六级不改名i_opIMVZ 回复 qq_不过六级不改名i_opIMVZ

不过在Card中构造了有参构造器后,那个无参的好像多余了,因为后面没有调用无参构造方法。我把无参注释掉了程序能正常运行。
2018-11-05 回复 有任何疑惑可以回复我~

rank计算为何是 i*13+j 啊?

0 回复 有任何疑惑可以回复我~
#1

qq_冰柠檬_3 提问者

只是这个数刚好,13成其他正数也行
2018-09-19 回复 有任何疑惑可以回复我~
#2

慕丝8486895 回复 qq_冰柠檬_3 提问者

好的,谢谢啦
2018-09-19 回复 有任何疑惑可以回复我~
首页上一页12下一页尾页

举报

0/150
提交
取消

终于完成了,和老师的一样,相互学习,望高手指点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信