当前位置: 首页 > 知识库问答 >
问题:

Javafx为滑梯和梯子创建播放器和部件

董胡非
2023-03-14

我有一个任务,我要用JavaFX创建一个滑梯和梯子游戏。

我目前所坚持的是,一旦用户选择了他们想要的玩家数量,我运行的方法就会出错。

我已经通过调试器运行了它,并且我知道问题出在哪一行,但是我不知道从这里可以走到哪里。

例外情况是:

异常线程"JavaFX应用程序线程"java.lang.ArrayIndexOutOfBoundsExc0019:0

我发现如果我把私有玩家[]玩家=新玩家[0];中的零改为4,它就起作用了。但是,我得到另一个错误,如果我试图改变0在私有圈[]c=new Circle[0];

public class Main extends Application {
private final int BOARD_DIM = 10;
private Players [] players = new Players[0];
private Circle [] c = new Circle[0];

public static void main(String[]args){
    launch();
}

public void start(Stage pStage) throws Exception{
    //ROOT PANE
    BorderPane root = new BorderPane();

    //MENUBAR

    //BOARD CREATION

    //PLAYER SELECTION/RESUME PREVIOUS GAME
    //Drop down menu
    HBox players = new HBox();
    Label intro = new Label("Select # of players");
    ChoiceBox<String> p = new ChoiceBox<>();
    p.getItems().addAll("2","3","4");
    p.setPadding(new Insets(6));
    //Button to start new game
    Button startGame = new Button("Start Game");
    startGame.setOnAction(e -> getChoice(p));
    startGame.setPadding(new Insets(10));
    players.getChildren().addAll(intro,p,startGame);
    root.setRight(players);

    Scene scene = new Scene(root, 900, 650);
    pStage.setTitle("Chutes and Ladders");
    pStage.setScene(scene);
    pStage.show();
}
private void getChoice(ChoiceBox<String> p) {
    int numOfPlayers = Integer.parseInt(p.getValue());
    for(int i = 0; i < numOfPlayers; i++){
        players[i] = new Players("p"+(i+1),9,0, false);
        c[i] = new Circle(25);
    }
    c[0].setFill(Color.GREEN);
    c[1].setFill(Color.YELLOW);
    if(numOfPlayers >= 3){
        c[2].setFill(Color.RED);
        }
        if(numOfPlayers == 4){
            c[3].setFill(Color.BLACK);
        }
}

共有1个答案

谢志用
2023-03-14

您正在将player和c初始化为长度为0的数组。在循环中,您将迭代从0到NUMOF的元素。这就是导致异常的原因。

首先,只需声明数组:

private Players [] players;
private Circle [] c;

然后在您的方法中,使用所需的长度初始化数组(如果以后需要更改长度,我建议切换到ArrayList)。

private void getChoice(ChoiceBox<String> p) {
    int numOfPlayers = Integer.parseInt(p.getValue());
    c = new Circle[numOfPlayers];            //add these lines
    players = new Players[numOfPlayers];     //add these lines
    for(int i = 0; i < numOfPlayers; i++){
        players[i] = new Players("p"+(i+1),9,0, false);
        c[i] = new Circle(25);
    }
    ...
}
 类似资料:
  • 我是一名学生,正在做滑梯和梯子游戏。我正在使用一些方法来确定游戏板上应该放置多少滑槽和梯子。我在main中使用参数为每一个指定10,但我一直在获得6到11的位置。 这两种方法互相干扰是不是有什么问题? 或者我为随机放置设置for循环的方式有问题吗? 我是新来的这个网站,请让我知道,如果你需要更多的澄清,我不想把整个程序在这里。谢谢。

  • 我如何在JavaFX中开发一个类似下面的渐变?

  • 所以,我试图创建一个径向渐变(用于游戏中的静态照明)。我想到了这个: 但我得到的结果是: 我想得到一个更平滑的梯度,比如: 我试着玩步法和强度,但是我不能得到类似上面梯度的东西。做这件事的好方法是什么??提前感谢!

  • 在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。 一维梯度下降 我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导

  • 本文向大家介绍如何解决梯度消失和梯度膨胀?相关面试题,主要包含被问及如何解决梯度消失和梯度膨胀?时的应答技巧和注意事项,需要的朋友参考一下 答: (1) 梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重解雇小于1的话,那么即使这个结果是0.99,经过足够多层传播之后,误差对输入层的偏导会趋于0; (2) 梯度膨胀:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都

  • 本文向大家介绍如何解决梯度消失和梯度爆炸?相关面试题,主要包含被问及如何解决梯度消失和梯度爆炸?时的应答技巧和注意事项,需要的朋友参考一下 (1)梯度消失: 根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0 可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normaliz