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

简易扑克牌游戏(使用Set和List)

showball
关注TA
已关注
手记 5
粉丝 13
获赞 121
/**
 * @author showball
 * 1、用List类型来创建一副全新的扑克牌
 * 2、用Set类型来创建打乱无序的扑克牌
 * 3、将Set类型数据赋给List类型
 * 4、从List类型数据按照顺序发牌
 * 5、使用comparator确立比较派大小的规则
 */

建立扑克类

public class Card {
    public int cardNum;
    public int cardCol; 
    public String getcardNum(){     
        if(cardNum<=10&&cardNum>1){
            return cardNum+"";
        }
        else if (cardNum==1) {
            return "A";
        }
        else if(cardNum==11){
            return "J";
        }
        else if(cardNum==12){
            return "Q";
        }
        else {
            return "K";
        }
    }
    public String getcardCol(){
        if(this.cardCol==0){
        return "黑桃";
        }
        else if(this.cardCol==1){
            return "红桃";
            }
        else if(this.cardCol==2){
            return "梅花";
            }
        else {
            return "方片";
        }
    }

    public Card(){}
    public Card(int cardCol,int cardNum){
        this.cardNum=cardNum;
        this.cardCol=cardCol;
    }
}

使用CardList 来有序存储和发牌

public class CardList {
    private List<Card> cardList;
    int colourNum=4;
    int cardNum=13; 
    public CardList(){
        this.cardList=new  ArrayList<Card>();
    }
//  创建一套扑克牌
    public void createCard() {          
        for (int i = 0; i < colourNum; i++) {
            for (int j = 1; j <=cardNum; j++) {
                cardList.add(new Card(i, j));
            }
        }
    }
//  展示创建的扑克牌
    public void cardForEach() {
        System.out.print("为:");
        for (Card card: cardList) { 
            System.out.print(card.getcardCol() +card.getcardNum());
        }
        System.out.println("");
    }
//  删除创建的扑克牌
    public void deletecard() {
        cardList.clear();
    }

//  存储打乱的扑克牌
    public void saveshuffleCard(Set<Card>cardSet)
    {
        for (Card card: cardSet) {  
            cardList.add(card);
        }
    }
    public List<Card> getcardList(){
        return this.cardList;
    }
}

使用Cardset来无序存储,实现打乱牌

public class CardSet {
    public Set<Card> cardSet;
    public Card card;
    int colourNum = 4;
    int cardNum = 13;

    public CardSet() {
        this.cardSet = new HashSet<Card>();
    }

    // 打乱扑克牌的顺序
    public void shuffleCard() {
        for (int i = 0; i < colourNum; i++) {
            for (int j = 1; j <= cardNum; j++) {
                this.cardSet.add(new Card(i, j));
            }
        }
    }
    public void cardForEach() {
        System.out.print("为:");
        for (Card card: cardSet) {  
            System.out.print(card.getcardCol() +card.getcardNum());
        }
        System.out.println("");
    }
    public Set<Card> getcardSet() {
        return this.cardSet;
    }
}

建立玩家类

public class Player {
   private int ID;
   private String name;
   private Card card;
   public int getID(){
       return this.ID;
   }
   public String getName() {
       return this.name;
   }
    public Player(int ID,String name){
        this.ID=ID;
        this.name=name;
    }
    public void setCard(Card card){
        this.card=card;
    }
    public Card getCard(){
        return this.card;
    }
}

重写牌类比大小规则

public class CardComparator implements Comparator<Card> {

    public int compare(Card o1, Card o2) {
        // TODO Auto-generated method stub
        if (o1.cardCol < o2.cardCol) {
            return 1;
        } else if (o1.cardCol == o2.cardCol) {
            if (o1.cardNum > o2.cardNum) {
                return 1;
            } else if (o1.cardNum == o2.cardNum) {
                return 0;
            } else {
                return -1;
            }
        } else {
            return -1;
        }
    }
}

主程序

