簡體   English   中英

為Java中的猜謎游戲獲取新的隨機數

[英]Getting New Random Numbers For Guessing Game In Java

我正在為Java開發游戲,而我已經深入到最后一部分。 還有其他一些要修復的東西很容易修復。 盡管有一個我無法弄清的問題,那就是每次運行游戲后,我都無法顯示新的隨機數。

例如,如果沒有人從數字(1-20)中猜出計算機隨機生成的數字,那么游戲就會重復自己的數字。 在此期間,您正在玩​​2台計算機,並且它們的數量也是隨機組成的(還是1-20個值)。

這是我制作的Player類的一些代碼

import java.util.Scanner;
import java.util.Random;

public class Player {
    private double currentGuess = 0;
    private String firstName;
    private boolean isCorrect;
    Scanner myScanner = new Scanner(System.in);

public Player() {
}

public double autoGuess()   {
    Random randomNumber = new Random();
    double number = randomNumber.nextInt(20) + 1;

    return number;
}

這是我的GuessGame類,實際上是在其中進行操作。 我無法弄清楚為什么當我從玩家類中調用autoGuess方法時,在每次游戲后都無法顯示新的隨機數,導致沒有人猜測正確的數字。 隨機生成要猜測的數字(WINNING_NUMBER)也是一樣,在每次新游戲后它都保持不變。 這是我的GuessGame類的一些代碼。

import java.util.Random;

public class GuessGame {
    Player player1 = new Player();
    Player player2 = new Player();
    Player player3 = new Player();

    double player2Guess = player2.autoGuess();
    double player3Guess = player3.autoGuess();
    int numberOfTries = 0;

public double generateWinningNumber()   {
    Random randomGenerate = new Random();
    double randomNumber = randomGenerate.nextInt(20) + 1;

    return randomNumber;
}

private final double WINNING_NUMBER = generateWinningNumber();

public void startGame() {
    System.out.println("VM: Welcome we are going to play a number guessing game. I'm (the JVM)\n"
            + "going to randomly pick a number between 0 and 20. You and the 2 other\n"
            + "computer-generated players are going to try to guess that number. The game\n"
            + "will end when at least one of the players correctly guesses the number.\n");

    System.out.println(WINNING_NUMBER);

    System.out.print("What is your name?  ");
        String player1Name = player1.readName();

    while (player1.isCorrect() == false)    
        {

        System.out.print(player1Name + ", enter your guess:  ");
            player1.readGuess();
            player2.autoGuess();
            player3.autoGuess();

            numberOfTries++;

            if (player1.getCurrentGuess() == WINNING_NUMBER || player2Guess == WINNING_NUMBER || player3Guess == WINNING_NUMBER)
            {
                player1.setCorrect(true);
                displayGuesses();
                determineWinner();
            }

            else
            {
                displayGuesses();
                displayHints();
                System.out.println("No one guessed the number.\nPlayers will need to guess again.\n");
                System.out.println("The winning number was: " + WINNING_NUMBER);
                generateWinningNumber();
            }
        }   
}


public void displayGuesses()    {
    System.out.print("Player 2's guess is: " + player2Guess + "\n");
    System.out.print("Player 3's guess is: " + player3Guess + "\n\n");
}

還有更多的事情,顯然還有更多要解決的問題,但是我試圖將這個問題排除在外。 我有我的駕駛員班開始玩這個游戲,也知道我需要將我的數字四舍五入為整數,所以沒有小數位。 同樣,所有提示方法所指的只是語句,告訴您您是熱還是冷。 運行得很好。 在我的while語句中,每個新的不成功的游戲之后,只需要一些幫助來弄清楚如何獲得一個新的隨機數。

您的generateWinningNumber()方法返回一個double值,它本身實際上並未更改任何值。 另外,由於WINNING_NUMBER是常數,因此即使您確實要更改它,也將無法更改。 您絕對不應該使WINNING_NUMBER最終WINNING_NUMBER ,或者修改generateWinningNumber()使其修改您的全局變量本身,或者保持其原樣並使用其返回值將其分配給您的非恆定winningNumber全局winningNumber

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM