【问题标题】:Number guessing game in JavaFXJavaFX 中的猜数字游戏
【发布时间】:2018-03-11 20:34:42
【问题描述】:

我目前被困在一个简单的程序上,它有一个 GuessReset 按钮,用于猜测 1-100 之间的数字。用户有 5 个回合。我目前的问题是我的 Reset 按钮无法正常工作。当它被按下时,它不会完全生成一个新游戏,而是只生成一个新数字,但是当按下 Guess 时,会再次使用生成的原始数字。

我将包含一些我觉得我犯了大逻辑错误的代码 sn-ps。

所以只有我的计数器和初始随机数变量,然后是 GuessReset 按钮

       int counter = 0;
       int num = genRan();

   /////////////////////////////////////
        guessButton.setOnAction(e -> {

        int numToGuess = num;

        gameSetUp(guessField, counter, numToGuess);

    });

    //////////////////////////////////////////////////////////

    resetButton.setOnAction(e -> {

        System.out.println("Generating new game...");

        int newNum = genRan();
        int newCounter = 0;

        gameSetUp(guessField, newCounter, newNum);

    });

我的随机数生成器。

public int genRan() {
        Random rand = new Random();

        int numToGuess = rand.nextInt(100) + 1;

        System.out.println("number is" + numToGuess);

        return numToGuess;
    }

而我认为这一切都错了......

public void gameSetUp(TextField guessField, int counter, int num) {

    int numToGuess = num, maxGuesses = 5;

    try {
        if (counter != 5) {
            int guessNum = Integer.valueOf(guessField.getText());

            if (guessNum == numToGuess) {
                System.out.println("Correct!");
            } else if (guessNum < numToGuess) {
                counter++;
                System.out.println("You guessed " + guessNum + ", which was too low. " + (maxGuesses - counter)
                        + " guesses left!");
            } else if (guessNum > numToGuess) {
                counter++;
                System.out.println("You guessed " + guessNum + ", which was too high. " + (maxGuesses - counter)
                        + " guesses left!");
            }
        }

    } finally {
        if (counter == maxGuesses) {
            System.out.println("\nGame Over...");
        }
    }
}

如果有任何帮助,我将不胜感激,谢谢。

【问题讨论】:

  • 您可以在一种方法中实现您的游戏玩法和游戏设置。游戏设置通常只处理游戏的初始状态。
  • 您的gamePlay代码应该在guessButton'sonAction中。您的 gameSetup 代码应位于 resetButton's onAction 中。
  • 您只能在gameSetUp 中分配局部变量。您也不能在任何调用 gameSetUp 的事件处理程序中修改 counternumToGuess。这意味着游戏的状态永远不会改变......

标签: java javafx random


【解决方案1】:

这是一个示例应用,其中 Initial StateGame Play State 分开。

import java.util.Random;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author Sedrick
 */
public class JavaFXApplication47 extends Application {

    TextField guessField = new TextField();
    int counter = 0;
    int numberToGuess = -1;    

    @Override
    public void start(Stage primaryStage) {            

        guessField.setPromptText("Press New Game Button!");

        Button btnNewGame = new Button("New Game");        
        btnNewGame.setOnAction(actionEvent ->{
            gameSetup();
        });

        Button btnGuess = new Button("Guess");
        btnGuess.setOnAction(actionEvent -> {
            gamePlay();
        });



        VBox root = new VBox();
        root.getChildren().addAll(guessField, new HBox(btnNewGame, btnGuess));

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();

        btnNewGame.requestFocus();
    }    


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }


    public void gameSetup()
    {
        guessField.setPromptText("Enter your guess");//set guessField to zero
        counter = 0; //set counter to zero

        //set numberToGuess to a new random number
        Random random = new Random();
        numberToGuess = random.nextInt(100) + 1;
        System.out.println("Number to guess: " + numberToGuess);
    }

    public void gamePlay()
    {
        int guess = Integer.parseInt(guessField.getText());

        if(counter == 5)//Check it counter == 5
        {
            System.out.println("Game over! You lose!");
            guessField.setPromptText("Game over! You lose!");
            guessField.setText("");
        }
        else{
            if(guess == numberToGuess)
            {
                System.out.println("You win");
                guessField.setPromptText("Your guess of " + guess + " is correct! You win!");
                guessField.setText("");
            }
            else if(guess < numberToGuess)
            {
                System.out.println("You guessed to low");
                guessField.setPromptText("You guessed to low! Try again.");
                guessField.setText("");
                counter++;
            }
            else 
            {
                System.out.println("You guessed to high! Try again.");
                guessField.setPromptText("You guessed to high! Try again.");
                guessField.setText("");
                counter++;
            }         
        }        
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2016-02-01
    • 2018-03-24
    • 2016-06-21
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多