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