JavaFX使用GridPane创建游戏板
当应用程序运行时,游戏板显示良好,尽管单击互动程序时,文本始终显示在板的左上角[0][0] 我也在与逻辑作斗争。我有一个int board矩阵,它有一个函数makeMove,可以将玩家的移动添加到矩阵中,尽管我无法让玩家在矩阵上移动,也无法在平铺索引上打印相应的“O” 我如何创建一个可以传递一行、列索引和更改棋盘矩阵的函数,并在GUI上打印播放器片段(例如AI移动) 当玩家点击GUI互动程序,然后进行相应的移动时 到目前为止,我已经为GUI创建了一个GridPane,并在每个索引处添加了带有文本的矩形 我创建了一个Board类,它构造了一个int Board矩阵来保存玩家的移动(P1,P2,空)JavaFX使用GridPane创建游戏板,java,javafx,Java,Javafx,当应用程序运行时,游戏板显示良好,尽管单击互动程序时,文本始终显示在板的左上角[0][0] 我也在与逻辑作斗争。我有一个int board矩阵,它有一个函数makeMove,可以将玩家的移动添加到矩阵中,尽管我无法让玩家在矩阵上移动,也无法在平铺索引上打印相应的“O” 我如何创建一个可以传递一行、列索引和更改棋盘矩阵的函数,并在GUI上打印播放器片段(例如AI移动) 当玩家点击GUI互动程序,然后进行相应的移动时 到目前为止,我已经为GUI创建了一个GridPane,并在每个索引处添加了带有文本
公共课程委员会{
专用int[][]电路板矩阵;
私人int板尺寸;
私有整数长度;
公用电路板(内部电路板尺寸、内部电路板长度){
this.board_matrix=新整数[board_size][board_size];
this.board_size=board_size;
this.win_length=win_length;
对于(int i=0;idrawMove(文本));
gameBoard.getChildren().addAll(平铺,文本);
}
}
返回游戏板;
}
公共无效drawMove(文本){
text.setText(“O”);
text.setFill(颜色为黑色);
}
如果要在矩形上方添加文本
对象
对象,请在堆栈窗格中同时包装这两个对象
:
public Parent createBoard() {
GridPane gameBoard = new GridPane();
gameBoard.setPrefSize(755, 755);
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
Rectangle tile = new Rectangle(50, 50);
tile.setFill(Color.BURLYWOOD);
tile.setStroke(Color.BLACK);
Text text = new Text();
text.setFont(Font.font(40));
gameBoard.add(new StackPane(tile, text), j, i);
//GridPane.setRowIndex(tile, i);
//GridPane.setColumnIndex(tile, j);
//gameBoard.getChildren().addAll(tile, text);
tile.setOnMouseClicked(event -> drawMove(text));
}
}
return gameBoard;
}
public父createBoard(){
GridPane gameBoard=新建GridPane();
gameBoard.setPrefSize(755755);
对于(int i=0;idrawMove(文本));
}
}
返回游戏板;
}
在循环中,您设置的是“平铺”节点的行和列,而不是“文本”节点。因此,您的所有文本节点都位于0,0
您似乎希望平铺像c0der建议的那样是堆叠窗格。文本节点位于平铺顶部
我认为创建一个平铺对象(可能来自StackPane)并使用它来管理每个平铺是有意义的。它将负责显示的背景颜色和文本。现在还不清楚是否需要矩形。您可以只设置StackPane的背景和边框。您的所有文本元素都放在其中单元格
(0,0)
。请注意,您可以使用添加
方法来缩短分配索引所需的代码,而不是使用静态
方法逐个分配索引:gameBoard.add(tile,j,i);
发布的代码id不清楚(这两个类之间的关系是什么?)请发帖。同时把你的帖子集中在一个问题上。
public Parent createBoard() {
GridPane gameBoard = new GridPane();
gameBoard.setPrefSize(755, 755);
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
Rectangle tile = new Rectangle(50, 50);
tile.setFill(Color.BURLYWOOD);
tile.setStroke(Color.BLACK);
Text text = new Text();
text.setFont(Font.font(40));
gameBoard.add(new StackPane(tile, text), j, i);
//GridPane.setRowIndex(tile, i);
//GridPane.setColumnIndex(tile, j);
//gameBoard.getChildren().addAll(tile, text);
tile.setOnMouseClicked(event -> drawMove(text));
}
}
return gameBoard;
}