使用JavaFX图形API,编写三子棋。
时间: 2024-03-17 12:41:14 浏览: 95
好的,我可以给你一些指导。首先,你需要了解JavaFX图形API的基本知识,这是JavaFX用于创建图形用户界面(GUI)的一部分。你可以使用JavaFX的Scene Builder来创建UI,也可以通过Java代码来创建UI。
对于三子棋,你可以创建一个棋盘组件,其中包含九个小方格。你可以使用JavaFX的Button组件来表示小方格,每个Button都有一个事件处理程序,以便在用户点击它时进行响应。你还需要实现游戏逻辑,例如检查玩家是否获胜,切换玩家等等。
以下是一些示例代码,用于创建一个简单的三子棋游戏:
```java
public class TicTacToe extends Application {
private boolean isPlayerX = true;
private Button[][] board = new Button[3][3];
private Label message = new Label("X's turn");
@Override
public void start(Stage primaryStage) {
GridPane pane = new GridPane();
pane.setAlignment(Pos.CENTER);
pane.setPadding(new Insets(10, 10, 10, 10));
pane.setHgap(5);
pane.setVgap(5);
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
Button button = new Button();
button.setPrefSize(50, 50);
button.setOnAction(new MoveHandler(row, col));
board[row][col] = button;
pane.add(button, col, row);
}
}
message.setFont(new Font(20));
VBox vbox = new VBox(message, pane);
vbox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vbox, 200, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
private void checkForWinner() {
for (int row = 0; row < 3; row++) {
if (board[row][0].getText().equals(board[row][1].getText()) &&
board[row][1].getText().equals(board[row][2].getText()) &&
!board[row][0].getText().isEmpty()) {
gameOver(board[row][0].getText() + " wins!");
return;
}
}
for (int col = 0; col < 3; col++) {
if (board[0][col].getText().equals(board[1][col].getText()) &&
board[1][col].getText().equals(board[2][col].getText()) &&
!board[0][col].getText().isEmpty()) {
gameOver(board[0][col].getText() + " wins!");
return;
}
}
if (board[0][0].getText().equals(board[1][1].getText()) &&
board[1][1].getText().equals(board[2][2].getText()) &&
!board[0][0].getText().isEmpty()) {
gameOver(board[0][0].getText() + " wins!");
return;
}
if (board[0][2].getText().equals(board[1][1].getText()) &&
board[1][1].getText().equals(board[2][0].getText()) &&
!board[0][2].getText().isEmpty()) {
gameOver(board[0][2].getText() + " wins!");
return;
}
if (isBoardFull()) {
gameOver("Tie game");
return;
}
}
private boolean isBoardFull() {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
if (board[row][col].getText().isEmpty()) {
return false;
}
}
}
return true;
}
private void gameOver(String message) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
board[row][col].setDisable(true);
}
}
this.message.setText(message);
}
private class MoveHandler implements EventHandler<ActionEvent> {
private int row, col;
public MoveHandler(int row, int col) {
this.row = row;
this.col = col;
}
@Override
public void handle(ActionEvent event) {
if (board[row][col].getText().isEmpty()) {
if (isPlayerX) {
board[row][col].setText("X");
message.setText("O's turn");
} else {
board[row][col].setText("O");
message.setText("X's turn");
}
checkForWinner();
isPlayerX = !isPlayerX;
}
}
}
public static void main(String[] args) {
launch(args);
}
}
```
这是一个简单的三子棋游戏,其中包含一个棋盘,九个按钮和一个消息标签。当玩家点击一个按钮时,会在相应的位置上放置一个X或O,然后检查是否有玩家获胜或平局。如果游戏结束,将禁用所有按钮,并显示最终消息。
希望这可以帮助你开始创建你自己的三子棋游戏,如果你有任何疑问,请随时问我。
阅读全文