1. ホーム
  2. java

[解決済み] Javaでカードゲーム。"手札 "の作成

2022-02-19 09:34:11

質問内容

これは宿題ではなく、完全なJavaプログラムをより理解するためにJavaで取り組んでいるペットプロジェクトであり、うまくいけば自分自身のGUIを作る最初の試みになることを最初に言っておきたいと思います。

それはさておき、現在のコードからカードの手札を作ることについて質問です。現状では、メインクラスとして DummyRummy カードを作成するクラス、標準的なデッキを作成するクラス(ジョーカーを含み、新しいデッキを作成するときにデッキをシャッフルします)、および PlayerHands クラスがあります。私は厳密には ArrayList は、すべてのコードで PlayersHands クラスは2つの ArrayList が使用されます。しかし PlayerHands() メソッドを public static void main() , PlayerHands がなぜか配置できない...。以下は、そのコードです。 PlayerHands :

package dummyrummy;
public class PlayerHands {
    private Card[] playerOneCards;
    private Card[] playerTwoCards;
    private int[] value;

    PlayerHands(deck d, int round)
    {
        value = new int[round+3];
        playerOneCards = new Card[round+2];
        playerTwoCards = new Card[round+2];
               //(round+2) is the handsize at any given time
        for (int x=0; x<round+3; x++)
        {
        playerOneCards[x] = d.drawFromDeck(); //fills up one hand.
        playerTwoCards[x] = d.drawFromDeck(); //fills up second hand.
        }
    }
}

以下は DummyRummy クラスがあります。

package dummyrummy;
import java.util.*;
public class DummyRummy {
    public static void main(String[] args) {
        deck testDeck;
        testDeck = new deck();

        System.out.println(testDeck.getTotalCards());
        System.out.println(testDeck.getClass());
        int round = 1;
        PlayerHands(testDeck, round); //This is where the error is occurring        
        }//End of arguments
    }//End of DummyRummy class

以下は Card クラスがあります。

package dummyrummy;
public class Card
{
    private short rank, suit;
    private static String[] suits = { "Hearts", "Spades", "Diamonds", "Clubs", "Joker"    };
    private static String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
    private static String[] jokers = {"Joker", "Joker"};
    private static String[] ranks2 = {"0", "0"};
    public static String rankAsString( int __rank ) {
        if (__rank != 0){
            return ranks[__rank];
        }//End of if statement
        return ranks2[__rank];
    }//End of rankAsString class

    Card(short suit, short rank)
    {
        this.rank=rank;
        this.suit=suit;    
    }//End of Card Initializer

    public @Override String toString()
    {
        if(suit == 5){
            return "Joker";
        }//End of if statement that calls jokers
        if(rank == 0){
            return "Joker";
        }
        return ranks[rank] + " of " + suits[suit];              
    }//End of toString method

    public short getRank() {
         return rank;
    }//End of getRank method

    public short getSuit() {
        return suit;
    }//End of getSuit method
}//End of Card

そして最後に、ここで deck() クラスがあります。

package dummyrummy;
import java.util.Random;
import java.util.ArrayList;

public class deck {
    private ArrayList<Card> cards;
    deck()
    {
        cards = new ArrayList<Card>();
        int index_1, index_2;
        Random generator = new Random();
        Card temp;

       short jokerSuit=5;
       short jokerRank = 0;
           cards.add(new Card(jokerSuit, jokerRank));
           cards.add(new Card(jokerSuit,jokerRank));
        for (short suit=0; suit<=3; suit++)
        {
             for (short rank=0; rank<=12; rank++)
             {
                  cards.add(new Card(suit,rank));
             }
        }//End of for-loop       
        int deckSize = 54;             
        for (int i=0; i<1000; i++)
        {
            index_1 = generator.nextInt( cards.size() );
            index_2 = generator.nextInt( cards.size() );
            temp = cards.get( index_2 );                    
            cards.set( index_2 , cards.get( index_1 ) );
            cards.set( index_1, temp );
        }//End of for-loop
    }//End of deck()
    public Card drawFromDeck()
    {
    /*
     * This method removes the top card of the already shuffled deck.          
     * The next step to take with this class is put the drawn card into another
     *     array that represents a players hand.  
     * This will take two arrays, and must be called depending on what player   'drawsFromDeck'.
     */        
        return cards.remove( 0 );
    }//End of drawFromDeck()
    public int getTotalCards()
    {
        return cards.size();   
    }//End of getTotalCards()
}//End of class deck

お忙しい中、ありがとうございました。また、必要であれば、私の他のコードも提供させていただければ幸いです。

EDITです。 上記のクラスとパッケージを追加しました。

解決方法は?

PlayerHands(deck, int) はコンストラクタです。したがって、次のように呼び出す必要があります (クラス内の DummyRummy ):

new PlayerHands(testDeck, round);

そして、作成したインスタンスで作業したいのでしょうから、その参照を変数に保存しておくとよいでしょう。

PlayerHands playerHands = new PlayerHands(testDeck, round);