Programme Java - La GUERRE des Jeux de Cartes


Ceci est une affectation de classe, je ne demande à personne de FAIRE la tâche pour moi, mais j'ai plutôt essayé de faire de mon mieux avant de poster ici dans l'espoir de recevoir de l'aide sur mes 4 erreurs que je reçois et que mon deck n'est pas mélangé pour une raison quelconque.

Mes instructions d'affectation:

Pour cette mission, vous allez créer un programme qui joue un simple jeu de guerre. Dans ce jeu, chaque joueur reçoit une carte de la plate-forme complète. Celui qui a la carte avec la valeur la plus élevée gagne. Si les cartes ont la même valeur, alors c'est une cravate et aucun joueur ne gagne. Le joueur qui gagne le plus de tours gagne la partie. Il n'y a pas d'entrée requise des joueurs (pas très intéressant!). Vous devez imprimer les cartes que chaque joueur traité et le résultat de ce tour et le résultat final du jeu. Vous pouvez utiliser l'entrée utilisateur pour implémenter un délai entre chaque tour.

Ma classe de carte:

public class Card {

    private int cardNum;
    final static String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
    final static String[] ranks = {"2", "3","4","5","6","7","8", "9","10", "Jack", "Queen", "King", "Ace"};

    Card (int theCard) {
        setCardNum (theCard);
    }

    public void setCardNum (int theCard) {
        cardNum = (theCard >= 0 && theCard <= 51)? theCard: 0;
    }

    public int getCardNum() {
        return cardNum;
    }

    public String toString() {
        return ranks[cardNum%13] + " of " + suits[cardNum/13];
    }

    public String getSuit() {
        return suits[cardNum/13];
    }

    public String getRank() {
        return ranks[cardNum%13];
    }

    public int getValue() {
        return cardNum%13;
    } 
}

