import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.scene.shape.Rectangle; import javafx.scene.paint.Color; import javafx.stage.Window; import javafx.scene.shape.Shape; import java.util.ArrayList; import javafx.scene.control.Label; import javafx.scene.shape.Line; import javafx.event.Event; import javafx.event.EventHandler; import javafx.scene.input.MouseEvent; import javafx.scene.shape.Circle; import javafx.geometry.Pos; import javafx.scene.layout.VBox; import javafx.scene.layout.HBox; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.layout.BackgroundFill; /** * * Beschreibung * * @version 1.0 vom 25.09.2025 * @author */ public class Muehle extends Application { // start attributes // end attributes private Label lTop = new Label(); private Pane game_board; private Game game; public void start(Stage primaryStage) { VBox root = new VBox(); game = new Game(); // lTop.setMaxWidth(1080); HBox label_box = new HBox(lTop); label_box.setAlignment(Pos.CENTER); lTop.setFont(Font.font("Roboto",FontWeight.BOLD,40)); game_board = draw_game_board(); root.getChildren().addAll(label_box,game_board); root.setStyle("-fx-background-color: rgb(255, 190, 0)"); Scene scene = new Scene(root, 1080, 820); game.start(game_board,lTop); drawPlayerChips(); //lTop.setAlignment(); setTopLabel("Test Label"); primaryStage.setOnCloseRequest(e -> System.exit(0)); primaryStage.setTitle("Muehle"); primaryStage.setScene(scene); primaryStage.show(); } // end of public Muehle public void setTopLabel(String value) { lTop.setText(value); } // start methods public Pane draw_game_board() { Color bg_color = Color.rgb(255,255,0); Color stroke_color = Color.RED; Double circle_offset = 100.0; ArrayList shapes = new ArrayList(); Pane board = new Pane(); double topLeftX = (1080/2)-400; double topLeftY = 720-(720/2)-300; double topRightX =(1080/2)+200; double topRightY = (720/2)+300; Rectangle bg = new Rectangle(topLeftX,topLeftY,topRightX,topRightY); bg.setFill(bg_color); shapes.add(bg); Rectangle circle1 = new Rectangle(topLeftX,topLeftY,topRightX,topRightY); circle1.setStroke(stroke_color); circle1.setStrokeWidth(10); circle1.setFill(new Color(0.0,0.0,0.0,0.0)); shapes.add(circle1); Rectangle circle2 = new Rectangle(topLeftX + 100,topLeftY + 100,topRightX - 200,topRightY - 200); circle2.setStroke(stroke_color); circle2.setStrokeWidth(10); circle2.setFill(new Color(0.0,0.0,0.0,0.0)); shapes.add(circle2); Rectangle circle3 = new Rectangle(topLeftX + 200,topLeftY + 200,topRightX - 400,topRightY - 400); circle3.setStroke(stroke_color); circle3.setStrokeWidth(10); circle3.setFill(new Color(0.0,0.0,0.0,0.0)); shapes.add(circle3); Line line1 = new Line((topLeftX+topRightX) /2 + topLeftX/2,topLeftY,(topLeftX+topRightX) /2 + topLeftX/2,250); line1.setStroke(stroke_color); line1.setStrokeWidth(10); shapes.add(line1); Line line2 = new Line((topLeftX+topRightX) /2 + topLeftX/2,topRightY+50,(topLeftX+topRightX) /2 + topLeftX/2,520); line2.setStroke(stroke_color); line2.setStrokeWidth(10); shapes.add(line2); Line line3 = new Line(topLeftX,topRightY/2+50,topLeftX+200,topRightY/2+50); line3.setStroke(stroke_color); line3.setStrokeWidth(10); shapes.add(line3); Line line4 = new Line(topLeftX+550,topRightY/2+50,topLeftX+200+540,topRightY/2+50); line4.setStroke(stroke_color); line4.setStrokeWidth(10); shapes.add(line4); for (int i = 0; i < shapes.size() ;i++ ) { board.getChildren().add(shapes.get(i)); } // end of for drawMuehleButtons(board,topLeftX,topLeftY,topRightX,topRightY); return board; } public void drawMuehleButtons(Pane board, double topLeftX,double topLeftY,double topRightX,double topRightY) { ArrayList shapes = new ArrayList(); Color button_color = Color.BLUE; for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(0,0,i,topLeftX,topLeftY+ i*325,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(i,1,i,topRightX -230,topLeftY+ i*100,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(0,2,i,topRightX + 140,topLeftY+ i*325,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(1,0,i,topLeftX + 100,topLeftY+ i*220 +100,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(1,2,i,topRightX +40,topLeftY+ i*220 +100,button_color,game); shapes.add(button.getShape()); } for (int i = 2; i >=0; i--) { MuehleButton button = new MuehleButton(i,1,i,topRightX -230,topLeftY+ i*100 + 360,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(2,0,i,topLeftX +200,topLeftY+ i*130 +200,button_color,game); shapes.add(button.getShape()); } for (int i = 0; i < 3; i++) { MuehleButton button = new MuehleButton(0,2,i,topLeftX +540,topLeftY+ i*130 +200,button_color,game); shapes.add(button.getShape()); } game.buttons.addAll(shapes); for (int i = 0; i < shapes.size() ;i++ ) { board.getChildren().add(shapes.get(i)); } } public void drawPlayerChips() { Circle[] white_player_chips = new Circle[9]; Circle[] black_player_chips = new Circle[9]; Color stroke_color = Color.BLACK; double stroke_width = 2; double radius = 20; for (int i = 0; i < 9; i++) { white_player_chips[i] = new Circle(radius*2 +20,50*i+ 200,radius); white_player_chips[i].setStroke(stroke_color); white_player_chips[i].setStrokeWidth(stroke_width); white_player_chips[i].setFill(Color.WHITE); addShape(white_player_chips[i]); } for (int i = 0; i < 9; i++) { black_player_chips[i] = new Circle((1080-20) - radius*2,50*i+ 200,radius); black_player_chips[i].setStroke(stroke_color); black_player_chips[i].setStrokeWidth(stroke_width); black_player_chips[i].setFill(Color.BLACK); addShape(black_player_chips[i]); } game.white_player_chips = white_player_chips; game.black_player_chips = black_player_chips; } public void addShape(Shape newShape) { game_board.getChildren().add(newShape); } // end methods } // end of class Muehle