Kann jemand helfen dies mit Java zu programmieren?

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.