From f52d27eae2e36f79df93f95d4d7f83722599c50d Mon Sep 17 00:00:00 2001 From: ACIKBAS TUNA BATIKAN <tuna.acikbas@etu.unistra.fr> Date: Sun, 14 May 2023 19:30:39 +0200 Subject: [PATCH] Finished Projet --- .idea/misc.xml | 14 +++ .idea/workspace.xml | 96 ++++++++++++++++++ .../src/main/java/controller/Game.java | 21 ++-- .../src/main/java/controller/Main.java | 6 +- .../MavenChess/src/main/java/view/HUD.java | 73 +++++++++++++ .../target/classes/controller/Main.class | Bin 7767 -> 7905 bytes 6 files changed, 193 insertions(+), 17 deletions(-) create mode 100644 .idea/misc.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ddbf269 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ExternalStorageConfigurationManager" enabled="true" /> + <component name="MavenProjectsManager"> + <option name="originalFiles"> + <list> + <option value="$PROJECT_DIR$/MavenChess/MavenChess/pom.xml" /> + </list> + </option> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="openjdk-20" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/out" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..424af03 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="AutoImportSettings"> + <option name="autoReloadType" value="ALL" /> + </component> + <component name="ChangeListManager"> + <list default="true" id="48ce1122-5195-4c9c-a37c-f12e93132e40" name="Changes" comment="" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="MarkdownSettingsMigration"> + <option name="stateVersion" value="1" /> + </component> + <component name="MavenImportPreferences"> + <option name="generalSettings"> + <MavenGeneralSettings> + <option name="useMavenConfig" value="true" /> + <option name="usePluginRegistry" value="true" /> + </MavenGeneralSettings> + </option> + </component> + <component name="ProjectId" id="2PCl7NkLwAmovZQ0EAfpUg8ge55" /> + <component name="ProjectLevelVcsManager"> + <ConfirmationsSetting value="2" id="Add" /> + </component> + <component name="ProjectViewState"> + <option name="hideEmptyMiddlePackages" value="true" /> + <option name="showLibraryContents" value="true" /> + </component> + <component name="PropertiesComponent"><![CDATA[{ + "keyToString": { + "ASKED_ADD_EXTERNAL_FILES": "true", + "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "git-widget-placeholder": "main", + "last_opened_file_path": "/home/tuna/Documents/test", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "project.structure.last.edited": "Project", + "project.structure.proportion": "0.15", + "project.structure.side.proportion": "0.2", + "settings.build.tools.auto.reload": "ALL", + "settings.editor.selected.configurable": "MavenSettings", + "vue.rearranger.settings.migration": "true" + } +}]]></component> + <component name="RunAnythingCache"> + <option name="myCommands"> + <command value="mvn package" /> + </option> + </component> + <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="48ce1122-5195-4c9c-a37c-f12e93132e40" name="Changes" comment="" /> + <created>1682968775520</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1682968775520</updated> + <workItem from="1682968776515" duration="319000" /> + <workItem from="1683094832856" duration="998000" /> + <workItem from="1683099105537" duration="842000" /> + <workItem from="1683116894461" duration="148000" /> + <workItem from="1683893818874" duration="10904000" /> + <workItem from="1683975652605" duration="12733000" /> + <workItem from="1684064051497" duration="8587000" /> + </task> + <servers /> + </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="version" value="3" /> + </component> + <component name="VcsManagerConfiguration"> + <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> + </component> + <component name="XDebuggerManager"> + <breakpoint-manager> + <breakpoints> + <line-breakpoint enabled="true" type="java-line"> + <url>file://$PROJECT_DIR$/MavenChess/MavenChess/src/main/java/view/BoardView.java</url> + <line>233</line> + <option name="timeStamp" value="1" /> + </line-breakpoint> + </breakpoints> + </breakpoint-manager> + </component> +</project> \ No newline at end of file diff --git a/MavenChess/MavenChess/src/main/java/controller/Game.java b/MavenChess/MavenChess/src/main/java/controller/Game.java index e1c8ff8..16e2858 100644 --- a/MavenChess/MavenChess/src/main/java/controller/Game.java +++ b/MavenChess/MavenChess/src/main/java/controller/Game.java @@ -1,5 +1,6 @@ package controller; +import javafx.scene.control.Alert; import javafx.scene.layout.AnchorPane; import model.*; import view.*; @@ -8,7 +9,7 @@ import java.util.ArrayList; public class Game { private int status; - public static final int WHITE_TURN = 1, BLACK_TURN = 2, WHITE_WON = 3, BLACK_WON = 4; + public static final int WHITE_TURN = 1, BLACK_TURN = 2,GAME_OVER=3; public Game() { status = WHITE_TURN; @@ -53,7 +54,7 @@ public class Game { // if piece is colored (aka targeted), we consider it an action to apply (tile click) if(clickedPiece.isTargeted()) { TileView tile = boardView.getTile(clickedPiece.getPosition().getID()); - clickTile(tile, board, boardView, material, model, log, hud); + clickTile(tile, board, boardView, material, model, log, hud,group2d); return; } if(clickedPiece.isWhite() && isWhiteTurn() || clickedPiece.isBlack() && isBlackTurn()) { @@ -129,7 +130,7 @@ public class Game { } } - public void clickTile(TileView clickedTile, Board board, BoardView boardView, CustomMaterial material, Custom3dModel model, Log log, HUD hud) { + public void clickTile(TileView clickedTile, Board board, BoardView boardView, CustomMaterial material, Custom3dModel model, Log log, HUD hud, AnchorPane group2d) { boolean moved = false; // to tell if an action/movement was used or not @@ -283,16 +284,10 @@ public class Game { nextTurn(); // change player turn log.save(board, boardView); // saves current board hud.rollbackShow(); // show rollback button (if not showed already) - + hud.addGiveup(group2d); // signals if there is a check ! boolean echec = checkVerification(board); // test the opponent check (turn just changed) if(echec) { - if (isWhiteTurn()) { - System.out.println("echec"); - } - if (isBlackTurn()) { - System.out.println("echec"); - } // signals if there is a checkmate ! boolean canPreventMate = false; @@ -307,12 +302,8 @@ public class Game { // checkmate !!! if(!canPreventMate) { - if (isWhiteTurn()) { + hud.afficheMessagefini(getStatus(),group2d,this); - } - if (isBlackTurn()) { - - } } } } diff --git a/MavenChess/MavenChess/src/main/java/controller/Main.java b/MavenChess/MavenChess/src/main/java/controller/Main.java index 40ef9e4..32b69fb 100644 --- a/MavenChess/MavenChess/src/main/java/controller/Main.java +++ b/MavenChess/MavenChess/src/main/java/controller/Main.java @@ -78,6 +78,7 @@ public class Main extends Application { // init - 2d interface hud = new HUD(); + hud.resize(stage.getWidth(), stage.getHeight()); hud.addAllToScene(group2d); @@ -88,7 +89,8 @@ public class Main extends Application { log = new Log(); // event -------------------------------------------------------------- - + // event - GiveUp buttons (mouse click) + hud.initEventGiveup(game,group2d); // event - camera rotation (mouse dragging) camera.initMouseControl(scene.get3d()); // allow user to move camera with mouse, with some constraints @@ -106,7 +108,7 @@ public class Main extends Application { // event - click on (visual) "colored tiles" to move the selected piece there for(int n = 0 ; n < 64 ; n++) { TileView tile = boardView.getTile(n); - tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> game.clickTile(tile, board, boardView, material, model, log, hud)); + tile.getObj().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> game.clickTile(tile, board, boardView, material, model, log, hud,group2d)); } // event - window resize diff --git a/MavenChess/MavenChess/src/main/java/view/HUD.java b/MavenChess/MavenChess/src/main/java/view/HUD.java index a644081..d2d53da 100644 --- a/MavenChess/MavenChess/src/main/java/view/HUD.java +++ b/MavenChess/MavenChess/src/main/java/view/HUD.java @@ -1,8 +1,12 @@ package view; +import controller.Game; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.collections.ObservableListBase; +import javafx.event.ActionEvent; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.effect.Glow; import javafx.scene.image.Image; @@ -11,6 +15,11 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; +import javafx.stage.WindowEvent; +import model.Piece; + +import java.nio.file.FileStore; +import java.util.EventListener; public class HUD { @@ -18,8 +27,13 @@ public class HUD { private ImageView standard_imgView, variant_imgView, rollback_imgView; private Rectangle darkener; + private Button giveup; + private Button mutualGiveup; + private boolean giveupShowed; + private ComboBox combo; private boolean comboShowed; + private Alert finishedGame; public HUD() { standard_img = new Image("/standard.jpg"); @@ -56,6 +70,15 @@ public class HUD { rollback_imgView.setFitWidth(64); rollbackHide(); + + giveup = new Button(); + giveup.setText("Give UP"); + mutualGiveup = new Button(); + mutualGiveup.setText("Mutual Suicide"); + + giveupShowed = false; + + String pieces[] = {"Queen", "Rook", "Bishop", "Knight"}; combo = new ComboBox(FXCollections.observableArrayList(pieces)); combo.getSelectionModel().select(0); @@ -80,6 +103,15 @@ public class HUD { rollback_imgView.setX(width - 36 - (avg / 12)); rollback_imgView.setY(height - 56 - (avg / 12)); rollback_imgView.setFitWidth(avg / 12); + + giveup.setTranslateX(64); + giveup.setTranslateY(height-100); + giveup.setStyle("-fx-font: 20 arial;"); + + + mutualGiveup.setTranslateX(200); + mutualGiveup.setTranslateY(height-100); + mutualGiveup.setStyle("-fx-font: 20 arial;"); //combo.setStyle("-fx-font: " + avg / 24 + " arial;"); //combo.setTranslateX(avg / 24); //combo.setTranslateY(avg / 24); @@ -118,6 +150,12 @@ public class HUD { comboShowed = true; } } + public void addGiveup(AnchorPane group2d){ + if(!giveupShowed){ + group2d.getChildren().addAll(giveup,mutualGiveup); + giveupShowed = true; + } + } public void removeCombo(AnchorPane group2d) { if(comboShowed) { @@ -137,4 +175,39 @@ public class HUD { } return id; } + + public void afficheMessagefini(int color,AnchorPane group2D,Game game){ + + finishedGame = new Alert(Alert.AlertType.INFORMATION); + finishedGame.setTitle("Fin du jeu"); + finishedGame.setHeaderText("Le jeux fini"); + if(color == Piece.WHITE){ + + finishedGame.setContentText("Le gentleman possèdant les belles pieces de couleur claire a décidé de donner la victoire a son adversaire"); + + } + else if(color == Piece.BLACK) { + finishedGame.setContentText("Le gentleman possèdant les belles pieces de couleur sombre a décidé de donner la victoire a son adversaire"); + + } + else{ + finishedGame.setContentText("Les deux gentlemans sont cons et ont décidé de donner la victoire a leurs adversaires"); + } + finishedGame.showAndWait(); + removeGiveUps(group2D); + rollbackHide(); + game.setStatus(Game.GAME_OVER); + + } + + public void removeGiveUps(AnchorPane group2d){ + group2d.getChildren().removeAll(giveup,mutualGiveup); + + } + + public void initEventGiveup(Game game,AnchorPane group2d) { + giveup.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> afficheMessagefini(game.getStatus(),group2d,game)); + mutualGiveup.addEventHandler(MouseEvent.MOUSE_CLICKED, event ->afficheMessagefini(3,group2d,game)); + + } } diff --git a/MavenChess/MavenChess/target/classes/controller/Main.class b/MavenChess/MavenChess/target/classes/controller/Main.class index 1bc0d25ec3cc5cf6c7e59f74b24bec10dc697615..9b83fd76fad385a5877f695d84049fe35c95538a 100644 GIT binary patch delta 2326 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 delta 2344 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 -- GitLab