Wie kann der Eintritt in eine while-Schleife verhindert werden, wenn bestimmte Bedingungen erfüllt sind?

  • Ich schreibe also eine Klasse, die den Kartenspielkrieg spielt. Ich habe bereits separate Klassen für die Hand, das Deck und die verschiedenen Methoden, die mit diesen Typen einhergehen, wie das Mischen, Austeilen und Ablegen der Karten, erstellt.

     /*Using the Card, Deck, and Hand classes from the previous lab, write a main program          that will play games of war.  The program should
    
    1) Inatantiate a Deck and two Hands
    
    2) Read in n, the number of games of war to play
    
    3) n times, 
      a) shuffle and deal the deck 
      b) play a game of war, counting the number of turns, the number of wars, and the   number of double wars
    4) After all n games have been played, print the average number of turns, average number of wars, and the average number of double wars.
    
    The rules for the game can be found here:
     http://www.pagat.com/war/war.html
    
    If a player runs out of cards during a war, use option 1 on that site.
    
    */
    
    
    
    import java.util.Scanner;
    
    public class War {
    public static void main (String args [])
    {
    
        //Instantiate Deck and two hands
        deck Pile = new deck();
        hand Player1 = new hand();
        hand Player2 = new hand();
        Scanner kb = new Scanner (System.in);
        int n, turns = 0, wars = 0, dubwars = 0;
        System.out.println("Please enter the number of times you would like the game   'war' to be played:");
        n = kb.nextInt();
        for (int i = 0; i<n; i++)
        {
            //Game playing code goes here
            Pile.shuffle();
            Pile.deal(Player1, Player2);
    
            while(Player1.size() != 0 && Player2.size() !=0)
            {
    
                Card Card1 = Player1.DropCard();
                Card Card2 = Player2.DropCard();
                Card P1WarCard = Player1.WarCard(1);//Cards Used in the   First War
                Card P2WarCard = Player2.WarCard(1);
                //if statement saying if the player does not have two cards then exit the program
                //Cards Used in the Second War
                Card P1DubWarCard = Player1.WarCard(2);  
                Card P2DubWarCard = Player2.WarCard(2);
    
    
    
            //If player 1 has a higher rank, then...
            if (Card1.rank > Card2.rank)
            {
                //Player 1 takes both cards
                Player1.add(Card1);
                Player1.add(Card2);
                turns ++;
            }
            else if (Card1.rank < Card2.rank)
            {
                //Player 2 takes both cards
                Player2.add(Card2);
                Player2.add(Card1);
                turns++;
            }
            else 
            {
                if (Player1.size() <3 || Player2.size() <3)
                {
                    System.exit(0);
                }
                //War
                wars ++;
                turns++;
            //  while (Player1.size() >=2 && Player2.size() >=2)
                {
                if (P1WarCard.rank > P2WarCard.rank)
                {
                    //Player1.add(Card1);
                    Player1.add(Card2);
                    //Player1.add(P1WarCard);
                    Player1.add(P2WarCard);
                    //Player 1 takes 4 cards
                }
                else if (P1WarCard.rank < P2WarCard.rank)
                {
                    //Player2.add(Card2);
                    Player2.add(Card1);
                    Player2.add(P1WarCard);
                    //Player2.add(P2WarCard);
                    //Player 2 takes 4 cards
                }
                else
                {
                    if (Player1.size() <3 || Player2.size() <3)
                    {
                        System.exit(0);
                    }
                    //Dubwar
                    dubwars++;
                    turns++;
                    //while (Player1.size() >=3 && Player2.size() >=3)
                    {
    
    
                    if (P1DubWarCard.rank > P2DubWarCard.rank)
                    {
                        //Player1.add(Card1);
                        Player1.add(Card2);
                        //Player1.add(P1WarCard);
                        Player1.add(P2WarCard);
                        //Player1.add(P1DubWarCard);
                        Player1.add(P2DubWarCard);
                        //Player 1 takes 6 cards
                    }
                    else if (P1DubWarCard.rank < P2DubWarCard.rank)
                    {
                        //Player2.add(Card2);
                        Player2.add(Card1);
                        Player2.add(P1WarCard);
                        //Player2.add(P2WarCard);
                        Player2.add(P1DubWarCard);
                        //Player2.add(P2DubWarCard);
                        //Player 2 takes 6 cards
                    }
                    else
                    {
                        System.out.println("NUCLEAR WAR");
                        break;
                    }
                }
    
            }
        }
    }
            }
        }
    
    
    
    System.out.println("The average number of turns was " +turns/n);
    System.out.println("The average number of wars was " +wars/n);
    System.out.println("The average number of double wars was " +dubwars/n);
    
    }
    
    
    
    }
     

    Meine Frage ist, wie ich den Eintritt in einen doppelten Krieg verhindern kann, wenn nicht genug Karten vorhanden sind, um die doppelter Krieg? Es müssen sich zu diesem Zeitpunkt mindestens drei Karten im Stapel befinden.

    Auch die Kriegskartenmethode gibt die Karte einfach an dieser Position im Stapel zurück.

    Dies ist mein erster Eintrag. Ich entschuldige mich, wenn ich etwas falsch gemacht habe.

    Danke

    Chris

    22 November 2011
    Andrew Rasmussen
2 answers
  • Sie können immer ein boolean verwenden, um festzustellen, ob das Spiel läuft oder nicht, und dann zu Beginn Ihrer While-Schleife prüfen, ob es noch auf true gesetzt sein sollte, beispielsweise:

     boolean isPlaying = true;
    
    while (isPlaying) {
      if (numberOfCardsLeft <= cardsNeededToContinue) {
         isPlaying = false;
      }
      //rest of logic here
     }
     
    22 November 2011
    Deco
  • Sie stoppen bereits den Eintritt in einen Doppelkrieg, wenn einer der Spieler weniger Karten hat

         if (Player1.size() <3 || Player2.size() <3)
        {
            System.exit(0);
        }
     

    Von der Website oben in Ihrem Code "Wenn Sie nicht genug Karten haben, um den Krieg zu beenden, verlieren Sie." da es niemals der Fall sein wird, dass keiner der Spieler & lt; 3 Karten Sie können den Gewinner hier ermitteln.

    22 November 2011
    Adam