gpt4 book ai didi

java - 对从另一个类调用方法感到困惑

转载 作者:行者123 更新时间:2023-12-01 10:01:56 26 4
gpt4 key购买 nike

我正在尝试实现一个运行良好的 DiceThrowingGame。我目前有两个类(class),分别是“玩家”“游戏”。 Game类的代码如下:

包 dice.throwing.game;导入java.util.Scanner;

public class Game {
private int winningPoints;
private Player player1, player2;
private boolean gameSetup;

private final String defaultWinningScore = "200";

public Game() {
this.setWinningPoints(200);
this.gameSetup = false;
}

private int readScore(Scanner scanner) {
String score = "";
try {
score = scanner.nextLine();
if (score.isEmpty()) {
score = this.defaultWinningScore;
}
} catch (Exception e) {
}
return Integer.parseInt(score);
}

private Player createPlayer(Scanner scanner) {
String name = null;
do {
try {
name = scanner.nextLine();
if (name.isEmpty()) {
System.err.println("Name cannot be empty. Try again: ");
}
} catch (Exception e) {
}
} while (name.isEmpty());

return new Player(name);
}

private void startGame(Scanner scanner) {
System.out.println("Enter first player's name: ");
player1 = createPlayer(scanner);
System.out.println("Enter second player's name: ");
player2 = createPlayer(scanner);
System.out.println("Maximum score to win (<Enter> to use default 200): ");
this.setWinningPoints(this.readScore(scanner));
this.gameSetup = true;
}

private void playOneRound() {
int p1r1, p1r2, p2r1, p2r2;
p1r1 = (int) (1 + ((Math.random() * 10) % 6));
p1r2 = (int) (1 + ((Math.random() * 10) % 6));
p2r1 = (int) (1 + ((Math.random() * 10) % 6));
p2r2 = (int) (1 + ((Math.random() * 10) % 6));

int p1Points, p2Points;
boolean p1Bonus = false, p2Bonus = false;
p1Points = p1r1 + p1r2;
p2Points = p2r1 + p2r2;
if (p1r1 == p1r2) {
p1Points *= 2;
p1Bonus = true;
}
if (p2r1 == p2r2) {
p2Points *= 2;
p2Bonus = true;
}

player1.setTotalPoints(player1.getTotalPoints() + p1Points);
player2.setTotalPoints(player2.getTotalPoints() + p2Points);
System.out.print(player1.getName() + " rolled " + p1r1 + " + " + p1r2 + ", and scored " + p1Points + " points");
if (p1Bonus)
System.out.println(" (BONUS!)");
else
System.out.println();
System.out.print(player2.getName() + " rolled " + p2r1 + " + " + p2r2 + ", and scored " + p2Points + " points");
if (p2Bonus)
System.out.println(" (BONUS!)");
else
System.out.println();
}

private void leaderBoard() {
int p1Points = player1.getTotalPoints();
int p2Points = player2.getTotalPoints();

if (p1Points == p2Points)
System.out.println("Both players have the same score (" + p1Points + ") at the moment");
else {
System.out.print(player1.getName() + "'s current score is " + p1Points);
if (p1Points > p2Points)
System.out.println(" <--- CURRENT LEADER!");
else
System.out.println();
System.out.print(player2.getName() + "'s current score is " + p2Points);
if (p1Points < p2Points)
System.out.println(" <--- CURRENT LEADER!");
else
System.out.println();
}
}

private void gameHelp() {
System.out.println("<ENTER SOME HELP TEXT HERE>");
}

private boolean isGameOver() {
int player1Points = player1.getTotalPoints();
int player2Points = player2.getTotalPoints();

if(player1Points == player2Points &&
player1Points > this.winningPoints) {
System.out.println("Game Over! It's a draw!");
return true;
} else if(player1Points > this.winningPoints && player1Points > player2Points) {
System.out.println("Game Over! " + player1.getName() + " is the winner!");
return true;
} else if(player2Points > this.winningPoints && player2Points > player1Points) {
System.out.println("Game Over! " + player2.getName() + " is the winner!");
return true;
}
return false;
}

private void eventLoop() {
Scanner scanner = new Scanner(System.in);
int choice = 0;
boolean exit = false;
while (!exit) {
System.out.println("Welcome to my Dice-and-Roll Game!");
System.out.println("==============================");
System.out.println("(1) Start a new game");
System.out.println("(2) Play one round");
System.out.println("(3) Who is leading now?");
System.out.println("(4) Display Game Help");
System.out.println("(5) Exit Game");
System.out.println("Choose an option: ");

try {
choice = Integer.parseInt(scanner.nextLine());
if (choice < 1 || choice > 5) {
System.err.println("Error : Choose an option between 1 and 5");
choice = 0;
}
} catch (NumberFormatException e) {
System.err.println("Error : Choose an option between 1 and 5");
choice = 0;
}

if (!this.gameSetup && (choice == 2 || choice == 3)) {
System.err.println("Error : Players have not been setup");
choice = 0;
}

switch (choice) {
case 1:
this.startGame(scanner);
break;
case 2:
this.playOneRound();
break;
case 3:
this.leaderBoard();
break;
case 4:
this.gameHelp();
break;
case 5:
exit = true;
}

if(this.gameSetup && this.isGameOver()) {
System.out.println("Exiting now.. See you later!");
exit = true;
}
}
scanner.close();
}

public static void main(String[] args) {
Game game = new Game();
game.eventLoop();

}

public int getWinningPoints() {
return winningPoints;
}

public void setWinningPoints(int winningPoints) {
this.winningPoints = winningPoints;
}

}

但是我想将代码的 DiceThrowing 部分移动到另一个名为“Dice”的类,这就是这部分:

 private void playOneRound() {
int p1r1, p1r2, p2r1, p2r2;
p1r1 = (int) (1 + ((Math.random() * 10) % 6));
p1r2 = (int) (1 + ((Math.random() * 10) % 6));
p2r1 = (int) (1 + ((Math.random() * 10) % 6));
p2r2 = (int) (1 + ((Math.random() * 10) % 6));

对于是否放置整个 playOneRound() 方法或仅放置 Math.Random 行感到困惑?

最佳答案

将职责和抽象分开:我将有一个方法 Dice.getNumber() 它将返回以下结果(int) (1 + ((Math.random() * 10) % 6));您还可以使用第二种方法,该方法将返回带有 nbOfThrows 参数的骰子抛出数组。

然后 playOneRound() 将在游戏规则允许的范围内进行多次掷骰子操作。

关于java - 对从另一个类调用方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com