Как предотвратить вход в цикл while, если выполняются определенные условия?

Поэтому я пишу класс, который играет в войну с карточной игрой. Я уже сделал отдельные классы для руки, колоды и различные методы, которые сочетаются с такими типами, как перетасовка, раздача и отбрасывание карт.

/*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 ****** wars
4) After all n games have been played, print the average number of turns, average number of wars, and the average number of ****** 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; 1="" i++)="" {="" game="" playing="" code="" goes="" here="" pile.shuffle();="" pile.deal(player1,="" player2);="" while(player1.size()="" !="0" &&="" player2.size()="" card="" card1="Player1.DropCard();" card2="Player2.DropCard();" p1warcard="Player1.WarCard(1);//Cards" used="" in="" the="" first="" war="" p2warcard="Player2.WarCard(1);" if="" statement="" saying="" player="" does="" not="" have="" two="" cards="" then="" exit="" program="" second="" p1dubwarcard="Player1.WarCard(2);" p2dubwarcard="Player2.WarCard(2);" has="" a="" higher="" rank,="" then...="" (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 ****** wars was " +dubwars/n);

}



}
</n;>

Мой вопрос: как я могу предотвратить вступление в двойную войну, если для завершения двойной войны недостаточно карт? В то время в колоде должно быть не менее трех карт.

Также метод war card просто возвращает карту в этом положении в колоде.

Это мой первый пост, поэтому я прошу прощения, если я сделал что-то не так.

благодаря

Крис

2 ответа

Вы всегда можете использовать boolean для определения того, работает ли игра или нет, а затем в начале цикла while проверять, должно ли оно все еще быть установлено true, например:

boolean isPlaying = true;

while (isPlaying) {
 if (numberOfCardsLeft <= cardsNeededToContinue) {
 isPlaying = false;
 }
 //rest of logic here
 }


Вы уже прекращаете вступление в двойную войну, если у любого игрока меньше карт

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

С сайта вверху вашего кода "Если у вас недостаточно карт для завершения войны, вы проиграете". так как никогда не будет, чтобы ни у игроков, ни у 3 карт. Вы можете определить победителя здесь.

licensed under cc by-sa 3.0 with attribution.