2016-05-17 9 views
0

Ich habe ein Tic Tac Toe-Spiel, das für uns gemacht wird, aber ich muss eine Taste oder zwei einfügen, so dass der Benutzer auswählen kann, ob sie ein X oder O sein wollen Habt ihr mir geholfen, diesen Code zu modifizieren? Ich bin mir nicht sicher, wie ich das machen soll, denn jedes Mal, wenn ich versuche, etwas hinzuzufügen, kompiliert es nicht. Deine Hilfe ist sehr Willkommen.Brauchen Sie Hilfe beim Einfügen von Tasten in Tic Tac Toe Spiel

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); 
 
    } 
 
}

Antwort

0

kann nicht wirklich sehen, warum ein Problem wäre eine Schaltfläche Hinzufügen, wenn Sie bereits mit diesem Programm ziemlich weit fortgeschritten JavaFX-Code erstellt haben.

Sehen Sie sich einfach die Button documentation zum Erstellen eines Button. Dann fügen Sie Ihre Schaltfläche (n) z. ein HBox, die Sie dann zu Ihrem BorderPane hinzufügen:

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

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

borderPane.setTop(buttonBar); 

Wenn das gesagt. In Ihrem Szenario wäre vielleicht eine ToggleButton eine bessere Option. Es erlaubt die Auswahl der Taste, die bei der visuellen Rückmeldung hilft, ob O oder X richtig gewählt wurde.