手记

注释详细,java入门第三季大作业。

Poker类用于存放扑克牌,重写了equals方法。

//Poker类用于存放扑克牌,重写了equals方法。
public class Poker {
    String huaSe;
    String dianShu;

    public Poker(String huaSe,String dianShu){
        this.huaSe=huaSe;
        this.dianShu=dianShu;

    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((dianShu == null) ? 0 : dianShu.hashCode());
        result = prime * result + ((huaSe == null) ? 0 : huaSe.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Poker))
            return false;
        Poker other = (Poker) obj;
        if (dianShu == null) {
            if (other.dianShu != null)
                return false;
        } else if (!dianShu.equals(other.dianShu))
            return false;
        if (huaSe == null) {
            if (other.huaSe != null)
                return false;
        } else if (!huaSe.equals(other.huaSe))
            return false;
        return true;
    }

}

Player1类,用于存放玩家1的信息,重写了equals方法,有一个Poker泛型的集合。

//Player1类,用于存放玩家1的信息,重写了equals方法,有一个Poker泛型的集合。
public class Player1 {
    Integer id;
    String name;
    List<Poker> player1List;

    public Player1(Integer id,String name){
        this.id = id;
        this.name = name;
        player1List = new ArrayList<Poker>();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Player1))
            return false;
        Player1 other = (Player1) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

}

Player2类,用于存放玩家2的信息,有一个Poker泛型的集合存放手牌。

//Player2类,用于存放玩家2的信息,有一个Poker泛型的集合存放手牌。
public class Player2 {
    Integer id;
    String name;
    List<Poker> player2List;

    public Player2(Integer id,String name){
        this.id = id;
        this.name = name;
        player2List = new ArrayList<Poker>();
    }

}

下面的是main方法所在的Gmae类。所有方法以及主程序都在这里,有一点要说的是,“public class Game{” 后面应该还有个 “}” 我没有放出来,表示我这个类并没有写完,里面还有很多东西以及方法块。最后这个大括号应该放在主函数后面。