public class PlayCard {
    private static Scanner console = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CardList cardList = new CardList();
        System.out.println("-------------创建扑克牌--------");
        cardList.createCard();
        System.out.println("-----创建成功-----");
        cardList.cardForEach();
        System.out.println("----开始洗牌----");
        CardSet cardSet = new CardSet();
        cardSet.shuffleCard();
//      System.out.println("cardSet洗牌展示如下:");
//      cardSet.cardForEach();
//      System.out.println("cardList删除之后展示");
        cardList.getcardList().clear();
//      cardList.cardForEach();
//      System.out.println("cardList存储Set展示如下:");
        cardList.saveshuffleCard(cardSet.getcardSet());
//      cardList.cardForEach();
        System.out.println("-----洗牌结束----");
        System.out.println("----创建玩家----");
        System.out.println("请输入第1位玩家的ID和姓名:");  
        int ID1 =-1;
        while(true){
            ID1=inputCommand();
            if(ID1==-1){
                continue;
            }
            else {      
                break;
            }
        }           
        System.out.println("请输入姓名:");
        String name1 = console.next();
        Player player1 = new Player(ID1, name1);
        System.out.println("请输入第2位玩家的ID和姓名:");
        int ID2=-1;
        while(true){    
            ID2=inputCommand();
            if(ID2==-1){
                continue;
            }
            else {
                break;
            }
        }   
        System.out.println("请输入姓名:");
        String name2 = console.next();
        Player player2 = new Player(ID2, name2);
        System.out.println("----开始发牌----");
        System.out.println("玩家" + player1.getName() + "拿牌");
        System.out.println("玩家" + player2.getName() + "拿牌");
        System.out.println("玩家" + player1.getName() + "拿牌");
        System.out.println("玩家" + player2.getName() + "拿牌");
        Card[] card1={cardList.getcardList().get(0),cardList.getcardList().get(2)};
        Card[] card2={cardList.getcardList().get(1),cardList.getcardList().get(3)};
        System.out.println("----发牌结束----");
        System.out.println("----开始游戏----");
        Card maxCard1=compareCard(card1[0],card1[1]);
        System.out.println("玩家:"+player1.getName()+"最大的手牌为:"+maxCard1.getcardCol()+maxCard1.getcardNum());
        Card maxCard2=compareCard(card2[0],card2[1]);
        System.out.println("玩家:"+player2.getName()+"最大的手牌为:"+maxCard2.getcardCol()+maxCard2.getcardNum());
        Card maxCard=compareCard(maxCard1,maxCard2);
        if((maxCard.getcardCol()==maxCard1.getcardCol())&&(maxCard.getcardNum()==maxCard1.getcardNum())){
            System.out.println("-----玩家"+player1.getName()+"获胜!------");
        }
        else {
            System.out.println("-----玩家"+player2.getName()+"获胜!------");
        }
        System.out.println("玩家各自的手牌为:");
        System.out.println(player1.getName()+":"+cardList.getcardList().get(0).getcardCol()+cardList.getcardList().get(0).getcardNum()
                +cardList.getcardList().get(2).getcardCol()+cardList.getcardList().get(2).getcardNum());
        System.out.println(player2.getName()+":"+cardList.getcardList().get(1).getcardCol()+cardList.getcardList().get(1).getcardNum()
                +cardList.getcardList().get(3).getcardCol()+cardList.getcardList().get(3).getcardNum());
    }
    public static Card compareCard(Card card1,Card card2){
        CardComparator cardComparator=new CardComparator();
        if(cardComparator.compare(card1, card2)>=0)
        {
            return card1;
        }
        else  {
            return card2;
        }
    }
    private static int inputCommand(){
        int command;
        try {
            System.out.println("请输入ID:");
            command = console.nextInt();
            return command;
        } catch (Exception e) {
            //若输入字符型或者字符串,则抛出异常,捕获该异常,抛出”错误命令异常“
            console = new Scanner(System.in);
            System.out.println("命令输入错误!请根据提示输入数字命令!");
            //返回-1
            return -1;
        }
    }
}

运行结果

-------------创建扑克牌--------
-----创建成功-----
为:黑桃A黑桃2黑桃3黑桃4黑桃5黑桃6黑桃7黑桃8黑桃9黑桃10黑桃J黑桃Q黑桃K红桃A红桃2红桃3红桃4红桃5红桃6红桃7红桃8红桃9红桃10红桃J红桃Q红桃K梅花A梅花2梅花3梅花4梅花5梅花6梅花7梅花8梅花9梅花10梅花J梅花Q梅花K方片A方片2方片3方片4方片5方片6方片7方片8方片9方片10方片J方片Q方片K
----开始洗牌----
-----洗牌结束----
----创建玩家----
请输入第1位玩家的ID和姓名:
请输入ID:
m
命令输入错误!请根据提示输入数字命令!
请输入ID:
1
请输入姓名:
xiaoming
请输入第2位玩家的ID和姓名:
请输入ID:
2
请输入姓名:
xiaohua
----开始发牌----
玩家xiaoming拿牌
玩家xiaohua拿牌
玩家xiaoming拿牌
玩家xiaohua拿牌
----发牌结束----
----开始游戏----
玩家:xiaoming最大的手牌为:红桃6
玩家:xiaohua最大的手牌为:红桃3
-----玩家xiaohua获胜!------
玩家各自的手牌为:
xiaoming:梅花A红桃6
xiaohua:红桃3方片3
打开App,阅读手记
10人推荐
发表评论
随时随地看视频慕课网APP

热门评论

把你的程序看了一遍,作为交流,说几点,希望不要介意:

  1. 你展示的程序似乎和你的运行结果不一致(至少我粘贴过来是有问题的)

  2. 用Set作为乱序,可以直接在list中作为转换或许或便捷些,而且增加代码的简洁性(我运行完你以上代码,出现洗牌之后的对原来新建的牌并没有影响,你获得的发牌还是原来创建的牌)

  3. cardlist其实也是可以直接在card中作为操作,估计你做这样的操作必然有你的道理

  4. 学习啦你比较的方法,思路很清晰

    说的不对的地方,望海涵。


不错,学习啦…………

查看全部评论