继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

第三季扑克牌练习,按照课后要求编写

慕粉小蜗牛
关注TA
已关注
手记 3
粉丝 13
获赞 105

玩家


package com.pukeyouxi;

import java.util.ArrayList;
import java.util.List;

public class Player {
private int id;
private String name;
private List<Puke>playerPuke;
public Player(){
this.playerPuke=new ArrayList<Puke>();
this.id=id;
this.name=name;
}
public Player(int id,String name){
this.id=id;
this.name=name;
//这里实例化是因为构造方法中如果同时传入id,name就会被playerPuke接收
this.playerPuke=new ArrayList<Puke>();
}
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<Puke> getPlayerPuke() {
return playerPuke;
}
public void setPlayerPuke(List<Puke> playerPuke) {
this.playerPuke = playerPuke;
}
}


扑克牌

package com.pukeyouxi;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Puke implements Comparable<Puke> {
private String color;
private String number;
private static List<String>colors=Arrays.asList("方片", "梅花", "红桃", "黑桃");
private static List<String>numbers=Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"k", "A");
//这里我也已经尝试了在方法内一个个添加,但不知道怎么搞的下边CompareTo方法出现了错误,空指针错误,有比较懂得告诉下原因,谢谢
public Puke(String color,String number){
this.color=color;
this.number=number;
}
public Puke() {
this.colors=new ArrayList<String>();
this.numbers=new ArrayList<String>();

    // TODO 自动生成的构造函数存根
}
public String getColor() {
    return color;
}
public String getNumber() {
    return number;
}
public static List<Puke> testPuke(){
    //创建了扑克牌
    System.out.println("----------------创建扑克牌----------------");
    List<Puke> puker=new ArrayList<Puke>();
     for(int i=0;i<52;i++){
          String cm=null;
          String dd=null;
          int cm1=i%13;//余数
          cm=numbers.get(cm1);
          int cm2=i%4;
          dd=colors.get(cm2);
          Puke temp=new Puke(dd,cm);
          puker.add(temp);
              }
    System.out.println("----------------创建扑克牌成功!----------------");      
    System.out.println(puker.toString());
    return puker;
    }

@Override
public String toString() {
    return "" + color + "" + number + "";
}
@Override
public int compareTo(Puke o) {
    //这理运用了比较索引位置,因为不重复所以且已经按照大小排列了,这样比较索引
    if(numbers.indexOf(this.number)==numbers.indexOf(o.number)){
        return Integer.valueOf(colors.indexOf(this.color)).compareTo
                (Integer.valueOf(colors.indexOf(o.color)));
    }else{
        return Integer.valueOf(numbers.indexOf(this.number)).compareTo
                (Integer.valueOf(numbers.indexOf(o.number)));
    }
    // TODO 自动生成的方法存根

}
}

main函数

package com.pukeyouxi;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.Map.Entry;
public class Game {
private List<Puke> pukeCun;
//创建玩家我用的Map,这样容易保证不重复
private Map<Integer,Player>player;
private List<Puke>washPuke;
//接收map中value值id,name并写入List的ly,方便下面比较
private List<Player> ly;
//写入
private Scanner console;

public Game(){
    pukeCun=Puke.testPuke();
    this.player=new HashMap<Integer ,Player>();
    washPuke=new ArrayList<Puke>();
    this.ly=new ArrayList<Player>();
    console = new Scanner(System.in);

}
public Map<Integer,Player> playerNum(){
    System.out.println("----------------创建玩家----------------");
    int i=0;
    //这里只是单纯的跟老师要求的两个人玩,循环两次
    while(i<2){
    Integer id=0;
        System.out.println("请输入第"+(i+1)+"位玩家的id和姓名:");
        System.out.println("输入id:");
            try{
             id=console.nextInt();              
            }
            catch(Exception e){
            System.out.println("输入错误,请输入整型!");
            //注释掉的是打印错误信息
            //e.printStackTrace();
            //下面是自己弄了好久,一直死循环,看到别人这样的
            console.next();
            continue;
            }
        Player pl=player.get(id);
        //map中通过键,看对应value值是否为空,为空则加上
        if(pl==null){
        System.out.println("输入姓名:");
        String name=console.next();
        Player er=new Player(id,name);
        //添加玩家信息,map用put方法
        player.put(id, er);
        i++;
        }else{
            System.out.println("该id已经被占用,请从新输入!");
            continue;
        }
        //下面是总循环第一次不循环下面,输入第两次后循环下面
         if(i>1){
             Set<Integer>keySet=player.keySet();
             for(Integer sr:keySet){
                Player py=player.get(sr);
                if(py!=null){
                System.out.println("--------欢迎玩家:"+py.getName());
                }
                }
            }
        }

    return player;
    }
public void washPuke(){
    System.out.println("----------------开始洗牌----------------");
     int i=0;
     while(i<52){
         Random om=new Random();
         //随机产生一个数字
         int on=om.nextInt(52);
         Puke c= pukeCun.get(on);
         //下面是判断是否重复,也可以用Collections.shuffle()方法
        if(!washPuke.contains(c)){
            washPuke.add(c);
            }else{
                continue;
            }
        i++;
     }
        System.out.println("----------------洗牌结束----------------");
    }
public void takePuke(){
System.out.println("----------------开始发牌----------------");
    Set<Entry<Integer,Player>> entrySet=player.entrySet();
    //在这里用entry返回键值对
    for(Entry<Integer,Player> entry:entrySet){
    //键值对获得value值,并获得id,在这是包装类自动转换int   
    int d=entry.getValue().getId();
    //键值对获得value值,并获得name   
    String n=entry.getValue().getName(); 
    //新创建了List的玩家信息
    Player ar=new Player(d,n);
    //添加
    ly.add(ar);
    }
    //因为两个人,每人人两张牌
    for(int i=0;i<4;i++){
        //获取洗牌后的牌
    Puke puk= washPuke.get(i);
    //玩家谁
    System.out.println("-----玩家"+ly.get(i%2).getName()+"--拿牌");
    //添加玩家*的扑克牌列表
    ly.get(i%2).getPlayerPuke().add(puk);
 }
    System.out.println("----------------发牌结束!----------------");
    System.out.println("----------------开始游戏!----------------");
    int bj=0;
    //两个人
    for(int i=0;i<2;i++){
        //比较的是玩家*的手牌
        Collections.sort(ly.get(i).getPlayerPuke());
        //最大的牌就是根据排序规则最后一个,也就是第二张牌,如果牌数较多可以赋值第一张 牌最大,遍历比较,大的再次赋值
        System.out.println("玩家:"+ly.get(i).getName()+"最大手牌为:"+ly.get(i).getPlayerPuke().get(1).getColor()+
                ly.get(i).getPlayerPuke().get(1).getNumber()        );
        }
    //比较第二张牌,
    if(ly.get(0).getPlayerPuke().get(1).compareTo(ly.get(1).getPlayerPuke().get(1))>0){
        System.out.println("----------------玩家:"+ly.get(0).getName()+"获胜!----------------");
    }else{
        System.out.println("----------------玩家:"+ly.get(1).getName()+"获胜!----------------");
    }
    System.out.println("玩家各自的手牌为:");
    for(int i=0;i<2;i++){
        System.out.println(ly.get(i).getName()+":"+ly.get(i).getPlayerPuke().toString());
    }
    }
public static void main(String[] args) {
Game me=new Game();
me.washPuke();
me.playerNum();
me.takePuke();
}

}

打开App,阅读手记
8人推荐
发表评论
随时随地看视频慕课网APP