//初始化一个集合,储存扑克牌。
public class Game {
    //定义一个扑克牌的集合
    List<Poker>pokerList;
    //定义Player1和Player2类型的变量,(PS:这种用法在课程6-8中有提及)
    Player1 player1;
    Player2 player2;
    public Game(){
        pokerList = new ArrayList<Poker>();
    }

下面是创建扑克牌并洗牌的方法。

//创建扑克牌并初始化。
    public void initialPork(){
        String[] hs ={"黑桃","红心","梅花","方片"};
        String[] ds ={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //让每种花色和每个点数分别配对组成52副不同的扑克牌。
        for(int i = 0;i<hs.length;i++){//外层循环遍历花色。
            for(int j = 0;j<ds.length;j++){//内层循环遍历点数
                Poker pk =new Poker(hs[i],ds[j]);
                pokerList.add(pk);//将每一张扑克牌加入扑克牌集合。
            }
        }
        System.out.println("-----------扑克牌创建成功----------");
        System.out.println("除了大小王一共有"+pokerList.size()+"张扑克牌分别是:");
        for(Poker pk:pokerList){//这里用foreach遍历输出所有扑克牌。
            System.out.print(pk.huaSe+pk.dianShu+" ");
        }
        //用shuffle方法洗牌。
        Collections.shuffle(pokerList);
        System.out.println("***********洗牌完毕***********");
    }

创建玩家1的方法块

//创建玩家1的方法块
    public void initialPlayer1()   {
        System.out.println("请输入第一位玩家的id:");
        try {//try—catch块用来捕获用户输入ID不是Integer类型的异常
            Scanner input = new Scanner(System.in);
            Integer id = input.nextInt();
            System.out.println("请输入第一位玩家的姓名:");
            String name = input.next();
             player1 = new Player1(id,name);

        } catch (Exception e) {//在catch中处理异常
            // TODO: handle exception
          System.out.println("输入有误!");
          initialPlayer1();
            }

    }

创建玩家二的方法块

//创建玩家二的方法块
    public void initialPlayer2() {
        try {//用Try—catch捕获用户输入的异常,同玩家1
            Scanner input;
            Integer id;
            do {//这个do—while循环是为了避免玩家2的id与玩家1相同
                System.out.println("请输入第二位玩家的id:");
                input = new Scanner(System.in);
                id = input.nextInt();
            } while (player1.id.equals(id));
            String name;
            do {//同理为了避免玩家2的name与玩家1的相同
                System.out.println("请输入第二位玩家的姓名:");
                name = input.next();
            } while (player1.name.equals(name));
             player2 = new Player2(id,name);

        } catch (Exception e) {
            // TODO: handle exception
          System.out.println("输入有误!");
          initialPlayer1();
            }

    }

下面是比较大小的方法块。

public Poker compare(Poker o1,Poker o2){
        //定义一个比较规则,用indexOf方法实现比较大小。
        String s1 = "23456789'10'JQKA";
        String s2 = "'方片''梅花''红心''黑桃'";
        //第一个元素与第二个元素的点数比较。返回大的那个
        if(s1.indexOf(o1.dianShu)!=s1.indexOf(o2.dianShu)){
            if(s1.indexOf(o1.dianShu)>s1.indexOf(o2.dianShu)){
                return o1;
            }else{return o2;}
        //第一个元素与第二个元素花色的比较。 返回大的那个元素
        }else if(s2.indexOf(o1.huaSe)!=s2.indexOf(o2.huaSe)){
            if(s2.indexOf(o1.huaSe)>s2.indexOf(o2.huaSe)){
                return o1;
            }else{return o2;}
            //花色和点数都相等那么两张牌大小就相等。
        }else{return o1;}

    }

游戏的主体逻辑在这个方法里。

public void startGame(){
        System.out.println("----------------开始发牌--------------");
        System.out.println("-----玩家"+player1.name+"拿牌");
        player1.player1List.add(pokerList.get(0));
        System.out.println("-----玩家"+player2.name+"拿牌");
        player2.player2List.add(pokerList.get(1));
        System.out.println("-----玩家"+player1.name+"拿牌");
        player1.player1List.add(pokerList.get(2));
        System.out.println("-----玩家"+player2.name+"拿牌");
        player2.player2List.add(pokerList.get(3));
        System.out.println("----------------发牌结束--------------");
        System.out.println("----------------StartGame-----------");
        //定义Poker类型的变量来接受玩家1和玩家2中最大的扑克。
        Poker max1 = null;
        Poker max2 = null;
        //Max中存放总的最大的扑克
        Poker Max = null;
        //调用compare方法比较出玩家1中最大的手牌。
        max1 = compare(player1.player1List.get(0),player1.player1List.get(1)) ;
        System.out.println("-----玩家:"+player1.name+"最大的手牌为:"+max1.huaSe+max1.dianShu);
        max2 = compare(player2.player2List.get(0),player2.player2List.get(1));
        System.out.println("-----玩家:"+player2.name+"最大的手牌为:"+max2.huaSe+max2.dianShu);
        //比较出玩家1与玩家二总的最大的牌放入Max中。
        Max = compare(max1,max2);
        //判断输赢并输出。
        if(!(max1.equals(max2))){
            if(Max.equals(max1)){
                System.out.println("--------------玩家:"+player1.name+"获胜!!-----------------");
            }else{
                System.out.println("--------------玩家:"+player2.name+"获胜!!-----------------");
            }

        }else {System.out.println("--------------玩家:"+player1.name+"和玩家:"+player2.name+"平局!------------------");}
        System.out.println(player1.name+":"+player1.player1List.get(0).huaSe+player1.player1List.get(0).dianShu+","+player1.player1List.get(1).huaSe+player1.player1List.get(1).dianShu);
        System.out.println(player2.name+":"+player2.player2List.get(0).huaSe+player2.player2List.get(0).dianShu+","+player2.player2List.get(1).huaSe+player2.player2List.get(1).dianShu);
    }               

main方法直接调用方法块就行了。

public static void main(String[] args)   {
        // TODO Auto-generated method stub
        Game game = new Game();
        game.initialPork();
        game.initialPlayer1();
        game.initialPlayer2();
        game.sys();
        game.startGame();
        System.out.println("***************GameOver!******************");

    }

最后这个sys方法块,在主函数里我也调用了,其实这个方法并没有太大的作用, 我只是为了追求输出格式跟老师一模一样 -。-

public void sys(){
    System.out.println("------欢迎玩家"+player1.name);
    System.out.println("------欢迎玩家"+player2.name);
}

下面是运行结果:

8人推荐
随时随地看视频
慕课网APP