From 0d892f03bb4cc31b6a28be29945a01b67d6c7b74 Mon Sep 17 00:00:00 2001 From: Mykola Fesenko Date: Tue, 30 Sep 2025 14:53:58 +0200 Subject: [PATCH] 20.09 pa --- Game.class | Bin 2606 -> 5206 bytes Game.java | 135 ++++++++++++++++++++++++++++++++++++++++++++++--- Game.~ava | 139 +++++++++++++++++++++++++++++++++++++++++++++++---- Muehle.class | Bin 6063 -> 6841 bytes Muehle.java | 80 ++++++++++++++++++++--------- Muehle.~ava | 79 ++++++++++++++++++++--------- 6 files changed, 368 insertions(+), 65 deletions(-) diff --git a/Game.class b/Game.class index 330f55a3b6c39c1f3bfcd1dfbc36c1662f09f44e..943e1504f093d385e96144d7b640961c48d09cb4 100644 GIT binary patch literal 5206 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 AzyJUM diff --git a/Game.java b/Game.java index 4af8618..6c46613 100644 --- a/Game.java +++ b/Game.java @@ -2,6 +2,9 @@ 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; +import java.util.AbstractList; /** * * Beschreibung @@ -22,31 +25,50 @@ public class Game { public Pane game_board; public Chip current_selection; - public void start(Pane gameBoard) { + 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) { if (game_state == 0) { + Chip newChip; if (currentTurnPlayer == "White") { - addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); + newChip = addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); white_chips--; + setChipCount(white_chips,"White"); } else { - addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); + newChip = addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); black_chips--; + setChipCount(white_chips,"Black"); } + if (checkCombo(newChip)) { + System.out.println("Comb!"); + } // end of if(newChip); game_board.getChildren().remove(button.getShape()); nextTurn(); - } // end of if - - + } + if(game_state == 1) { + // second state of game + setLabelText("Second State"); + } } - public void addChip(int relX, int relY,double absX, double absY, Color color) { - Chip chip = new Chip(relX,relY,absX,absY,color,this); + public Chip addChip(int relX, int relY,double absX, double absY, Color color) { + Chip chip = new Chip(relX,relY,absX,absY,color,this); + chips.add(chip); addShape(chip.getShape()); + return chip; } public void addShape(Shape newShape) { game_board.getChildren().add(newShape); @@ -57,11 +79,108 @@ public class Game { } public void nextTurn() { + if (white_chips == 0 && black_chips == 0) { + game_state = 1; + } + 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 boolean checkCombo(Chip chip) { + return checkCombo(chip.relativeX, chip.relativeY); + } + public boolean checkCombo(int relX, int relY) { + ArrayList hChips = getHorizontalCloseChips(relX,relY); + ArrayList vChips = getHorizontalCloseChips(relX,relY); + System.out.println(hChips.get(0).relativeX); + Chip start_chip = getChipByPos(relX,relY); + + if (start_chip.color == hChips.get(0).color && start_chip.color == hChips.get(1).color) { + return true; + } + if (start_chip.color == vChips.get(0).color && start_chip.color == vChips.get(1).color) { + return true; + } + return false; + } + + public ArrayList getHorizontalCloseChips(int relX, int relY) { + ArrayList result = new ArrayList(); + if (relX == 0) { + result.add(getChipByPos(1,relY)); + result.add(getChipByPos(2,relY)); + } + else if ( relX == 1) { + result.add(getChipByPos(0,relY)); + result.add(getChipByPos(2,relY)); + } + else { + result.add(getChipByPos(0,relY)); + result.add(getChipByPos(1,relY)); + } // end of if-else + return result; + } + public ArrayList getVerticalCloseChips(int relX, int relY) { + ArrayList result = new ArrayList(); + if (relY == 0) { + result.add(getChipByPos(relX,1)); + result.add(getChipByPos(relX,2)); + } + else if ( relY == 1) { + result.add(getChipByPos(relX,0)); + result.add(getChipByPos(relX,2)); + } + else { + result.add(getChipByPos(relX,0)); + result.add(getChipByPos(relX,1)); + } // end of if-else + return result; + } + public Chip getChipByPos(int relX, int relY) { + + for (int i = 0; i < chips.size()-1; i++) { + if (chips.get(i).relativeX == relX && chips.get(i).relativeY == relY ) { + return chips.get(i); + } // end of if + } + return null; + } + 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/Game.~ava b/Game.~ava index e1dfaa6..318e4c2 100644 --- a/Game.~ava +++ b/Game.~ava @@ -2,6 +2,9 @@ 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; +import java.util.AbstractList; /** * * Beschreibung @@ -13,7 +16,7 @@ import javafx.scene.paint.Color; public class Game { public String currentTurnPlayer = "White"; - public int game_state = 0; // 0 == players placing their chips; 1 = players moving their chips + public int game_state = 0; // 0 == players placing their chips; 1 = players moving their chips; 2 = player can remove chip public int white_chips = 9; public int black_chips = 9; @@ -22,31 +25,50 @@ public class Game { public Pane game_board; public Chip current_selection; - public void start(Pane gameBoard) { + 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) { if (game_state == 0) { + Chip newChip; if (currentTurnPlayer == "White") { - addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); + newChip = addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.WHITE); white_chips--; + setChipCount(white_chips,"White"); } else { - addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); + newChip = addChip(button.relativeX,button.relativeY,button.absoluteX,button.absoluteY,Color.BLACK); black_chips--; + setChipCount(white_chips,"Black"); } + if (checkCombo(newChip)) { + System.out.println("Comb!"); + } // end of if(newChip); game_board.getChildren().remove(button.getShape()); nextTurn(); - } // end of if - - + } + if(game_state == 1) { + // second state of game + setLabelText("Second State"); + } } - public void addChip(int relX, int relY,double absX, double absY, Color color) { - Chip chip = new Chip(relX,relY,absX,absY,color,this); + public Chip addChip(int relX, int relY,double absX, double absY, Color color) { + Chip chip = new Chip(relX,relY,absX,absY,color,this); + chips.add(chip); addShape(chip.getShape()); + return chip; } public void addShape(Shape newShape) { game_board.getChildren().add(newShape); @@ -57,11 +79,110 @@ public class Game { } public void nextTurn() { + if (white_chips == 0 && black_chips == 0) { + game_state = 1; + } + 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 boolean checkCombo(Chip chip) { + return checkCombo(chip.relativeX, chip.relativeY); + } + public boolean checkCombo(int relX, int relY) { + ArrayList hChips = getHorizontalCloseChips(relX,relY); + ArrayList vChips = getHorizontalCloseChips(relX,relY); + System.out.println(hChips.get(0).relativeX); + Chip start_chip = getChipByPos(relX,relY); + + if (start_chip.color == hChips.get(0).color && start_chip.color == hChips.get(1).color) { + return true; + } + if (start_chip.color == vChips.get(0).color && start_chip.color == vChips.get(1).color) { + return true; + } + return false; + } + + public ArrayList getHorizontalCloseChips(int relX, int relY) { + ArrayList result = new ArrayList(); + if (relX == 0) { + result.add(getChipByPos(1,relY)); + result.add(getChipByPos(2,relY)); + } + else if ( relX == 1) { + result.add(getChipByPos(0,relY)); + result.add(getChipByPos(2,relY)); + } + else { + result.add(getChipByPos(0,relY)); + result.add(getChipByPos(1,relY)); + } // end of if-else + return result; + } + public ArrayList getVerticalCloseChips(int relX, int relY) { + ArrayList result = new ArrayList(); + if (relY == 0) { + result.add(getChipByPos(relX,1)); + result.add(getChipByPos(relX,2)); + } + else if ( relY == 1) { + result.add(getChipByPos(relX,0)); + result.add(getChipByPos(relX,2)); + } + else { + result.add(getChipByPos(relX,0)); + result.add(getChipByPos(relX,1)); + } // end of if-else + return result; + } + public Chip getChipByPos(int relX, int relY) { + + for (int i = 0; i < chips.size()-1; i++) { + System.out.println(i); + if (chips.get(i).relativeX == relX && chips.get(i).relativeY == relY ) { + System.out.println("Found"); + return chips.get(i); + } // end of if + } + return null; + } + 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.class b/Muehle.class index 693f132c1b3d049b12f3bf9bd27dde9a74cbab7c..b24a4648a4518d6531fc9aad0623944efd0bdc5a 100644 GIT binary patch literal 6841 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