diff --git a/Pendu/GameEngine.swift b/Pendu/GameEngine.swift
index d664baeea49513a75c91388fe5bebeaaddfa5c58..e99a54aed2060e237cf16568522c31fb489b48a7 100644
--- a/Pendu/GameEngine.swift
+++ b/Pendu/GameEngine.swift
@@ -31,6 +31,7 @@ class GameEngine: NSObject {
     private var playerName : String = "";
     private var score : Int = 0;
     private var combo : Int = 0;
+    private var remainingLives : Int = 8;
     
     private var managedObjectContext: NSManagedObjectContext?;
  
@@ -86,22 +87,28 @@ class GameEngine: NSObject {
         return word
     }
     
-    //public func startNewGame(difficulty: String) -> Void {
-        //wordToGuess = WordToGuess(theme: "Animals", difficulty: "Easy")
-    //}
-    
     public func guessLetter(letter: Character) -> Bool {
-
+        if(isGameOver()){
+            return false;
+        }
+        
+        guessedLetters.append(letter);
+        
         if wordToGuess.contains(letter) {
+            combo += 1;
             let dateNow = Date();
             
-            var elapsedTime = 100; // temps au dessus du temps de bonus
+            let maxElapsedTimeInSecondsForBonus = 100;
+            var elapsedTimeInSeconds = maxElapsedTimeInSecondsForBonus; // Initialisation au temps max
+            let baseGuessedLetterBonusPoint = 100;
+            let baseBonusPoint = 100;
+            let comboBonusPoints = 50;
+            var timeBonusMultiplier = 1;
             
             if(lastGuessedLetterTime != nil) {
-                elapsedTime = Int(dateNow.timeIntervalSince(lastGuessedLetterTime!));
+                elapsedTimeInSeconds = Int(dateNow.timeIntervalSince(lastGuessedLetterTime!));
             }
-             
-            var timeBonusMultiplier = 1;
+            
             switch difficulty {
             case "Easy":
                 timeBonusMultiplier = 1;
@@ -112,28 +119,39 @@ class GameEngine: NSObject {
             default:
                 timeBonusMultiplier = 1;
             }
-            let bonusPoints = (10 * (timeBonusMultiplier))
             
-            if(elapsedTime < 10) {
-                score += 100 + bonusPoints;
+            if(elapsedTimeInSeconds > maxElapsedTimeInSecondsForBonus) {
+                score += baseGuessedLetterBonusPoint;
+            } else if(elapsedTimeInSeconds < 10) {
+                score += baseGuessedLetterBonusPoint + baseBonusPoint * timeBonusMultiplier;
             } else {
-                score += 100;
+                score += baseGuessedLetterBonusPoint + (baseBonusPoint * (elapsedTimeInSeconds / maxElapsedTimeInSecondsForBonus));
+            }
+            if (combo > 1) {
+                score += (combo - 1) * comboBonusPoints;
             }
+            
             lastGuessedLetterTime = Date();
             return true;
-        } else {
-            lastGuessedLetterTime = nil;
-            return false;
         }
-
+        
+        remainingLives -= 1;
+        combo = 0;
+        lastGuessedLetterTime = nil;
+        return false;
     }
     
     public func isGameOver() -> Bool {
-        // Vérification si le jeu est terminé
-        return false;
+        if(remainingLives > 0) {
+            return false;
+        }
+        return true;
     }
     
-    public func isLetterGuesses(letter: Character) -> Bool {
+    public func isLetterGuessed(letter: Character) -> Bool {
+        if(guessedLetters.contains(letter)) {
+            return true;
+        }
         return false;
     }