From 7bc1bb498fc22587b1482a7f4131ca97492b3899 Mon Sep 17 00:00:00 2001 From: Jossua Date: Wed, 8 Oct 2025 16:21:59 +0200 Subject: [PATCH 1/2] feat(controllers/game): add score, chrono & finished game method --- .../Controllers/Game.java | 104 +++++++++++++++--- 1 file changed, 91 insertions(+), 13 deletions(-) diff --git a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java index 4e626b0..c701271 100644 --- a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java +++ b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java @@ -1,44 +1,122 @@ package Controllers; import Models.Word; +import Views.HangedManView; public class Game { private Word word; - private int errors; - private final int maxErrors = 6; + private HangedManView hangedManView; + private int errors; + private int maxErrors = 9; + private String wrongLetters; + private long startTime; + private long endTime; + private final int maxTime = 120000; // 2 minutes + + // Constructor public Game(Word word) { this.word = word; + this.hangedManView = hangedManView; this.errors = 0; + this.wrongLetters = ""; + this.startTime = System.currentTimeMillis(); + this.endTime = 0; } - /* Verify error number */ + // Getters - Errors public int getErrors() { return this.errors; } - /* Put error max */ - public int getMaxErrors() { - return this.maxErrors; + + // Getters - Wrong Letters + public String getWrongLetters() { + return this.wrongLetters; } - /* Vue call method VerifyLetter, check status letter false/True */ + // Determine if the game is lost + private boolean isLost() { + return errors >= maxErrors; + } + + // Determine if the game is won + public boolean isWon() { + int score = calculateScore(); + if (word.IsComplete() && score > 0) { + return true; + } + return false; + } + + // From view, verify if the letter is correct & finish the game if necessary (lost or won) public boolean playLetter(char c) { boolean correct = word.VerifyLetter(c); if (!correct) { errors++; + hangedManView.setState(errors); + + wrongLetters += c + " "; + hangedManView.setWrongLetters(wrongLetters); + + if (isLost()) { + finishedGame(); + } + } else { + hangedManView.setCorrectLetters(word.getHiddenWord()); + + if (word.IsComplete()) { + finishedGame(); + } } return correct; } - /* All letter is completed : Won */ - public boolean isWon() { - return word.IsComplete(); + // Finish the game + private boolean finishedGame() { + this.endTime = System.currentTimeMillis(); + + if (isLost()) { + return false; + } + + boolean isWon = isWon(); + return isWon; } - /* Lost if maxErrors is greater than or egal to errors */ - public boolean isLost() { - return errors >= maxErrors; + // For view, return the remaining time + public long getRemainingTime() { + long elapsed = (System.currentTimeMillis() - startTime) / 1000; + long remaining = (maxTime / 1000) - elapsed; + + if (remaining < 0) { + remaining = 0; + finishedGame(); + } + + return Math.max(remaining, 0); + } + + // Get elapsed time for calculateScore + private long calculateTime() { + long elapsedTime = (endTime - startTime) / 1000; + return elapsedTime; + } + + // Calculate Score + public int calculateScore() { + long time = calculateTime(); + int baseScore = 1000; + + int errorPenalty = errors * 50; + int timePenalty = (int) time * 2; + + int score = baseScore - errorPenalty - timePenalty; + if (score < 0) { + score = 0; + } + + return score; } } \ No newline at end of file From 90cd0b42a0db507600ecd273635f42940a6e3239 Mon Sep 17 00:00:00 2001 From: raphael Date: Wed, 8 Oct 2025 16:33:28 +0200 Subject: [PATCH 2/2] =?UTF-8?q?V=C3=A9rif=20faite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TD3_DEV51_Qualite_Algo/Controllers/Game.java | 8 ++++---- .../fr/iutfbleau/TD3_DEV51_Qualite_Algo/Models/Word.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java index c701271..967823b 100644 --- a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java +++ b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Controllers/Game.java @@ -1,11 +1,11 @@ -package Controllers; +package fr.iutfbleau.TD3_DEV51_Qualite_Algo.Controllers; -import Models.Word; -import Views.HangedManView; +import fr.iutfbleau.TD3_DEV51_Qualite_Algo.Models.Word; +import fr.iutfbleau.TD3_DEV51_Qualite_Algo.View.hangedManView; public class Game { private Word word; - private HangedManView hangedManView; + private hangedManView hangedManView; private int errors; private int maxErrors = 9; diff --git a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Models/Word.java b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Models/Word.java index 3c3404a..06df605 100644 --- a/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Models/Word.java +++ b/TD3_DEV51_Qualite_Algo/src/main/java/fr/iutfbleau/TD3_DEV51_Qualite_Algo/Models/Word.java @@ -14,7 +14,7 @@ public class Word { } } /* Lettre dans le mot */ - private boolean VerifyLetter(char c){ + public boolean VerifyLetter(char c){ boolean return_bool = false; for(Letter letter : this.tabLetter){ if(!letter.getStatus()){