【发布时间】:2021-12-07 08:13:47
【问题描述】:
我正在尝试正确结束此游戏,但 do while 循环或我正在执行的操作导致游戏继续进行。如果有人有进一步的建议让我在任一得分达到 99 后结束这场比赛,我将不胜感激。我已经粘贴了这两个类的来源。我也是学生,请见谅。
类
package programming2;
import java.util.Random;
import java.util.Scanner;
public class Matador {
public static void main(String[] args) {
/*The game is played between the player and the computer.
The player's score and the computer's score each begin at 0.
The object of the game is to be the first reach 99 points.
The player and the computer take turns. On each turn: */
Scanner scnr = new Scanner(System.in);
Die matador = new Die();
int playerScore = 0;
int computerScore = 0;
int playerPick = 0;
int cpu;
int turn;
Random randGen = new Random();
cpu = randGen.nextInt(6) + 2;
int cpuPick = 0;
int quit = 0;
System.out.println("Welcome to el Matador!");
System.out.println("The winner of this game is the first to score 99 points");
do {System.out.println("Player 1 please pick your number"); // start of master loop
playerPick = scnr.nextInt();
System.out.println("Player 1 you selected " + playerPick);
System.out.println("Player 2 please pick your number");
cpuPick = cpu;
System.out.println("Player 2 selects " + cpuPick);
//
do { // start of game loop - master do loop player 1
if (computerScore > 98) {
quit = 1;
break;
}
System.out.println("Player 1 rolls dice");
matador.rollDieNow();
System.out.println("Values for 1st dice is: " + matador.getValueDie1() + " and " + matador.getValueDie2());
System.out.println("Combined values are " + matador.getValue());
turn = 0; // start of loop marker for player 1
if (matador.getValueDie1() == 1 && matador.getValueDie2() == 1) {
playerScore = playerScore + -25;
break;
}
if (matador.getValueDie1() == 1 || matador.getValueDie2() == 1) {
playerScore = playerScore + 0;
System.out.println("Changing Turns!");
break;
}
if (matador.getValueDie1() != 1 || matador.getValueDie2() != 1) { // sum of dicevalue added to score
playerScore = playerScore + matador.getValue();
}
if (playerPick == matador.getValueDie1() || playerPick == matador.getValueDie2()) { // if picked number appears on at least 1
turn = turn + 1;
}
if (playerPick == matador.getValueDie1() && playerPick == matador.getValueDie2()) { // if picked number appears on both dice
System.out.println("You are the winner player 1 you matched your numbers!!");
System.out.print("Player 1 final score is: " + playerScore + " |-| player 2 final score is " + computerScore);
quit = 1;
break;
}
System.out.println("Player 1 Score: " + playerScore);
}
while (turn < turn + 1 || quit != 1);
// turn changes and also end of loop marker
System.out.println("Score update! Player 1 score is: " + playerScore + " |-| player 2 score is " + computerScore);
turn = 0; // turn counter resets
do { // start of computer player's turn
if (playerScore > 98) {
quit = 1;
break;
}
System.out.println("Player 2 rolls dice");
matador.rollDieNow();
System.out.println("Values for 1st dice is: " + matador.getValueDie1() + " and " + matador.getValueDie2());
System.out.println("Combined values are " + matador.getValue());
if (matador.getValueDie1() == 1 && matador.getValueDie2() == 1) { // loop marker for cpu starts
computerScore = computerScore + -25;
break;
}
if (matador.getValueDie1() == 1 && matador.getValueDie2() == 1) { // loses turns if 1 appears on both sides
computerScore = computerScore + 0;
System.out.println("Changing Turns!");
break;
}
if (matador.getValueDie1() != 1 || matador.getValueDie2() != 1) { // computer scores value of dice
computerScore = computerScore + matador.getValue();
if (computerScore > 98) {
break;
}
}
if (cpuPick == matador.getValueDie1() || cpuPick == matador.getValueDie2()) {
turn = turn + 1;
}
if (cpuPick == matador.getValueDie1() && cpuPick == matador.getValueDie2()) {
System.out.println("You are the winner player 2 you matched your numbers!!");
System.out.println("Player 1 final score is: " + playerScore + " |-| player 2 final score is " + computerScore);
quit = 1;
break;
}
System.out.println("Player 2 Score: " + computerScore);
}
while (playerScore < 98 || computerScore <98 || quit != 1);
}
while (playerScore < 98 || computerScore < 98 || quit != 1); // end of master loop
System.out.println("Player 1 final score is: " + playerScore + " |-| player 2 final score is " + computerScore);
}
}
如果需要其他类,但它与分数无关,因为它主要用于确定一些值:
package programming2;
import java.util.Random;
import java.util.Scanner;
public class Die {
private int die1; //instance variable
private int die2;
private int rolledDice;
public Die() { //constructor assigns random value
die1 = (int) (Math.random()*6)+1;
die2 = (int) (Math.random()*6)+1;
}
public void rollDieNow () { //rolls dice
Random randGen = new Random();
die1 = randGen.nextInt(6) + 1;
die2 = randGen.nextInt(6) + 1;
}
public int getValue() { // gets dice value
rolledDice = die1 + die2;
return rolledDice;
}
public int getValueDie1() { // gets die1 value
return die1;
}
public int getValueDie2() { // gets die2 value
return die2;
}
}
【问题讨论】:
-
这个条件是什么意思:
turn < turn + 1? -
while (playerScore < 98 || computerScore < 98 || quit != 1)|| 应该是&&。只要满足所有这些条件,而不是至少满足其中一个条件,您就希望运行循环。目前,您的循环只会在playerScore >= 98和computerScore >=98和quit==1时停止。但只要达到其中一个条件就应该标志着游戏的结束。 -
我使用变量 turn 来确定玩家何时结束,如您所见的 if 条件。在某些情况下回合增加回合丢失,所以我使用 break 来打破循环并让其他玩家选择。