4

这是我关于 Stack Overflow 的第一个问题,如果我的问题中有一个新手错误,请原谅我,并随时纠正我,因为我计划在接下来的几个月内更多地使用这个网站。

无论如何,我是一名高中 12 年级的学生,并且被困在我的一个家庭作业问题上。所以基本上我们得到了一个创建战争游戏(纸牌游戏)的项目,我们被要求每天做一小部分。到目前为止,直到今天一切都进展顺利,因此我向你们提出了问题。

以下是该项目的内容:

卡片

  • 它有什么:
    • private int value:卡的值
    • 私人char套装:卡片套装
    • Private Boolean draw: 卡片是否从牌堆中抽出
  • 它能做什么:
    • Public Card(int val, char s):创建一张价值为 val、花色 s 的牌,并设置为 False
    • public int getValue():返回一张卡片的值
    • public char getSuit():返回一张牌的花色
    • Public Boolean isDrawn(): 返回一张牌是否已经被抽出
    • public String toString():以“花色值”的形式返回描述卡片的字符串</li>

甲板

  • 它有什么:
    • Private char[] suits = { 'c', 'd', 'h', 's'}:西装的表示
    • Public int numCards:一副牌中的牌张数(传统上是 52 - 将其降低以进行测试!)
    • Private Card[] 卡组:存储为卡组的卡组

到目前为止,我已经完成了所有工作。

  • 它能做什么:
    • Public Deck():创建一副牌——数值范围为 2-14,每套一张
    • 公共牌drawCard():从牌组中随机抽取一张尚未抽出的牌
    • Public String toString():根据您的测试目的进行设计

现在我已经在下面的 Quynh 先生的帮助下完成了 Public 套牌步骤,但是我对如何创建 drawCard 方法感到困惑。这是我到目前为止所拥有的:

public Card drawnCard(){
        int randNum = (int) Math.random()*13+2;
    }

所以我知道上面的代码创建了一个介于 2 到 14 之间的随机数,但是我如何使用它来绘制物理卡?比如我输入什么让程序知道要抽牌?对不起,我知道你现在可能觉得我在问你每一步,但我真的迷路了,需要你的帮助!

在编程方面我是新手,因此如果这个问题对您来说太简单/新手,我深表歉意,但我真的需要您的帮助:)

感谢您的时间!

4

3 回答 3

2

作为初学者,您的 Deck 构造函数应该类似于此

for(int i = 2; i <= 14; i++){
   for(int j = 0; j < suits.length; j++){
     Card card = new Card(i, suits[j]);
     card.isDrawn(false);
     //ADD CARD TO YOUR DECK HERE  
   }
}

至于 drawCard 功能,只需从 1-52 随机化一个数字(假设您使用的是 52 张卡片组)然后从您的卡片组中抽取并设置.isDrawn(true)

于 2013-02-24T01:42:22.687 回答
0

像这样的东西...

public class Deck {

    private Card[] cards = new Card[52];
    private int index = -1;

    public Deck() {
        // build deck
        for (int i=0; i<52; ++i) {
            if (i<13) cards[i] = new Card('s',i+2);
            else if (i<26) cards[i] = new Card('c',i-13+2);
            else if (i<39) cards[i] = new Card('d',i-26+2);
            else if (i<52) cards[i] = new Card('h',i-39+2);        
        }
        // shuffle deck
        Collections.shuffle(Arrays.asList(cards));
    }

    public Card drawCard() {
        ++index;
        cards[index].drawn();            
        return cards[index];
    }
}

class Card {

    private char suit;
    private int value;
    private boolean drawn = false;

    Card(char s, int v) {
        suit = s;
        value = v;
    }

    void drawn() { drawn = true; }

    boolean isDrawn() { return drawn; }
}
于 2013-02-24T02:15:19.210 回答
-1

您应该为此使用数组列表以使改组更容易。因为这是家庭作业,所以我不会给你确切的代码,但是,

ArrayList<Card> deck=new ArrayList<Card>();
        //add a loop with
        {
            Card card=new Card("initilize card here");
            deck.add(card);
        }

从长远来看,这应该可以帮助您入门并使其变得更容易。

于 2013-02-24T02:22:07.663 回答