Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
- Para detectar la pulsación de una casilla utilizaremos el evento onAction en lugar del evento onMouseClicked. De lo contrario si pulsasemos sobre el texto que hay en el botón, el target sería el label en lugar del propio botón.
- Cada vez que pulsemos sobre una casilla, obtendremos la id de la casilla. Habremos asignado esa id a cada una de las casillas utilizando el Scene Editor. Utilizaremos esa id para ir rellenando con el color del jugador que ha pulsado sobre la casilla el array del tablero. Para recuperar la id de la casilla, utilizaremos el siguiente código:
@FXML
public void btnPulsado(Event e) {
Button b = (Button) e.getTarget();
int id = Integer.parseInt(b.getId());
...
}
- Después de cada tirada, se comprobará si alguien ha ganado llamando al método evaluateWin(String [] tablero);
- El método evaluateWin(String [] tablero) mediante sucesivos if evaluará todas las posibilidades de que un jugador gane.
Descargar Main
package exercises;
import java.io.IOException;
import javafx.application.Application;
import javafx.event.Event;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class TresEnRayaConFXML extends Application {
@Override
public void start(Stage primaryStage) {
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("/exercises/tresenraya/view/tresenraya.fxml"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Descargar Controller
package exercises.tresenraya.view;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class MainController {
int turno;
static String[] board = new String[9];
@FXML
Button btn;
@FXML
public void btnPulsado(Event e) {
Button b = (Button) e.getTarget();
int id = Integer.parseInt(b.getId());
System.out.println(id);
String color = turno % 2 == 0 ? "salmon" : "paleGreen";
b.setStyle("-fx-background-color:" + color);
board[id] = color;
turno++;
if(evaluateWin(board)) {
Stage stage = (Stage)((Button)e.getSource()).getScene().getWindow();
final Stage dialog = new Stage();
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.initOwner(stage);
VBox dialogVbox = new VBox();
Text txt = new Text("Ha ganado el jugador " + color);
dialogVbox.setAlignment(Pos.CENTER);
VBox.setVgrow(txt, Priority.ALWAYS);
dialogVbox.getChildren().add(txt);
Scene dialogScene = new Scene(dialogVbox, 300, 200);
dialog.setScene(dialogScene);
dialog.show();
}
/*for(String cell : board) {
System.out.println(cell);
}*/
}
public static boolean evaluateWin(String[] board) {
for(String cell : board) {
System.out.println(cell);
}
if (board[0] == board[1] && board[0] == board[2] && board[0] != null) {
return true;
} else if (board[3] == board[4] && board[3] == board[5] && board[3] != null) {
return true;
} else if (board[6] == board[7] && board[6] == board[8] && board[6] != null) {
return true;
} else if (board[0] == board[3] && board[0] == board[6] && board[0] != null) {
return true;
} else if (board[1] == board[4] && board[1] == board[7] && board[1] != null) {
return true;
} else if (board[2] == board[5] && board[2] == board[8] && board[2] != null) {
return true;
} else if (board[0] == board[4] && board[0] == board[8] && board[0] != null) {
return true;
} else if (board[2] == board[4] && board[2] == board[6] && board[2] != null) {
return true;
} else
return false;
}
}
// int id = Integer.parseInt(b.getId());
// onAction
Descargar style.css
.btn {
-fx-max-width: Infinity;
max-width: Infinity;
-fx-max-height: Infinity;
max-height: Infinity;
}
.row {
-fx-max-width: Infinity;
max-width: Infinity;
-fx-max-height: Infinity;
max-height: Infinity;
}