2016-05-17 66 views
0

我有一個爲我們製作的tic tac腳趾遊戲,但我必須插入一個或兩個按鈕,以便用戶可以選擇它們是否希望成爲X或O.你們幫我修改這段代碼嗎?我不確定如何做到這一點,因爲每次我嘗試添加它不編譯的東西。非常感謝您的幫助。需要幫助將按鈕插入井字遊戲

import javafx.application.Application; 
 
import javafx.stage.Stage; 
 
import javafx.scene.Scene; 
 
import javafx.scene.control.Label; 
 
import javafx.scene.layout.BorderPane; 
 
import javafx.scene.layout.GridPane; 
 
import javafx.scene.layout.Pane; 
 
import javafx.scene.paint.Color; 
 
import javafx.scene.shape.Line; 
 
import javafx.scene.shape.Ellipse; 
 

 
public class TicTacToe extends Application { 
 

 
    private char whoseTurn = 'X'; 
 

 
    private Cell[][] cell = new Cell[3][3]; 
 

 
    private Label lblStatus = new Label("X's turn to play"); 
 

 
    @Override 
 
    public void start(Stage primaryStage) { 
 
    
 
    GridPane pane = new GridPane(); 
 
    for (int i = 0; i < 3; i++) 
 
     for (int j = 0; j < 3; j++) 
 
     pane.add(cell[i][j] = new Cell(), j, i); 
 

 
    BorderPane borderPane = new BorderPane(); 
 
    borderPane.setCenter(pane); 
 
    borderPane.setBottom(lblStatus); 
 
    
 
    Scene scene = new Scene(borderPane, 550, 470); 
 
    primaryStage.setTitle("Wild TicTacToe"); 
 
    primaryStage.setScene(scene); 
 
    primaryStage.show();  
 
    primaryStage.setResizable(false); 
 
    } 
 

 
    /** Determine if the cell are all occupied */ 
 
    public boolean isFull() { 
 
    for (int i = 0; i < 3; i++) 
 
     for (int j = 0; j < 3; j++) 
 
     if (cell[i][j].getToken() == ' ') 
 
      return false; 
 

 
    return true; 
 
    } 
 

 
    /** Determine if the player with the specified token wins */ 
 
    public boolean isWon(char token) { 
 
    for (int i = 0; i < 3; i++) 
 
     if (cell[i][0].getToken() == token 
 
      && cell[i][1].getToken() == token 
 
      && cell[i][2].getToken() == token) { 
 
     return true; 
 
     } 
 

 
    for (int j = 0; j < 3; j++) 
 
     if (cell[0][j].getToken() == token 
 
      && cell[1][j].getToken() == token 
 
      && cell[2][j].getToken() == token) { 
 
     return true; 
 
     } 
 

 
    if (cell[0][0].getToken() == token 
 
     && cell[1][1].getToken() == token   
 
     && cell[2][2].getToken() == token) { 
 
     return true; 
 
    } 
 

 
    if (cell[0][2].getToken() == token 
 
     && cell[1][1].getToken() == token 
 
     && cell[2][0].getToken() == token) { 
 
     return true; 
 
    } 
 

 
    return false; 
 
    } 
 

 
    
 
    public class Cell extends Pane { 
 
    
 
    private char token = ' '; 
 

 
    public Cell() { 
 
     setStyle("-fx-border-color: black"); 
 
     this.setPrefSize(2000, 2000); 
 
     this.setOnMouseClicked(e -> handleMouseClick()); 
 
    } 
 

 
    /** Return token */ 
 
    public char getToken() { 
 
     return token; 
 
    } 
 

 
    /** Set a new token */ 
 
    public void setToken(char c) { 
 
     token = c; 
 
     
 
     if (token == 'X') { 
 
     Line line1 = new Line(10, 10, 
 
      this.getWidth() - 10, this.getHeight() - 10); 
 
     line1.endXProperty().bind(this.widthProperty().subtract(10)); 
 
     line1.endYProperty().bind(this.heightProperty().subtract(10)); 
 
     Line line2 = new Line(10, this.getHeight() - 10, 
 
      this.getWidth() - 10, 10); 
 
     line2.startYProperty().bind(
 
      this.heightProperty().subtract(10)); 
 
     line2.endXProperty().bind(this.widthProperty().subtract(10)); 
 
     
 
     // Add the lines to the pane 
 
     this.getChildren().addAll(line1, line2); 
 
     } 
 
     else if (token == 'O') { 
 
     Ellipse ellipse = new Ellipse(this.getWidth()/2, 
 
      this.getHeight()/2, this.getWidth()/2 - 10, 
 
      this.getHeight()/2 - 10); 
 
     ellipse.centerXProperty().bind(
 
      this.widthProperty().divide(2)); 
 
     ellipse.centerYProperty().bind(
 
      this.heightProperty().divide(2)); 
 
     ellipse.radiusXProperty().bind(
 
      this.widthProperty().divide(2).subtract(10));   
 
     ellipse.radiusYProperty().bind(
 
      this.heightProperty().divide(2).subtract(10)); 
 
     ellipse.setStroke(Color.BLACK); 
 
     ellipse.setFill(Color.WHITE); 
 
     
 
     getChildren().add(ellipse); // Add the ellipse to the pane 
 
     } 
 
    } 
 

 
    /* Handle a mouse click event */ 
 
    private void handleMouseClick() { 
 
     // If cell is empty and game is not over 
 
     if (token == ' ' && whoseTurn != ' ') { 
 
     setToken(whoseTurn); // Set token in the cell 
 

 
     // Check game status 
 
     if (isWon(whoseTurn)) { 
 
      lblStatus.setText(whoseTurn + " won! The game is over."); 
 
      whoseTurn = ' '; // Game is over 
 
     } 
 
     else if (isFull()) { 
 
      lblStatus.setText("Draw! The game is over."); 
 
      whoseTurn = ' '; // Game is over 
 
     } 
 
     else { 
 
      // Change the turn 
 
      whoseTurn = (whoseTurn == 'X') ? 'O' : 'X'; 
 
      // Display whose turn 
 
      lblStatus.setText(whoseTurn + "'s turn."); 
 
     } 
 
     } 
 
    } 
 
    } 
 
    
 
    /** 
 
    * The main method is only needed for the IDE with limited 
 
    * JavaFX support. Not needed for running from the command line. 
 
    */ 
 
    public static void main(String[] args) { 
 
    launch(args); 
 
    } 
 
}

回答

0

實在看不出爲什麼當你已經創建使用比較先進的JavaFX代碼這個程序添加一個按鈕,將是一個問題。

只看Button documentation如何創建一個Button。然後將你的按鈕添加到例如一個HBox你然後添加到您的BorderPane

Button xButton = new Button("X"); 
Button obutton = new Button("O"); 

HBox buttonBar = new HBox(); 
buttonBar.getChildren().addAll(xButton, oButton); 

borderPane.setTop(buttonBar); 

隨着中說。在你的情況下,也許ToggleButton將是一個更好的選擇。它允許選擇按鈕,這將有助於提供O或X已被正確選擇的一些視覺反饋。