如何创建一副卡片构造函数

时间:2012-05-15 00:42:21

标签: java

到目前为止,这就是我所拥有的

import java.util.Random;
public class DeckOfCards
{
public static final int DECK_SIZE = 52;

//Instance Variables
private boolean[] deck; //An implicit set of 52 Playing-Cards
private int cardsInDeck;//Number of cards currently in the deck
private Random dealer;  //Used to rendomly select a card to be dealt

//Constructor
public DeckOfCards()
{
        deck = new boolean[52];
        for (int j = 0; j<deck.length ; j ++)
            deck [j] = false;

我正朝着正确的方向前进吗?......在此之后我该怎么办?我对布尔数组不是很熟悉

3 个答案:

答案 0 :(得分:3)

我自己,我会为我的牌组变量使用一系列Card对象,而不是一系列布尔值。原始布尔变量只能处于两种状态之一,true或false,而Card必须同时具有套装(4种状态中的1种)和1种状态(13种状态中的1种)。

答案 1 :(得分:1)

考虑到分配,您应该在true数组中存储false而不是deck。而且,我会把它变成一个二维的布尔数组 - 一个套件的维度,以及一个维度。

private boolean deck[][] = new boolean[13][4];

public DeckOfCards() {
    for (int rank = 0 ; rank != 13 ; rank++)
        for (int suite = 0 ; suite != 4 ; suite++)
            deck[rank][suite] = true;
}

boolean containsCard(int rank, int suite) {
    return deck[rank][suite];
}

答案 2 :(得分:1)

根据您的评论,您必须使用布尔数组,其中true表示卡片在那里。

第一点:

所以当你构建甲板时它是填充还是空的?

我认为它会满,那么每个单元格的值应该是多少?

第二点:

在您使用的构造函数中:

deck = new boolean[52];

哪个完全有效但你也有

public static final int DECK_SIZE = 52;

宣布,我认为你应该在适用的情况下使用DECK_SIZE

第三点:

您有两个字段:

private int cardsInDeck;//Number of cards currently in the deck
private Random dealer;  //Used to rendomly select a card to be dealt

未在构造函数中初始化(至少不在您发布的部分中)

最后一点:

除了设置本地字段外,构造函数方法不应该执行任何操作。因此,如果您修复了deck初始化并初始化其他字段,那么您应该对构造函数有所帮助。在这种情况下,大多数工作将在绘制卡片的功能中完成。

编辑:

要画一张卡,你必须

  1. 创建一个函数drawACard(),可以打印出来或返回绘制的卡片
  2. 从卡片中随机选择一张卡片(使用随机生成器dealer)(保存索引)
  3. 检查卡片是否仍在卡座中(卡座中的true / false应该有帮助)
  4. 如果您的卡片仍在卡片组中,则必须通过在deck中正确设置位置来更新该卡位置
  5. 您还必须正确更新cardsInDeck变量
  6. 现在你有了卡片的索引,你可以从中生成卡片。
  7. 既然你现在在牌组中的牌顺序你可以单独从索引中确定你画了什么牌
  8. 一旦你有了类似"Ace of Clubs"之类的相应字符串,你可以用
  9. 做任何你需要的事情

    因此,您实施的主要部分将是如何将您index=5的内容更改为String "Six of Clubs"