2016-05-06 21 views
0

私はJavaで新しいカードゲームを実装しようとしています。 。デッキは、13個のオレンジ色のカード、13個の白いカード、13個の黒色のカード、13個の青色のカード、13個のグレーカード、13個の紫色のカード、および12個のジョリーからなる90個のカードからなる。これらのカードはすべて「政治カード」と呼ばれます。"奇妙な"デッキから無作為のカードを選ぶ(Java)

私は7つの要素の配列としてデッキを表現したいと思います:

public class PoliticalDeck { 
    private PoliticalCard[] deck; 

    public PoliticalDeck() { 
     deck = new PoliticalCard[7]; 
    } 

    //estrai una carta a caso 
    public void pickRandomCard() { 

    } 
} 

は、これは正しいだろうか?カードピッキング方法はどのように実装できますか?

+0

なぜデッキを7個に分割したいですか?あなたはそれがカードの「色」を知る必要はありません。それはPoliticalCard(その定義はあなたが共有していなかった)の一部でなければなりません。 –

+0

デッキは90枚のカード、または7枚のカードで構成されていますか? –

+1

あなたのカードクラスはどのように見えますか?それは、 "カードである"ことを意味するものをカプセル化する必要があります。カードは黒、青、灰色、紫色、または「愉快」であり、値は(1〜13)と仮定します。これらのカードオブジェクトを90個作成し(ループを使用して)、配列に配置します。ランダムに選択するには、配列をシャッフルして最初のカードを返すことができます。 – trooper

答えて

1

、リストまたはのDeque(両端キュー)にカードを入れてフィッシャーイエーツシャッフルでそれらをシャッフルして、コレクションからそれらを除去することによって、それらを扱う:

public enum Suit { 
    ORANGE, WHITE, BLACK, BLUE, GREY, PURPLE, JOLLY; 
} 

カード:

public class Card { 
    private final Suit suit; 
    private final int value; 

    public Card(Suit suit, int value) { 
     this.suit = suit; 
     this.value = value; 
    } 

    public Suit getSuit() { return suit; } 
    public int getValue() { return value; } 
    @Override public String toString() { return value + " of " + suit; } 
} 

デッキ:

import java.util.Collections; 
import java.util.Deque; 
import java.util.LinkedList; 

public class Deck { 
    private Deque<Card> deck; 

    public Deck() { 
     LinkedList<Card> cards = new LinkedList<>(); 
     for (Suit suit : Suit.values()) { 
      int limit = suit == Suit.JOLLY? 12 : 13; 
      for (int value = 1; value <= limit; ++value) { 
       cards.add(new Card(suit, value)); 
      } 
     } 
     Collections.shuffle(cards); 
     deck = cards; 
    } 

    public boolean isEmpty() { return deck.isEmpty(); } 
    public int remaining() { return deck.size(); } 
    public Card deal() { return deck.remove(); } 
} 

これは多くの特徴を残し、あなたのGAMのためにお勧めします例えば、カードを1枚1枚ずつ扱う代わりに、nカードのカードを手渡したり、デッキを改造したり(これをシャッフルしたり、新しいデッキを作成するなど)、「捨てる」パイルのコンセプトあなたのゲームがそれを持っているかどうかを知る)、equalshashCodeの方法をCardにしてください。 CardComparable<Card>を実装することもできます。それらは読者のための練習として残されています。