Ma classe de Deck (où j'ai un erreur de mélange):

public class Deck {

    private Card[] deck = new Card[52];
    private int topCard;

    Deck() {

        topCard = 0;

        for (int i = 0; i < deck.length; i++)
            deck[i] = new Card(i);

    }

    public void shuffle() {

        topCard = 0;

        for (int i = 0; i < 1000; i++) {
            int j = (int)(Math.random()*52);
            int k = (int)(Math.random()*52);
            Card tmpCard = deck[j];
            deck[j] = deck[k];
            deck[k] = tmpCard;
        } 
   }

    public Card dealCard() {
        Card theCard;
        if (topCard < deck.length) {
            theCard = deck[topCard];
            topCard++;
        }
        else
            theCard = null;

        return theCard;
    }
}

Programme principal de mon jeu de guerre:

import java.util.Scanner;

public class WarGame {

    public static void main(String[] args) {

        Card[][] hands = new Card[2][1];
        Deck myDeck = new Deck();

        for (int i = 0; i < 53; i++) {
            System.out.printf("\n Round %s of The War \n", i);

            for (int c = 0; c < 1; c++)
                for (int player = 0; player < hands.length; player++)
                    hands[player][c] = myDeck.dealCard();

            for (int player = 0; player < hands.length; player++) {
                System.out.printf("Player %d: ", player);
                printHand(hands[player]);

                int player1;
                int player2;

                if (player1.getValue() > player2.getValue())
                    System.out.println("Player One Wins The War");
                else if (player2.getValue() > player1.getValue())
                    System.out.println("Player Two Wins The War");
                else
                    System.out.println("The War Is A Tie");

            } 
        }
    }

    public static void printHand(Card[] hand) {

        for (int card = 0; card < hand.length; card++)
            System.out.printf("%s", hand[card].toString());

        System.out.println();

    } 
}

Mes Erreurs Sont Les Suivantes:

----jGRASP exec: javac -g WarGame.java

WarGame.java:31: error: int cannot be dereferenced
if (player1.getValue() > player2.getValue())
       ^
WarGame.java:31: error: int cannot be dereferenced
if (player1.getValue() > player2.getValue())
                            ^
WarGame.java:35: error: int cannot be dereferenced
else if (player2.getValue() > player1.getValue())
            ^
WarGame.java:35: error: int cannot be dereferenced
else if (player2.getValue() > player1.getValue())
                                 ^
4 errors

----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.

Merci beaucoup pour toute aide qui peut être offerte.

Player1 et player2 se réfèrent aux cartes que chaque joueur reçoit à chaque tour

Author: user2157845, 2013-03-11

5 answers

Joueur1 et joueur2 sont ints et pas des Entiers (qui est une Classe Java). Cela signifie qu'ils ne sont pas des objets et n'ont pas de méthodes dessus. Vous pouvez les comparer directement comme" Sam Je suis " dit.

Vous pouvez également les convertir en Entiers:

if( (new Integer(player1)).compareTo(new Integer(player2)) > 0 ) 

, Mais c'est assez inutile car la comparaison que vous faites n'a pas besoin de les entiers.

Il suffit donc d'utiliser:

if (player1 > player2)

Vous pouvez lire cette rubrique pour en savoir plus sur l'autoboxing de Entier.

 2
Author: Hugo Dozois, 2017-05-23 12:24:25
// import needed classes and packages
import java.util.Scanner;
import java.text.NumberFormat;
import java.io.IOException;
import java.util.Locale;
import java.text.DecimalFormat;

public class Program2
{public static void main(String[] args) throws IOException
    {
    //Declare Variables
    //Creates the cards based on their suite
    Card heartCard;
    Card diamondCard;
    Card spadeCard;
    Card clubCard;
    int countingPlays = 0;


    Scanner keyboard = new Scanner(System.in); //Allows Input

    //creates the cardPile array called DeckOfCards
    CardPile deckOfCards = new CardPile();

    //Creates Player1's Card Pile
    CardPile player1Pile = new CardPile();

    //Creates Player2's Card Pile
    CardPile player2Pile = new CardPile();

    //Creates the cards to fill the array (1-14 of hearts/diamonds/spades/clubs).
    for(int i = 2; i < 15; i++)
    {
        char heart = '\u0003';
        char diamond ='\u0004';
        char spade = '\u0005';
        char club = '\u0006';

        deckOfCards.add(heartCard = new Card(heart, i));
        deckOfCards.add(diamondCard = new Card(diamond, i));
        deckOfCards.add(spadeCard = new Card(spade, i));
        deckOfCards.add(clubCard = new Card(club, i));
    }

    //prints out the deck of Cards
    System.out.println("Deck Of Cards: " + deckOfCards);

    //shuffles the cards
    deckOfCards.shuffle();

    //Prints out the deck of cards after they are shuffled
    System.out.println("Deck of Cards after shuffled: " + deckOfCards);

    //Checking the size of the Deck
    System.out.println("" + deckOfCards.size());

    //Takes the deckOfCards and splits them up into 2 piles for Player1 and Player2
    for(int i = 0; i < 26; i++)
    {
        player1Pile.add(deckOfCards.getTopCard());
        player2Pile.add(deckOfCards.getTopCard());
    }

    //Prints out the deck of Cards and then the player 1's pile and player 2's pile

    System.out.println("Player 1's Cards: " + player1Pile);
    System.out.println("Player 2's Cards: " + player2Pile);

    //checking the size of each players Pile


    //Prints the header for the game
    System.out.println("Lets have a war!!!");


    //Testing tricky spot where the getTopCard removes a the topcard
    /*
    Card removedTopCard = player1Pile.getTopCard();
    System.out.println("Getting player1Pile: " + removedTopCard);
    player1Pile.add(removedTopCard);
    System.out.println("Player1Pile is " + player1Pile);
    System.out.println("Player1Pile size is " +player1Pile.size());
    */

    //Starts the game of War
    try
    {   //do while the sizes of the player piles are greater than 0.
        do
        {
            //gets the top cards of each players Pile
            Card player1RemovedTopCard = player1Pile.getTopCard();
            Card player2RemovedTopCard = player2Pile.getTopCard();

            //Compares the 2 cards to test which is bigger. If player 1's card is smaller than player 2 is the winner
            if(player1RemovedTopCard.compareTo(player2RemovedTopCard) < player2RemovedTopCard.compareTo(player1RemovedTopCard))
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("Player 2 is the Winner");
                player2Pile.add(player1RemovedTopCard);
                player2Pile.add(player2RemovedTopCard);
                System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                System.out.println("Player 2 has:" + player2Pile.size() + " cards left.");
                System.out.println("\n");
                keyboard.nextLine();
            }
            //Compares the 2 cards to test which is bigger. If player 2's card is smaller than player 1 is the winner.
            else if(player1RemovedTopCard.compareTo(player2RemovedTopCard) > player2RemovedTopCard.compareTo(player1RemovedTopCard))
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("Player 1 is the Winner");
                player1Pile.add(player1RemovedTopCard);
                player1Pile.add(player2RemovedTopCard);
                System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                System.out.println("Player 2 has:" + player2Pile.size() + " cards left.");
                System.out.println("\n");
                keyboard.nextLine();
            }
            //Else it is a war
            else
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("WAR!!!!!!!");
                //War if the player has only 4 cards left.
                if(player1Pile.size() == 1 || player2Pile.size() == 1)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    System.out.println("Player1's 2nd card is: " + player1RemovedTopCard2 + " Player2's 2nd card is: " + player2RemovedTopCard2);
                    if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) > player2RemovedTopCard2.compareTo(player1RemovedTopCard2))
                    {
                        System.out.println("Player 1 is the winner of the War! ");
                        player1Pile.add(player1RemovedTopCard);
                        player1Pile.add(player1RemovedTopCard2);
                        player1Pile.add(player2RemovedTopCard);
                        player1Pile.add(player2RemovedTopCard2);
                        System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                        System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                        System.out.println("\n");
                        keyboard.nextLine();
                    }
                    else if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) < player2RemovedTopCard2.compareTo(player1RemovedTopCard2))
                    {
                        System.out.println("Player 2 is the winner of the War! ");
                        player2Pile.add(player1RemovedTopCard);
                        player2Pile.add(player1RemovedTopCard2);
                        player2Pile.add(player2RemovedTopCard);
                        player2Pile.add(player2RemovedTopCard2);
                        System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                        System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                        System.out.println("\n");
                        keyboard.nextLine();
                    }
                    else
                    {
                        if(player2Pile.size() == 0)
                        {
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard);
                        }
                        else
                        {
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard);
                        }
                    }
                }
                //War if the player has only 2 cards left.
                else if(player1Pile.size() == 2 || player2Pile.size() == 2)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();

                    do
                    {
                        System.out.println("Player1's 3rd card is: " + player1RemovedTopCard3 + " Player2's 3rd card is: " + player2RemovedTopCard3);
                        if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) > player2RemovedTopCard3.compareTo(player1RemovedTopCard3))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) < player2RemovedTopCard3.compareTo(player1RemovedTopCard3))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) == player2RemovedTopCard3.compareTo(player1RemovedTopCard3));
                }
                //War if the player has only 3 cards left.
                else if(player1Pile.size() == 3 || player2Pile.size() == 3)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();
                    Card player1RemovedTopCard4 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();
                    Card player2RemovedTopCard4 = player2Pile.getTopCard();

                    do
                    {
                        System.out.println("Player1's fourth card is: " + player1RemovedTopCard4 + " Player2's fourth card is: " + player2RemovedTopCard4);
                        if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) > player2RemovedTopCard4.compareTo(player1RemovedTopCard4))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player1RemovedTopCard4);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard4);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) < player2RemovedTopCard4.compareTo(player1RemovedTopCard4))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player1RemovedTopCard4);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard4);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) == player2RemovedTopCard4.compareTo(player1RemovedTopCard4));
                }
                //war if player has more than 4 cards
                else if(player1Pile.size() >= 4 || player2Pile.size() >= 4)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();
                    Card player1RemovedTopCard4 = player1Pile.getTopCard();
                    Card player1RemovedTopCard5 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();
                    Card player2RemovedTopCard4 = player2Pile.getTopCard();
                    Card player2RemovedTopCard5 = player2Pile.getTopCard();
                    do
                    {
                        System.out.println("Player1's 5th card is: " + player1RemovedTopCard5 + " Player2's 5th card is: " + player2RemovedTopCard5);
                        if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) > player2RemovedTopCard5.compareTo(player1RemovedTopCard5))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player1RemovedTopCard4);
                            player1Pile.add(player1RemovedTopCard5);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard4);
                            player1Pile.add(player2RemovedTopCard5);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) < player2RemovedTopCard5.compareTo(player1RemovedTopCard5))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player1RemovedTopCard4);
                            player2Pile.add(player1RemovedTopCard5);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard4);
                            player2Pile.add(player1RemovedTopCard5);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) == player2RemovedTopCard5.compareTo(player1RemovedTopCard5));
                }
            }
            //Adds to the plays that keep track of how many plays have been made
            countingPlays++;
            //. If there are 10 plays it shuffles and prints out a message that the cards have been shuffled.
            if(countingPlays >= 10)
            {
                player1Pile.shuffle();
                player2Pile.shuffle();
                System.out.println("Cards Shuffled");
                //resets the counter to 0
                countingPlays = 0;
            }
        //Continues the game of war while the players piles are bigger than 0
        }while(player1Pile.size() > 0 || player2Pile.size() > 0);
    }

    //Catches the Array 0 error and prints out who is the winner based on who has zero cards.
    catch (IndexOutOfBoundsException theException)  //tries to catch this type...
        {
            if(player1Pile.size() == 0)
            {
                System.out.println("Winner is Player 2" );
            }
            else
            System.out.println("Winner is Player 1" );

        }

    } //end of main
}//end of class
 1
