2011-11-21 48 views
0

所以我正在写一个玩纸牌游戏的战争。我已经为手牌,牌组以及与这些类型一起进行的不同方法(如洗牌,交易和丢弃牌)进行了单独的分类。如何在特定条件满足时防止进入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 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); 

} 



} 

我的问题是,如果没有足够的卡来完成双重战争,我该如何防止进入双重战争?当时甲板上至少有三张牌。

此外,战争卡方法只是在甲板上的该位置返回卡。

这是我第一次发布,所以我道歉,如果我做错了什么。

感谢

克里斯

+1

看到“从以前的实验室”和评论顶部后,我认为这是作业,并将该标签添加到您的帖子。今后,请务必声明,如果你是在做家庭作业! .....或隐藏证据;) –

+0

Java不是我的语言,所以不把它作为答案,但我想你可以进入循环,检查那里的条件,并打破它是否满足 –

+1

@Chris Michel:你有Java命名约定向后。 *“甲板桩=新甲板()”*应该读*“甲板堆=新甲板()”*:) – TacticalCoder

回答

1

您可以随时使用boolean来决定游戏是否正在运行与否,然后在while循环开始时检查其是否仍应被设置为true ,例如:

boolean isPlaying = true; 

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

正是我所需要的......现在如何解决这些其他错误.... – ironcyclone

0

您已经停止进入双战如果任何球员有少卡

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

从代码顶部的网站“如果你没有足够的卡来完成战争,你就输了。”因为这两个玩家都不会有3张牌。你可以在这里确定胜利者。

+0

是的,但我仍然得到一个错误,说没有足够的卡来完成代码。这几乎是一个无用的循环,我认为。 – ironcyclone

相关问题