From 8622783206e541dca7fadef419ae69773c976651 Mon Sep 17 00:00:00 2001 From: Nikolai Date: Wed, 22 Oct 2025 10:50:52 +0200 Subject: [PATCH] 22.10 --- Chip.java | 150 +++++------ Game.java | 630 +++++++++++++++++++++++----------------------- Muehle.java | 484 +++++++++++++++++------------------ MuehleButton.java | 152 +++++------ 4 files changed, 708 insertions(+), 708 deletions(-) diff --git a/Chip.java b/Chip.java index 89a7a27..a01de85 100644 --- a/Chip.java +++ b/Chip.java @@ -1,75 +1,75 @@ -import javafx.scene.paint.Color; -import javafx.scene.shape.Shape; -import javafx.scene.shape.Circle; -import javafx.event.Event; -import javafx.event.EventHandler; -import javafx.scene.input.MouseEvent; -/** - * - * Beschreibung - * - * @version 1.0 vom 30.09.2025 - * @author - */ - -public class Chip { - public Game game; - - public Color color; - - public int relativeX; - public int relativeY; - - public double absoluteX; - public double absoluteY; - - public double radius; - - - public Circle circle; - - public int id; - - public Chip(int id, int relX, int relY,double absX, double absY, Color color, Game game) { - this.id = id; - - relativeX = relX; - relativeY = relY; - - absoluteX = absX; - absoluteY = absY; - - this.color = color; - - radius = 20; - - this.color = color; - circle = new Circle(absoluteX, absoluteY, radius); - circle.setFill(this.color); - - this.game = game; - circle.addEventHandler(MouseEvent.MOUSE_CLICKED, mouse_clicked); - - } - public void setPositionX(double X) { - absoluteX = X; - circle.setCenterX(absoluteX); - } - public void setPositionY(double Y) { - absoluteY = Y; - circle.setCenterY(absoluteY); - } - public Shape getShape() { - return circle; - - } - EventHandler mouse_clicked = new EventHandler() { - public void handle(MouseEvent handle) { - chip_clicked(); - } - - }; - public void chip_clicked() { - game.chip_clicked(this); -} -} // end of Chip +import javafx.scene.paint.Color; +import javafx.scene.shape.Shape; +import javafx.scene.shape.Circle; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.scene.input.MouseEvent; +/** + * + * Beschreibung + * + * @version 1.0 vom 30.09.2025 + * @author + */ + +public class Chip { + public Game game; + + public Color color; + + public int relativeX; + public int relativeY; + + public double absoluteX; + public double absoluteY; + + public double radius; + + + public Circle circle; + + public int id; + + public Chip(int id, int relX, int relY,double absX, double absY, Color color, Game game) { + this.id = id; + + relativeX = relX; + relativeY = relY; + + absoluteX = absX; + absoluteY = absY; + + this.color = color; + + radius = 20; + + this.color = color; + circle = new Circle(absoluteX, absoluteY, radius); + circle.setFill(this.color); + + this.game = game; + circle.addEventHandler(MouseEvent.MOUSE_CLICKED, mouse_clicked); + + } + public void setPositionX(double X) { + absoluteX = X; + circle.setCenterX(absoluteX); + } + public void setPositionY(double Y) { + absoluteY = Y; + circle.setCenterY(absoluteY); + } + public Shape getShape() { + return circle; + + } + EventHandler mouse_clicked = new EventHandler() { + public void handle(MouseEvent handle) { + chip_clicked(); + } + + }; + public void chip_clicked() { + game.chip_clicked(this); +} +} // end of Chip diff --git a/Game.java b/Game.java index 9348392..49864f6 100644 --- a/Game.java +++ b/Game.java @@ -1,316 +1,316 @@ -import javafx.scene.shape.Shape; -import java.util.ArrayList; -import javafx.scene.layout.Pane; -import javafx.scene.paint.Color; -import javafx.scene.control.Label; -import javafx.scene.shape.Circle; - -/** - * - * Beschreibung - * - * @version 1.0 vom 30.09.2025 - * @author - */ - -public class Game { - - public int[][] win_comb = {{0,3,6},{9,4,12} - ,{18,5,21},{1,10,19},{22,13,7},{20,15,23},{11,16,14},{2,17,8} - ,{0,1,2},{9,10,11},{18,19,20},{3,4,5},{12,13,14},{6,7,8},{21,22,23},{15,16,17} - }; - public int[][] close_chips = {{1,3},{0,2,10},{1,17},{0,6},{3,5,9,12},{18,21} - ,{3,7},{6,8},{7,17},{4,10},{9,11,19,1},{10,16},{4,13},{7,12,14,22},{13,16} - ,{20,23},{15,17,11,14},{2,16,8},{3,19},{18,20,10},{19,15},{5,22},{21,13,23} - ,{22,15} - }; - public String currentTurnPlayer = "White"; - public int game_state = 0; // 0 == players placing their chips; 1 = players moving their chips; 2,3 = player can remove chip - public int white_chips = 4; - public int black_chips = 4; - - public int white_combos = 0; - public int black_combos = 0; - - public ArrayList buttons = new ArrayList(); - public ArrayList chips = new ArrayList(); - public Pane game_board; - public Chip current_selection; - - public Label LTop; - - public Circle[] white_player_chips = new Circle[9]; - public Circle[] black_player_chips = new Circle[9]; - - - public void start(Pane gameBoard, Label label) { - game_board = gameBoard; - LTop = label; - - setLabelText("White Turn"); - } - - public void chip_button_clicked(MuehleButton button) { - System.out.println("id" + button.id); - if (game_state == 0) { - Chip newChip; - if (currentTurnPlayer == "White") { - newChip = addChip(button.id,button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); - white_chips--; - setChipCount(white_chips,"White"); - - } - else { - newChip = addChip(button.id,button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); - black_chips--; - setChipCount(white_chips,"Black"); - } - checkCombo(newChip); - removeChipTurn(); - game_board.getChildren().remove(button); - - } - if(game_state == 1) { - // second state of game - if(current_selection != null) { - moveChip(current_selection, button); - - - } - //setLabelText("Second State"); - } - - } - public void moveChip(Chip chip,MuehleButton target) { - Chip newChip = new Chip(target.id,0,0,target.absoluteX,target.absoluteY,chip.color,chip.game); - MuehleButton newButton = new MuehleButton(chip.id,0,0,chip.absoluteX, chip.absoluteY,chip.game); - - buttons.add(newButton); - chips.add(newChip); - - addShape(newButton.getShape()); - addShape(newChip.getShape()); - - buttons.remove(target); - chips.remove(chip); - game_board.getChildren().remove(target.getShape()); - game_board.getChildren().remove(chip.getShape()); - - checkCombo(newChip); - removeChipTurn(); - } - public Chip addChip(int id,int relX, int relY,double absX, double absY, Color color) { - Chip chip = new Chip(id,relX,relY,absX,absY,color,this); - chips.add(chip); - addShape(chip.getShape()); - return chip; - } - public void removeChip(Chip chip) { - MuehleButton newButton = new MuehleButton(chip.id,0,0,chip.absoluteX,chip.absoluteY,chip.game); - buttons.add(newButton); - game_board.getChildren().add(newButton.getShape()); - - chips.remove(chip); - game_board.getChildren().remove(chip.getShape()); - } - public void addShape(Shape newShape) { - game_board.getChildren().add(newShape); - - } - public void chip_clicked(Chip chip) { - - if(game_state == 2 && chip.color == Color.BLACK) { - removeChip(chip); - white_combos--; - removeChipTurn(); - - } - else if (game_state == 3 && chip.color == Color.WHITE) { - removeChip(chip); - black_combos--; - removeChipTurn(); - } - - if (game_state == 1) { - if(currentTurnPlayer == "White" && chip.color == Color.WHITE) { - if(current_selection == null) { - current_selection = chip; - drawAvaibleButtons(current_selection); - } - else { - current_selection = chip; - hideAllButtons(); - drawAvaibleButtons(current_selection); - } // end of if-else - } - else if (currentTurnPlayer == "Black" && chip.color == Color.BLACK){ - if(current_selection == null) { - current_selection = chip; - drawAvaibleButtons(current_selection); - } - else { - current_selection = chip; - hideAllButtons(); - drawAvaibleButtons(current_selection); - } - } // end of if-else - - } - - } - public void hideAllButtons() { - for (int i = 0; i < buttons.size(); i++) { - buttons.get(i).setActive(false); - } - } - public void drawAvaibleButtons(Chip chip) { - ArrayList avaible_buttons = new ArrayList(); - for (int i = 0; i < close_chips[chip.id].length ;i++ ) { - if (!isItTaken(close_chips[chip.id][i])) { - avaible_buttons.add(getButtonById(close_chips[chip.id][i])); - } // end of if - - } // end of for - if(avaible_buttons.size() > 0) { - for (int i = 0; i < avaible_buttons.size(); i++) { - avaible_buttons.get(i).setActive(true); - } // end of for - } - - - } - - public void removeChipTurn() { - if (white_combos > 0 || black_combos > 0) { - if (white_combos > 0) { - setLabelText("White, You can remove "+ white_combos + " Black Pieces"); - game_state = 2; - - } - if (black_combos > 0) { - setLabelText("Black, You can remove "+ black_combos + " White Pieces"); - game_state = 3; - } - - } - else { - nextTurn(); - } // end of if-else - } - public void nextTurn() { - - if (white_chips == 0 && black_chips == 0) { - game_state = 1; - hideAllButtons(); - if (current_selection != null) { - current_selection = null; - } // end of if - } - else { - game_state = 0; - } - - if (currentTurnPlayer == "White") { - setLabelText("Black Turn"); - currentTurnPlayer = "Black"; - } - else { - currentTurnPlayer = "White"; - setLabelText("White Turn"); - } // end of if-else - } - - - public void setLabelText(String value) { - LTop.setText(value); - } - public void checkCombo(Chip chip) { - checkCombo(chip.id); - } - public void checkCombo(int id) { - for (int i = 0; i < win_comb.length ;i++ ) { - for (int j = 0; j < win_comb[i].length; j++) { - if (win_comb[i][j] == id) { - Chip[] chips_to_check = {getChipById(win_comb[i][0]),getChipById(win_comb[i][1]),getChipById(win_comb[i][2])}; - //System.out.println("ID: " +id + " 0:"+win_comb[i][0]+" 1:"+win_comb[i][1]+" 2:"+win_comb[i][2]); - if (checkChipsColor(chips_to_check)) { - if (getChipById(id).color == Color.WHITE) { - white_combos++; - } - else { - black_combos++; - } // end of if-else - } // end of if - } - } - } - - } - public boolean checkChipsColor(Chip[] chips) { - if (chips[0] != null && chips[1] != null && chips[2] != null) { - if (chips[0].color == chips[1].color && chips[0].color == chips[2].color) { - return true; - } - else { - - return false; - } - } - else { - return false; - } // end of if-else - } - - public Chip getChipById(int id) { - for (int i = 0; i < chips.size(); i++) { - if (chips.get(i).id == id) { - return chips.get(i); - } // end of if - } // end of for - return null; - } - public MuehleButton getButtonById(int id) { - for (int i = 0; i < buttons.size(); i++) { - if (buttons.get(i).id == id) { - return buttons.get(i); - } // end of if - } // end of for - return null; - } - public boolean isItTaken(int id) { - for (int i = 0; i < chips.size(); i++) { - if (chips.get(i).id == id) { - return true; - } // end of if - } // end of for - return false; - } - - public void setChipCount(int value, String player) { - System.out.println(white_chips-1); - if (player == "White") { - if (white_chips == 0) { - for (int i = 0; i < white_player_chips.length -1; i++) { - white_player_chips[i].setVisible(false); - } - } - for (int i = white_player_chips.length-1; i >= value; i--) { - white_player_chips[i].setVisible(false); - } - - } - else { - { - if (white_chips == 0) { - for (int i = 0; i < black_player_chips.length -1; i++) { - black_player_chips[i].setVisible(false); - } // end of for - } // end of if - for (int i = black_player_chips.length-1; i >= value; i--) { - black_player_chips[i].setVisible(false); - } - - } - } // end of if-else - } +import javafx.scene.shape.Shape; +import java.util.ArrayList; +import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; +import javafx.scene.control.Label; +import javafx.scene.shape.Circle; + +/** + * + * Beschreibung + * + * @version 1.0 vom 30.09.2025 + * @author + */ + +public class Game { + + public int[][] win_comb = {{0,3,6},{9,4,12} + ,{18,5,21},{1,10,19},{22,13,7},{20,15,23},{11,16,14},{2,17,8} + ,{0,1,2},{9,10,11},{18,19,20},{3,4,5},{12,13,14},{6,7,8},{21,22,23},{15,16,17} + }; + public int[][] close_chips = {{1,3},{0,2,10},{1,17},{0,6},{3,5,9,12},{18,21} + ,{3,7},{6,8},{7,17},{4,10},{9,11,19,1},{10,16},{4,13},{7,12,14,22},{13,16} + ,{20,23},{15,17,11,14},{2,16,8},{3,19},{18,20,10},{19,15},{5,22},{21,13,23} + ,{22,15} + }; + public String currentTurnPlayer = "White"; + public int game_state = 0; // 0 == players placing their chips; 1 = players moving their chips; 2,3 = player can remove chip + public int white_chips = 4; + public int black_chips = 4; + + public int white_combos = 0; + public int black_combos = 0; + + public ArrayList buttons = new ArrayList(); + public ArrayList chips = new ArrayList(); + public Pane game_board; + public Chip current_selection; + + public Label LTop; + + public Circle[] white_player_chips = new Circle[9]; + public Circle[] black_player_chips = new Circle[9]; + + + public void start(Pane gameBoard, Label label) { + game_board = gameBoard; + LTop = label; + + setLabelText("White Turn"); + } + + public void chip_button_clicked(MuehleButton button) { + System.out.println("id" + button.id); + if (game_state == 0) { + Chip newChip; + if (currentTurnPlayer == "White") { + newChip = addChip(button.id,button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); + white_chips--; + setChipCount(white_chips,"White"); + + } + else { + newChip = addChip(button.id,button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); + black_chips--; + setChipCount(white_chips,"Black"); + } + checkCombo(newChip); + removeChipTurn(); + game_board.getChildren().remove(button); + + } + if(game_state == 1) { + // second state of game + if(current_selection != null) { + moveChip(current_selection, button); + + + } + //setLabelText("Second State"); + } + + } + public void moveChip(Chip chip,MuehleButton target) { + Chip newChip = new Chip(target.id,0,0,target.absoluteX,target.absoluteY,chip.color,chip.game); + MuehleButton newButton = new MuehleButton(chip.id,0,0,chip.absoluteX, chip.absoluteY,chip.game); + + buttons.add(newButton); + chips.add(newChip); + + addShape(newButton.getShape()); + addShape(newChip.getShape()); + + buttons.remove(target); + chips.remove(chip); + game_board.getChildren().remove(target.getShape()); + game_board.getChildren().remove(chip.getShape()); + + checkCombo(newChip); + removeChipTurn(); + } + public Chip addChip(int id,int relX, int relY,double absX, double absY, Color color) { + Chip chip = new Chip(id,relX,relY,absX,absY,color,this); + chips.add(chip); + addShape(chip.getShape()); + return chip; + } + public void removeChip(Chip chip) { + MuehleButton newButton = new MuehleButton(chip.id,0,0,chip.absoluteX,chip.absoluteY,chip.game); + buttons.add(newButton); + game_board.getChildren().add(newButton.getShape()); + + chips.remove(chip); + game_board.getChildren().remove(chip.getShape()); + } + public void addShape(Shape newShape) { + game_board.getChildren().add(newShape); + + } + public void chip_clicked(Chip chip) { + + if(game_state == 2 && chip.color == Color.BLACK) { + removeChip(chip); + white_combos--; + removeChipTurn(); + + } + else if (game_state == 3 && chip.color == Color.WHITE) { + removeChip(chip); + black_combos--; + removeChipTurn(); + } + + if (game_state == 1) { + if(currentTurnPlayer == "White" && chip.color == Color.WHITE) { + if(current_selection == null) { + current_selection = chip; + drawAvaibleButtons(current_selection); + } + else { + current_selection = chip; + hideAllButtons(); + drawAvaibleButtons(current_selection); + } // end of if-else + } + else if (currentTurnPlayer == "Black" && chip.color == Color.BLACK){ + if(current_selection == null) { + current_selection = chip; + drawAvaibleButtons(current_selection); + } + else { + current_selection = chip; + hideAllButtons(); + drawAvaibleButtons(current_selection); + } + } // end of if-else + + } + + } + public void hideAllButtons() { + for (int i = 0; i < buttons.size(); i++) { + buttons.get(i).setActive(false); + } + } + public void drawAvaibleButtons(Chip chip) { + ArrayList avaible_buttons = new ArrayList(); + for (int i = 0; i < close_chips[chip.id].length ;i++ ) { + if (!isItTaken(close_chips[chip.id][i])) { + avaible_buttons.add(getButtonById(close_chips[chip.id][i])); + } // end of if + + } // end of for + if(avaible_buttons.size() > 0) { + for (int i = 0; i < avaible_buttons.size(); i++) { + avaible_buttons.get(i).setActive(true); + } // end of for + } + + + } + + public void removeChipTurn() { + if (white_combos > 0 || black_combos > 0) { + if (white_combos > 0) { + setLabelText("White, You can remove "+ white_combos + " Black Pieces"); + game_state = 2; + + } + if (black_combos > 0) { + setLabelText("Black, You can remove "+ black_combos + " White Pieces"); + game_state = 3; + } + + } + else { + nextTurn(); + } // end of if-else + } + public void nextTurn() { + + if (white_chips == 0 && black_chips == 0) { + game_state = 1; + hideAllButtons(); + if (current_selection != null) { + current_selection = null; + } // end of if + } + else { + game_state = 0; + } + + if (currentTurnPlayer == "White") { + setLabelText("Black Turn"); + currentTurnPlayer = "Black"; + } + else { + currentTurnPlayer = "White"; + setLabelText("White Turn"); + } // end of if-else + } + + + public void setLabelText(String value) { + LTop.setText(value); + } + public void checkCombo(Chip chip) { + checkCombo(chip.id); + } + public void checkCombo(int id) { + for (int i = 0; i < win_comb.length ;i++ ) { + for (int j = 0; j < win_comb[i].length; j++) { + if (win_comb[i][j] == id) { + Chip[] chips_to_check = {getChipById(win_comb[i][0]),getChipById(win_comb[i][1]),getChipById(win_comb[i][2])}; + //System.out.println("ID: " +id + " 0:"+win_comb[i][0]+" 1:"+win_comb[i][1]+" 2:"+win_comb[i][2]); + if (checkChipsColor(chips_to_check)) { + if (getChipById(id).color == Color.WHITE) { + white_combos++; + } + else { + black_combos++; + } // end of if-else + } // end of if + } + } + } + + } + public boolean checkChipsColor(Chip[] chips) { + if (chips[0] != null && chips[1] != null && chips[2] != null) { + if (chips[0].color == chips[1].color && chips[0].color == chips[2].color) { + return true; + } + else { + + return false; + } + } + else { + return false; + } // end of if-else + } + + public Chip getChipById(int id) { + for (int i = 0; i < chips.size(); i++) { + if (chips.get(i).id == id) { + return chips.get(i); + } // end of if + } // end of for + return null; + } + public MuehleButton getButtonById(int id) { + for (int i = 0; i < buttons.size(); i++) { + if (buttons.get(i).id == id) { + return buttons.get(i); + } // end of if + } // end of for + return null; + } + public boolean isItTaken(int id) { + for (int i = 0; i < chips.size(); i++) { + if (chips.get(i).id == id) { + return true; + } // end of if + } // end of for + return false; + } + + public void setChipCount(int value, String player) { + System.out.println(white_chips-1); + if (player == "White") { + if (white_chips == 0) { + for (int i = 0; i < white_player_chips.length -1; i++) { + white_player_chips[i].setVisible(false); + } + } + for (int i = white_player_chips.length-1; i >= value; i--) { + white_player_chips[i].setVisible(false); + } + + } + else { + { + if (white_chips == 0) { + for (int i = 0; i < black_player_chips.length -1; i++) { + black_player_chips[i].setVisible(false); + } // end of for + } // end of if + for (int i = black_player_chips.length-1; i >= value; i--) { + black_player_chips[i].setVisible(false); + } + + } + } // end of if-else + } } \ No newline at end of file diff --git a/Muehle.java b/Muehle.java index 4ae2873..2544ea8 100644 --- a/Muehle.java +++ b/Muehle.java @@ -1,242 +1,242 @@ -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 buttons = new ArrayList(); - - int id_count = 0; - - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,0,i,topLeftX,topLeftY+ i*325,game); - id_count++; - buttons.add(button); - } - - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,1,i,topRightX -230,topLeftY+ i*100,game); - id_count++; - buttons.add(button); - } - - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,2,i,topRightX + 140,topLeftY+ i*325,game); - id_count++; - buttons.add(button); - } - - - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,0,i,topLeftX + 100,topLeftY+ i*220 +100,game); - id_count++; - buttons.add(button); - } - - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,2,i,topRightX +40,topLeftY+ i*220 +100,game); - id_count++; - buttons.add(button); - } - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,1,i,topRightX -230,topLeftY+ i*100 + 360,game); - id_count++; - buttons.add(button); - } - - for (int i = 0; i < 3; i++) { - - MuehleButton button = new MuehleButton(id_count,0,i,topLeftX +200,topLeftY+ i*130 +200,game); - id_count++; - buttons.add(button); - } - for (int i = 0; i < 3; i++) { - MuehleButton button = new MuehleButton(id_count,2,i,topLeftX +540,topLeftY+ i*130 +200,game); - id_count++; - buttons.add(button); - } - - game.buttons.addAll(buttons); - for (int i = 0; i < buttons.size() ;i++ ) { - board.getChildren().add(buttons.get(i).getShape()); - - } - - } - - 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 +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 buttons = new ArrayList(); + + int id_count = 0; + + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,0,i,topLeftX,topLeftY+ i*325,game); + id_count++; + buttons.add(button); + } + + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,1,i,topRightX -230,topLeftY+ i*100,game); + id_count++; + buttons.add(button); + } + + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,2,i,topRightX + 140,topLeftY+ i*325,game); + id_count++; + buttons.add(button); + } + + + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,0,i,topLeftX + 100,topLeftY+ i*220 +100,game); + id_count++; + buttons.add(button); + } + + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,2,i,topRightX +40,topLeftY+ i*220 +100,game); + id_count++; + buttons.add(button); + } + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,1,i,topRightX -230,topLeftY+ i*100 + 360,game); + id_count++; + buttons.add(button); + } + + for (int i = 0; i < 3; i++) { + + MuehleButton button = new MuehleButton(id_count,0,i,topLeftX +200,topLeftY+ i*130 +200,game); + id_count++; + buttons.add(button); + } + for (int i = 0; i < 3; i++) { + MuehleButton button = new MuehleButton(id_count,2,i,topLeftX +540,topLeftY+ i*130 +200,game); + id_count++; + buttons.add(button); + } + + game.buttons.addAll(buttons); + for (int i = 0; i < buttons.size() ;i++ ) { + board.getChildren().add(buttons.get(i).getShape()); + + } + + } + + 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 diff --git a/MuehleButton.java b/MuehleButton.java index ae57030..dbd1a24 100644 --- a/MuehleButton.java +++ b/MuehleButton.java @@ -1,76 +1,76 @@ -import javafx.scene.paint.Color; -import javafx.scene.shape.Circle; -import javafx.scene.shape.Shape; -import javafx.event.Event; -import javafx.event.EventHandler; -import javafx.scene.input.MouseEvent; -public class MuehleButton { - - public Game game; - - public int relativeX; - public int relativeY; - - public double absoluteX; - public double absoluteY; - - public Color color = Color.BLUE; - - public double radius; - - public Circle circle; - - public int id; - - public boolean isActive = true; - - public MuehleButton(int id,int relX, int relY, double absX, double absY, Game game) { - this.id = id; - - relativeX = relX; - relativeY = relY; - - absoluteX = absX; - absoluteY = absY; - - radius = 20; - this.color = color; - circle = new Circle(absoluteX, absoluteY, radius); - circle.setFill(this.color); - - this.game = game; - - circle.addEventHandler(MouseEvent.MOUSE_RELEASED, mouse_click_target); - - setActive(true); - } - - public Shape getShape() { - return circle; - - } - public void setActive(boolean value) { - isActive = value; - if(value == true) { - circle.setFill(this.color); - } - else { - //circle.setFill(Color.rgb(0,0,0,0)); - circle.setFill(Color.rgb(0,255,0)); - } - } - - EventHandler mouse_click_target = new EventHandler() { - public void handle(MouseEvent event) { - if (isActive) { - MouseClick(); - } // end of if - } - }; - - - public void MouseClick() { - game.chip_button_clicked(this); - } - -} // end of MuehleButton +import javafx.scene.paint.Color; +import javafx.scene.shape.Circle; +import javafx.scene.shape.Shape; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.scene.input.MouseEvent; +public class MuehleButton { + + public Game game; + + public int relativeX; + public int relativeY; + + public double absoluteX; + public double absoluteY; + + public Color color = Color.BLUE; + + public double radius; + + public Circle circle; + + public int id; + + public boolean isActive = true; + + public MuehleButton(int id,int relX, int relY, double absX, double absY, Game game) { + this.id = id; + + relativeX = relX; + relativeY = relY; + + absoluteX = absX; + absoluteY = absY; + + radius = 20; + this.color = color; + circle = new Circle(absoluteX, absoluteY, radius); + circle.setFill(this.color); + + this.game = game; + + circle.addEventHandler(MouseEvent.MOUSE_RELEASED, mouse_click_target); + + setActive(true); + } + + public Shape getShape() { + return circle; + + } + public void setActive(boolean value) { + isActive = value; + if(value == true) { + circle.setFill(this.color); + } + else { + //circle.setFill(Color.rgb(0,0,0,0)); + circle.setFill(Color.rgb(0,255,0)); + } + } + + EventHandler mouse_click_target = new EventHandler() { + public void handle(MouseEvent event) { + if (isActive) { + MouseClick(); + } // end of if + } + }; + + + public void MouseClick() { + game.chip_button_clicked(this); + } + +} // end of MuehleButton