Kann jemand helfen dies mit Java zu programmieren?
Controller
Die Klasse HelloControlller verfügt über folgende Felder.
- HelloModel model: Das Model des Spiels
- @FXML private GridPane layer: enthält die 9 Felder des Spiels und ist über
- @FXML mit der View verbunden.
Die Klasse HelloController enthält folgende Methoden:
- voidinitialize():wirdautomatischvomFXMLloaderausgeführt.Fügt9 Rectangle Nodes zu layer hinzu. Diesen nodes wird ihr Index über setId() hinzugefügt und je ein
EventHandler für onMouseClicked Events über die Methode setOnMouseClicked()
2.void executeMove (int id): setze den State der Zelle mit der ID id auf PLAYER, wenn erfolgreich wechsele den Zug und führe den Zug des Computers aus, rufe updateView() auf.
3.void setModel (HelloModel m): setze das Feld model
4. void updateView (): iteriere über die 9 Felder und setze die Füllfarbe abhängig vom State der Zelle.
1 Antwort
Hier eine mögliche Implementierung:
import javafx.fxml.FXML;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
public class HelloController {
private HelloModel model;
@FXML
private GridPane layer;
public void initialize() {
for (int i = 0; i < 9; i++) {
Rectangle rect = new Rectangle(50, 50);
rect.setId(Integer.toString(i));
rect.setOnMouseClicked(this::handleClick);
layer.add(rect, i % 3, i / 3);
}
}
private void handleClick(MouseEvent event) {
Rectangle rect = (Rectangle) event.getSource();
int id = Integer.parseInt(rect.getId());
if (model.getState(id) == HelloModel.State.EMPTY) {
model.setState(id, HelloModel.State.PLAYER);
if (model.checkWin() == HelloModel.State.EMPTY) {
model.switchTurn();
model.makeMove();
updateView();
}
}
}
public void setModel(HelloModel m) {
model = m;
}
public void updateView() {
for (int i = 0; i < 9; i++) {
Rectangle rect = (Rectangle) layer.getChildren().get(i);
switch (model.getState(i)) {
case EMPTY:
rect.setFill(Color.WHITE);
break;
case PLAYER:
rect.setFill(Color.BLUE);
break;
case COMPUTER:
rect.setFill(Color.RED);
break;
}
}
}
}
Diese Klasse implementiert die Methoden initialize, executeMove, setModel und updateView gemäß den Anforderungen. Die Methode handleClick wird aufgerufen, wenn der Spieler auf ein Rechteck klickt, und sie setzt den Zustand des entsprechenden Feldes im Modell auf PLAYER, wechselt den Zug und führt den Zug des Computers aus, falls erforderlich. Die Methode updateView aktualisiert die Farben der Rechtecke basierend auf dem Zustand der Zellen im Modell. Beachte, dass dies nur eine mögliche Implementierung ist, und dass es je nach Anforderungen und Designentscheidungen andere mögliche Implementierungen geben kann.