用java创建一副扑克牌

用java怎么创建一副扑克牌
一张扑克牌有两个属性,一个是花色(suit),一个是点数(rank),下面写一个简单的类Card

package com.syz.card;

import java.io.Serializable;

public class Card implements Serializable{

    private static final long serialVersionUID = -4279016186402068401L;

    private int suit;

    private int rank;

    public static final int SPADE = 0;

    public static final int HEART = 1;

    public static final int CLUB = 2;

    public static final int DIAMOND = 3;

    public static final int BLACK = 4;

    public static final int RED = 5;

    private static final String[] suits = new String[] { "黑桃", "红桃", "梅花", "方块",
            "小", "大" };

    public static final int ACE = 1000;

    public static final int TWO = 1001;

    public static final int THREE = 1002;

    public static final int FOUR = 1003;

    public static final int FIVE = 1004;

    public static final int SIX = 1005;

    public static final int SEVEN = 1006;

    public static final int EIGHT = 1007;

    public static final int NINE = 1008;

    public static final int TEN = 1009;

    public static final int JACK = 1010;

    public static final int QUEEN = 1011;

    public static final int KING = 1012;

    public static final int JOKER = 1013;

    private static final String[] ranks = new String[] { "A", "2", "3", "4",
            "5", "6", "7", "8", "9", "10", "J", "Q", "K", "王" };

    public Card(int suit, int rank) {
        if (suit > -1 && suit < 6) {
            if (suit < 4) {
                if (rank < 1000 || rank > 1012) {
                    throw new IllegalArgumentException("花色或点数参数错误!");
                }
            }
            else {
                if (rank != 1013) {
                    throw new IllegalArgumentException("花色或点数参数错误!");
                }
            }
        }
        else {
            throw new IllegalArgumentException("花色参数错误!");
        }
        this.suit = suit;
        this.rank = rank;
    }

    public int getSuit() {
        return suit;
    }

    public int getRank() {
        return rank;
    }

    @Override
    public String toString() {
        return suits[suit] + ranks[rank - 1000];
    }

}

写完之后,要new一张扑克牌,需要两个参数,suit和rank,而且suit和rank是有关系的黑红梅方可以对应A2345678910JQK,然后黑色小王,红色大王。这个在构造器里做了校验,如果不符合,则抛出参数错误异常。
下面是测试类
CardClient

package com.syz.card;

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

public class CardClient {
    public static void main(String[] args) {
        test2();

    }

    private static void test1() {
        Card c = new Card(Card.BLACK, Card.JOKER);
        System.out.println(c);
    }

    private static void test2() {
        int[] suits = new int[] { Card.SPADE, Card.HEART, Card.CLUB,
                Card.DIAMOND };
        int[] ranks = new int[] { Card.ACE, Card.TWO, Card.THREE, Card.FOUR,
                Card.FIVE, Card.SIX, Card.SEVEN, Card.EIGHT, Card.NINE,
                Card.TEN, Card.JACK, Card.QUEEN, Card.KING };
        List<Card> cards = new ArrayList<Card>();
        for (int i = 0; i < suits.length; i++) {
            for (int j = 0; j < ranks.length; j++) {
                cards.add(new Card(suits[i], ranks[j]));
            }
        }
        cards.add(new Card(Card.BLACK, Card.JOKER));
        cards.add(new Card(Card.RED, Card.JOKER));
        System.out.println(cards);
    }
}

测试结果:
[黑桃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, 小王, 大王]这样一副扑克就创建成功了。扑克原来有52张,没有大小王,后来才加上了大小王。现在有些扑克会带一张白板牌里面是一些广告什么的,如果把这张牌加入的话,就得改改这个Card类了。下面我们来看看第二种方式创建一副扑克牌,不过这儿的类有些多,好处就是可以扩展。看代码:

1.Suit

package com.syz.pattern.bridge;

public abstract class Suit {
    private Face face;

    public Suit(Face face) {
        this.face = face;
    }

    public void show() {
        face.show(this);
    }

    protected abstract String getName();
}

2.Face

package com.syz.pattern.bridge;

public abstract class Face {

    protected abstract String getName();

    public void show(Suit suit) {
        System.out.println(suit.getName() + this.getName());
    }
}



以上两个抽象类,相互引用。是花色和点数的父类。
Suit的几个子类:

package com.syz.pattern.bridge;

public class Spade extends Suit {

    public Spade(Face face) {
        super(face);
    }

    @Override
    public String getName() {
        return "黑桃";
    }
}

package com.syz.pattern.bridge;

public class Heart extends Suit {

    public Heart(Face face) {
        super(face);
    }

    @Override
    protected String getName() {
        return "红桃";
    }

}

package com.syz.pattern.bridge;

public class Club extends Suit {

    public Club(Face face) {
        super(face);
    }

    @Override
    protected String getName() {
        return "梅花";
    }

}

package com.syz.pattern.bridge;

public class Diamond extends Suit {

    public Diamond(Face face) {
        super(face);
    }

    @Override
    protected String getName() {
        return "方块";
    }

}

package com.syz.pattern.bridge;

public class Black extends Suit {

    public Black(Face face) {
        super(face);
    }

    @Override
    protected String getName() {
        return "小";
    }

}

package com.syz.pattern.bridge;

public class Red extends Suit {

    public Red(Face face) {
        super(face);
    }

    @Override
    protected String getName() {
        return "大";
    }

}

Face的几个子类

package com.syz.pattern.bridge;

public class Ace extends Face {

