4

これはスタック オーバーフローに関する私の最初の質問です。質問に初歩的な間違いがあった場合はご容赦ください。今後数か月間、このサイトをさらに使用する予定なので、お気軽に訂正してください。

とにかく、私は高校の 12 年生で、宿題の質問の 1 つに行き詰まっています。基本的に、私たちは戦争ゲーム (カード ゲーム) を作成するプロジェクトを与えられ、それを毎日少しずつ行うように求められています。これまでのところ、今日まですべてが順調に進んでいるので、皆さんに質問します。

プロジェクトの内容は次のとおりです。

カード

  • それが持っているもの:
    • Private int value: カードの値
    • プライベート チャー スート: カードのスート
    • 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[] suit = { 'c', 'd', 'h', 's'}: スーツの表現
    • Public int numCards: デッキ内のカードの数 (伝統的に 52 – テストのためにこれを低くしてください!)
    • Private Card[] デッキ: カードの配列として格納されたデッキ

この時点までのすべてを完了しました。

  • 機能:
    • Public Deck(): カードのデッキを作成します – 値は 2 ~ 14 の範囲で、各スートに 1 つずつ
    • 公開カード drawCard(): デッキからまだ引かれていないカードをランダムに引きます
    • Public String toString(): テスト目的で必要に応じて設計します

以下のQuynh氏の助けを借りて公開デッキのステップを完了しましたが、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 に答える