Author: Arun Kumar, 2017-07-25 22:00:17

Je devine à moitié, mais je ne pense pas que vous ayez besoin d'appeler getValue() sur votre ints

Une déclaration comme

if (player1 > player2)

Est parfaitement correct, en supposant que player1 et player2 sont tous deux des ints

 0
Author: Sam I am, 2013-03-11 17:49:10

Vous devez obtenir la valeur des objets de la carte dans hands. Vous n'attribuez actuellement rien à player1 et player2. Pour obtenir la valeur de vos cartes, vous devez appeler .getValue() sur des objets réels, comme int player1 = hands[0][0].getValue();

J'ai mis à jour votre fonction main pour montrer à quoi elle devrait ressembler, et j'ai également apporté quelques autres modifications qui pourraient vous aider plus tard.

public static void main(String[] args) {

    Card[][] hands = new Card[2][1];
    Deck myDeck = new Deck();

    //reduced this to 26 iterations because two cards are dealt each iteration
    for (int i = 0; i < 26; i++) {
        System.out.printf("\n Round %s of The War \n", i);

        //You really don't need to loop just once here...
        //Simply assign the card to hands[player][0] since that's the only option
        //for (int c = 0; c < 1; c++)
            for (int player = 0; player < hands.length; player++)
                hands[player][0] = myDeck.dealCard();

        for (int player = 0; player < hands.length; player++) {
            System.out.printf("Player %d: ", player);
            printHand(hands[player]);
        }

        int player1 = hands[0][0].getValue(); //get the value from the Card object
        int player2 = hands[1][0].getValue();

        if (player1 > player2)
            System.out.println("Player One Wins The War");
        else if (player2 > player1)
            System.out.println("Player Two Wins The War");
        else
            System.out.println("The War Is A Tie");

    }
}
 0
Author: jonhopkins, 2013-03-11 19:25:00

Pour la méthode shuffle, vous pouvez utiliser ce code:

public void shuffle()
{
    Collections.shuffle(deck);
}
 0
Author: JMills94, 2018-07-30 23:37:06