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

Java第三季 简易扑克牌游戏

凌_惜
关注TA
已关注
手记 3
粉丝 20
获赞 245
/**
 * 扑克牌类
 * @author:凌_惜
 * @date:2016年11月7日 下午1:56:12
 */
public class Card {

    private String color;  //花色
    private String number;   //牌数

    public Card() {

    }
    public Card(String color, String number) {
        this.color = color;
        this.number = number;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }   
}
/**
 * 玩家
 * @author:凌_惜
 * @date:2016年11月7日 下午2:06:37
 */
public class Player {

    private String id; //ID
    private String name; //姓名
    private List<Card> cards; //手牌 

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public List<Card> getCards() {
        return cards;
    }
    public void setCards(List<Card> cards) {
        this.cards = cards;
    }

}
/**
 * 比较规则类
 * @author:凌_惜
 * @date:2016年11月7日 下午2:26:59
 */
public class Compara implements Comparator<Card> {

    @Override
    public int compare(Card o1, Card o2) {
        String colors = "方块 梅花 红桃 黑桃";
        String numbers = "2 3 4 5 6 7 8 9 10 J Q K A";

        //比较数字大小,选出最大的手牌
        int result = numbers.indexOf(o1.getNumber()) - numbers.indexOf(o2.getNumber());
        if (result < 0) {
            return -1;
        } else if (result > 0) {
            return 1;
        } else {
            //比较花色大小,选出最大的手牌
            int result2 = colors.indexOf(o1.getColor()) - colors.indexOf(o2.getColor());
            if (result2 < 0) {
                return -1;
            } else if (result2 > 0) {
                return 1;
            } else {
                return 0;
            }
        }
    }
}
/**
 * 测试类
 * @author:凌_惜
 * @date:2016年11月7日 下午2:38:59
 */
public class CardGameTest {

    public static void main(String[] args) {
        System.out.println("==========开始创建一副扑克牌(不含大小王)==========");
        String[] colors = {"方块","梅花","红桃","黑桃"};
        String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        List<Card> cardList = new ArrayList<Card>();
        for (String c : colors) {
            for (int i = 0; i < numbers.length; i++) {
                Card card = new Card(c, numbers[i]);
                cardList.add(card);
            }
        }
        StringBuilder builder = new StringBuilder();
        for (Card card : cardList) {
            builder.append(card.getColor() + card.getNumber() + ",");
        }
        System.out.println("==========扑克牌创建成功==========");
        System.out.println("扑克牌为:[" + builder.substring(0,builder.lastIndexOf(",")) + "]");             
        System.out.println("==========开始洗牌==========");
        Collections.shuffle(cardList);
        System.out.println("==========洗牌结束==========");
        StringBuilder builder2 = new StringBuilder();
        for (Card card : cardList) {
            builder2.append(card.getColor() + card.getNumber() + ",");
        }
        System.out.println("洗牌后为:[" + builder2.substring(0, builder2.lastIndexOf(",")) + "]");

        System.out.println("==========创建玩家==========");
        Scanner scan = new Scanner(System.in);
        List<Player> list = new ArrayList<Player>();
        for (int i = 1; i < 3; i++) {           
            Player player = new Player();
            System.out.println("**********请输入第" + i + "位玩家的ID和姓名**********");
            System.out.println("请输入ID:");
            String id = scan.next();
            do{
                if (!id.matches("\\d*")) {
                    System.out.println("错误的ID,请输入正整数字!"); 
                    id = scan.next(); 
                } else {
                    break;
                }
            }while(true);       
            player.setId(id);
            System.out.println("请输入玩家姓名:");
            String name = scan.next();
            player.setName(name);
            list.add(player);           
        }
        for (Player p : list) {
            System.out.println("---欢迎玩家:" + p.getName());
        }
        System.out.println("==========开始发牌==========");
        List<Card> p1 = new ArrayList<Card>();
        List<Card> p2 = new ArrayList<Card>();      
        for (int i = 0; i < 4; i += 2) {
            System.out.println("***玩家:" + list.get(0).getName() + "--拿牌");
            p1.add(cardList.get(i));

            System.out.println("***玩家:" + list.get(1).getName() + "--拿牌");
            p2.add(cardList.get(i + 1));
        }
        list.get(0).setCards(p1);
        list.get(1).setCards(p2);
        System.out.println("==========发牌结束==========");
        System.out.println("==========开始游戏==========");
        //选出玩家1最大的牌
        Collections.sort(p1, new Compara());
        //选出玩家2最大的牌
        Collections.sort(p2, new Compara());
        List<Card> BigCards = new ArrayList<Card>();
        BigCards.add(p1.get(1));
        BigCards.add(p2.get(1));
        //拿两个玩家最大的牌进行比较
        Collections.sort(BigCards,new Compara());
        System.out.println("***玩家:" + list.get(0).getName() + "最大的手牌为:" + p1.get(1).getColor() + p1.get(1).getNumber());
        System.out.println("***玩家:" + list.get(1).getName() + "最大的手牌为:" + p2.get(1).getColor() + p2.get(1).getNumber());
        //比较谁获胜
        if (BigCards.get(1).equals(p1.get(1))) {            
            System.out.println("==========玩家:" + list.get(0).getName() + "获胜==========");
        } else {
            System.out.println("==========玩家:" + list.get(1).getName() + "获胜==========");
        }
        //显示玩家获取的手牌
        String card1 = p1.get(0).getColor() + p1.get(0).getNumber();
        String card2 = p1.get(1).getColor() + p1.get(1).getNumber();
        String card3 = p2.get(0).getColor() + p2.get(0).getNumber();
        String card4 = p2.get(1).getColor() + p2.get(1).getNumber();
        System.out.println("---玩家" + list.get(0).getName() + "的手牌为:[" + card1 + ","+ card2 + "]");
        System.out.println("---玩家" + list.get(1).getName() + "的手牌为:[" + card3 + ","+ card4 + "]");      
    }
}

图片描述

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

热门评论

看了 好多份  觉得这份是最切合老师视频所讲 可见楼主已 习得精髓  赞!!

代码很清晰,写的很好,我也学到很多,不过有点小意见,就是ID输入错误那里 可以设置循环 如果一直错误就可以一直提示

//实例化player

Player player = new Player(); 

System.out.println("**********请输入第" + i + "位玩家的ID和姓名**********"); 

System.out.println("请输入ID:");

String id = scan.next();

do{

 

        Pattern pattern = Pattern.compile("[0-9]*"); 

        Matcher match = pattern.matcher(id);

        

        if (!match.matches()) {

        System.out.println("错误的ID,请输入正整数字!"); 

        id = scan.next(); 

        }

        else{

        break;

        }

}while(true);



。。那个card的无参构造器中调用super() 是什么意思啊。。 小白求解释

查看全部评论