我正在制作计算机播放两个球员的岩石,纸张,剪刀,蜥蜴,Spock程序。我试图让游戏停止,当player1或player2连续赢得四次时。岩石剪刀蜥蜴Spock - 虽然循环问题
我试过这个使用while循环,但它似乎没有评估while循环的条件,因为游戏永远不会结束,当我运行它。为了看看发生了什么,我在每轮之后打印出consecutiveWins
的号码,并且实际上保持了胜利的计数,
问题是,它只是在它达到4或-4。
任何人都可以看到为什么会发生这种情况?
输出:
Player 1 chooses Spock.
Player 2 chooses scissors.
Spock melts scissors.
Player 1 wins.
-5706
Player 1 chooses lizard.
Player 2 chooses rock.
Rock crushes lizard.
Player 2 wins.
-5705
Player 1 chooses paper.
Player 2 chooses rock.
Paper covers rock.
Player 1 wins.
-5706
这里是我的代码:
public class RockPaperScissorsLizardSpock {
private int lastWinner = 0;
public static final int ROCK = 1;
public static final int PAPER = 2;
public static final int SCISSORS = 3;
public static final int LIZARD = 4;
public static final int SPOCK = 5;
public static final int PLAYER1 = 1;
public static final int PLAYER2 = 2;
public void play(int player1, int player2) {
int consecutiveWins =0;
while ((consecutiveWins < 4) || (consecutiveWins > -4)) {
String play1;
String play2;
player1 = random();
player2 = random();
play1 = convert(player1);
play2 = convert(player2);
switch (play1) {
case "rock": // Player 1 chooses Rock
System.out.println("Player 1 chooses rock.");
if ("rock".equalsIgnoreCase(play2)) // Rock
{
System.out.println("Player 2 chooses rock.
\nTie.\n"+consecutiveWins);
} else if ("paper".equalsIgnoreCase(play2)) // Paper
{
System.out.println("Player 2 chooses paper.
\nPaper covers rock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("scissors".equalsIgnoreCase(play2)) // Scissors
{
System.out.println("Player 2 chooses scissors.
\nRock smashes scissors.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("lizard".equalsIgnoreCase(play2)) // Lizard
{
System.out.println("Player 2 chooses lizard.
\nRock crushes lizard.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("spock".equalsIgnoreCase(play2)) // Spock
{
System.out.println("Player 2 chooses Spock.
\nSpock vaporizes rock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
}
break;
case "paper": // Player 1 chooses paper
System.out.println("Player 1 chooses paper.");
if ("rock".equalsIgnoreCase(play2)) // Rock
{
System.out.println("Player 2 chooses rock.
\nPaper covers rock.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("paper".equalsIgnoreCase(play2)) // Paper
{
System.out.println("Player 2 chooses paper.
\nTie.\n"+consecutiveWins);
} else if ("scissors".equalsIgnoreCase(play2)) // Scissors
{
System.out.println("Player 2 chooses scissors.
\nScissors cut paper.\nPlayer 2 wins.\n" +consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("lizard".equalsIgnoreCase(play2)) // Lizard
{
System.out.println("Player 2 chooses lizard.
\nLizard eats paper.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("spock".equalsIgnoreCase(play2)) // Spock
{
System.out.println("Player 2 chooses Spock.
\nPaper disproves Spock.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
}
break;
case "scissors": // User chooses scissors
System.out.println("Player 1 chooses scissors.");
if ("rock".equalsIgnoreCase(play2)) // Rock
{
System.out.println("Player 2 chooses rock.
\nRock smashes scissors.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("paper".equalsIgnoreCase(play2)) // Paper
{
System.out.println("Player 2 chooses paper.
\nPaper covers rock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("scissors".equalsIgnoreCase(play2)) // Scissors
{
System.out.println("Player 2 chooses scissors.
\nTie.\n"+consecutiveWins);
} else if ("lizard".equalsIgnoreCase(play2)) // Lizard
{
System.out.println("Player 2 chooses lizard.
\nRock smashes lizard.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("spock".equalsIgnoreCase(play2)) // Spock
{
System.out.println("Player 2 chooses Spock.
\nSpock melts scissors.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
}
break;
case "lizard": // User chooses lizard
System.out.println("Player 1 chooses lizard.");
if ("rock".equalsIgnoreCase(play2)) // Rock
{
System.out.println("Player 2 chooses rock.
\nRock crushes lizard.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("paper".equalsIgnoreCase(play2)) // Paper
{
System.out.println("Player 2 chooses paper.
\nPaper covers rock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("scissors".equalsIgnoreCase(play2)) // Scissors
{
System.out.println("Player 2 chooses scissors.
\nRock smashes scissors.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("lizard".equalsIgnoreCase(play2)) // Lizard
{
System.out.println("Player 2 chooses lizard.
\nTie.\n"+consecutiveWins);
} else if ("spock".equalsIgnoreCase(play2)) // Spock
{
System.out.println("Player 2 chooses Spock.
\nLizard poisons Spock.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
}
break;
case "spock": // User chooses spock
System.out.println("Player 1 chooses Spock.");
if ("rock".equalsIgnoreCase(play2)) // Rock
{
System.out.println("Player 2 chooses rock.
\nSpock evaporates rock.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("paper".equalsIgnoreCase(play2)) // Paper
{
System.out.println("Player 2 chooses paper.
\nPaper disproves Spock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("scissors".equalsIgnoreCase(play2)) // Scissors
{
System.out.println("Player 2 chooses scissors.
\nSpock melts scissors.\nPlayer 1 wins.\n"+consecutiveWins);
consecutiveWins++;
} else if ("lizard".equalsIgnoreCase(play2)) // Lizard
{
System.out.println("Player 2 chooses lizard.
\nLizard poisons Spock.\nPlayer 2 wins.\n"+consecutiveWins);
consecutiveWins=(consecutiveWins-1);
} else if ("spock".equalsIgnoreCase(play2)) // Spock
{
System.out.println("Player 2 chooses Spock.
\nTie.\n"+consecutiveWins);
}
break;
default:
System.out.println("There was an error. Please try again.");
break;
}
}
}
public int random() {
int random = (int) (Math.random() * 5) + 1;
return random;
}
public int getLastWinner() {
return lastWinner;
}
// https://gist.github.com/vinothpandian/4216643#file-rpsls-in-java
public static String convert(int n) {
switch (n) {
case 1:
return "rock";
case 2:
return "paper";
case 3:
return "scissors";
case 4:
return "lizard";
case 5:
return "spock";
default:
return "Invalid choice";
}
}
}
你有一个逻辑问题''(连续的胜利<4)|| (连续赢> -4)'总是如此...... – Edward
谢谢@Edward我现在明白了! – Tiff