    @Override
    protected String getName() {
        return "A";
    }

}

package com.syz.pattern.bridge;

public class Two extends Face {

    @Override
    protected String getName() {
        return "2";
    }

}

package com.syz.pattern.bridge;

public class Three extends Face {

    @Override
    protected String getName() {
        return "3";
    }

}

package com.syz.pattern.bridge;

public class Four extends Face {

    @Override
    protected String getName() {
        return "4";
    }

}

package com.syz.pattern.bridge;

public class Five extends Face {

    @Override
    protected String getName() {
        return "5";
    }

}

package com.syz.pattern.bridge;

public class Six extends Face {

    @Override
    protected String getName() {
        return "6";
    }

}

package com.syz.pattern.bridge;

public class Seven extends Face {

    @Override
    protected String getName() {
        return "7";
    }

}

package com.syz.pattern.bridge;

public class Eight extends Face {

    @Override
    protected String getName() {
        return "8";
    }

}

package com.syz.pattern.bridge;

public class Nine extends Face {

    @Override
    protected String getName() {
        return "9";
    }

}

package com.syz.pattern.bridge;

public class Ten extends Face {

    @Override
    protected String getName() {
        return "10";
    }

}

package com.syz.pattern.bridge;

public class Jack extends Face {

    @Override
    protected String getName() {
        return "J";
    }

}

package com.syz.pattern.bridge;

public class Queen extends Face {

    @Override
    protected String getName() {
        return "Q";
    }

}

package com.syz.pattern.bridge;

public class King extends Face {

    @Override
    protected String getName() {
        return "K";
    }

}

package com.syz.pattern.bridge;

public class Joker extends Face {

    @Override
    protected String getName() {
        return "王";
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以给您提供一个基本的Java扑克牌游戏示例。以下是一个简单的纸牌游戏,可以模拟洗牌和发牌。 ```java import java.util.ArrayList; import java.util.Collections; public class PokerGame { public static void main(String[] args) { // 创建一副扑克牌 ArrayList<String> deck = createDeck(); // 洗牌 Collections.shuffle(deck); // 发牌 dealCards(deck); } public static ArrayList<String> createDeck() { String[] suits = {"♥", "♦", "♣", "♠"}; String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; ArrayList<String> deck = new ArrayList<String>(); for (String suit : suits) { for (String rank : ranks) { deck.add(rank + suit); } } return deck; } public static void dealCards(ArrayList<String> deck) { int numPlayers = 4; // 假设有4个玩家 int numCards = 5; // 每个玩家发5张牌 for (int i = 0; i < numPlayers; i++) { System.out.println("玩家 " + (i + 1) + " 的牌是:"); for (int j = 0; j < numCards; j++) { String card = deck.get(i * numCards + j); System.out.println(card); } System.out.println(); } } } ``` 这个示例程序将创建一副扑克牌,洗牌,然后发给四个玩家每人五张牌。在发牌时,程序将按照先后顺序从一副洗好的扑克牌中取出牌来,直到每个玩家都有五张牌为止。 ### 回答2: 扑克牌游戏是一种常见且受欢迎的纸牌游戏,我们可以使用Java编写一个简单的扑克牌游戏。 首先,我们需要定义扑克牌的类。每张牌都有一个花色和一个点数。我们可以使用一个枚举类型来表示花色,如:红桃、方块、黑桃和梅花,并使用一个整数值表示点数,如:A表示1,J表示11,Q表示12,K表示13,其余的牌按点数排列。 接下来,我们需要创建一副扑克牌,即一组52张牌。我们可以使用一个数组或者集合来表示一副牌。 然后,我们可以实现洗牌的功能,将牌打乱顺序。可以通过随机生成数来交换牌的位置。 接着,我们需要设计发牌的功能,将牌均分给玩家和庄家。可以使用一个列表来表示每个玩家的手牌。 接下来,我们可以实现游戏的主要逻辑,包括玩家决定是否继续要牌,庄家决定是否要牌,以及比较点数大小来决定胜负。 最后,我们可以通过控制台输出来展示游戏过程和结果。 综上所述,通过使用Java编写一个扑克牌游戏,我们可以模拟真实的纸牌游戏体验,使玩家能够在控制台上进行游戏并享受其中的乐趣。 ### 回答3: 用Java编写扑克牌游戏需要先定义扑克牌的数据结构和规则,然后实现相关的操作和逻辑。 首先,我们可以定义一个Card类来表示一张扑克牌,它包含花色和点数等属性。可以使用枚举类型来表示不同的花色和点数。 然后,我们可以创建一个Deck类来表示一副扑克牌,它包含所有扑克牌的对象,并实现洗牌、发牌等方法。可以使用ArrayList集合来保存扑克牌对象。 接下来,我们可以创建一个Player类来表示玩家,它包含手中的扑克牌和其他相关的方法。玩家可以通过抽取一张或多张牌进行游戏。 最后,我们可以创建一个Game类来控制整个游戏的流程,包括创建一副扑克牌、洗牌、发牌、游戏规则、比较大小等等。可以使用循环和条件判断来模拟玩家的行动和游戏的进行。 在代码实现过程中,我们可以使用面向对象的思想,通过封装、继承和多态等概念来提高代码的可读性和重用性。并且可以使用异常处理来处理一些特殊情况,提高程序的健壮性。 总而言之,用Java实现扑克牌游戏需要定义扑克牌的数据结构和规则,然后实现相关的操作和逻辑。通过面向对象的思想和相关的Java语法,我们可以完成一个简单的扑克牌游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值