diff --git a/Pendu/GameEngine.swift b/Pendu/GameEngine.swift index e99a54aed2060e237cf16568522c31fb489b48a7..56914995cddd9c00ce920b851df9944364053452 100644 --- a/Pendu/GameEngine.swift +++ b/Pendu/GameEngine.swift @@ -155,6 +155,10 @@ class GameEngine: NSObject { return false; } + public func getScore() -> Int { + return self.score; + } + public func saveScore() -> Void { // Enregistrement du score dans la base Core Data @@ -179,5 +183,78 @@ class GameEngine: NSObject { static func getOnlineScoreboard() -> Void { // Récupération du classement depuis le serveur + + // URL de l'API + let url = URL(string: "https://miscs.sl-projects.com/IUT-ORSAY/LP-PRISM/TP-iOS/")! + + // Création de la tâche de session URLSessionDataTask pour récupérer les données + let task = URLSession.shared.dataTask(with: url) { (data, response, error) in + // Vérification des erreurs et de la disponibilité des données + guard let data = data, error == nil else { + print("Erreur lors de la récupération des données : \(error?.localizedDescription ?? "Erreur inconnue")") + return + } + + // Récupération du contexte Core Data + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { + print("Impossible d'obtenir l'AppDelegate") + return + } + let managedContext = appDelegate.persistentContainer.viewContext + + do { + // Décodage du JSON en une liste de dictionnaires + guard let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] else { + print("Le JSON n'est pas au format attendu.") + return + } + + // Utilisation des données JSON + for jsonScore in jsonArray { + // Création d'une instance NSManagedObject pour le score + let scoreObject = Score(context: managedContext) + + // Association des valeurs du JSON aux attributs du modèle Core Data + scoreObject.categoryName = jsonScore["categoryName"] as? String ?? "" + scoreObject.difficulty = jsonScore["difficulty"] as? String ?? "" + scoreObject.playerName = jsonScore["playerName"] as? String ?? "" + + if let scoreValue = jsonScore["score"] as? Int { + scoreObject.score = Int16(scoreValue) + } else if let scoreValueString = jsonScore["score"] as? String, + let scoreValue = Int(scoreValueString) { + scoreObject.score = Int16(scoreValue) + } else { + scoreObject.score = 0 // Valeur par défaut si le score ne peut pas être extrait du JSON + } + } + + // Sauvegarde du contexte Core Data + do { + try managedContext.save() + } catch { + print("Erreur lors de la sauvegarde du contexte Core Data : \(error.localizedDescription)") + } + + // Récupération des scores enregistrés dans une liste + let fetchRequest = NSFetchRequest<Score>(entityName: "Score") + let fetchedScores = try managedContext.fetch(fetchRequest) + + // Utilisation de la liste de scores + for fetchedScore in fetchedScores { + print("Category: \(fetchedScore.categoryName)") + print("Difficulty: \(fetchedScore.difficulty)") + print("Player Name: \(fetchedScore.playerName)") + print("Score: \(fetchedScore.score)") + print("------------------------") + } + } catch { + print("Erreur lors du décodage JSON : \(error.localizedDescription)") + } + } + + // Lancement de la tâche + task.resume() + } } diff --git a/Pendu/GameViewController.swift b/Pendu/GameViewController.swift index 947bd311b0721a9094e8a7934c3c649ebe6c4475..018d09c7af30d3ddf152bc7c393dd60d9f709881 100644 --- a/Pendu/GameViewController.swift +++ b/Pendu/GameViewController.swift @@ -29,10 +29,7 @@ extension UIView { } class GameViewController: UIViewController { - - let mainstoryboard = UIStoryboard(name: "Game", bundle: nil) - var wordToGuess : String = "" - + @IBOutlet weak var wordLabel: UILabel! @IBOutlet weak var A_Button: UIButton! @@ -141,22 +138,23 @@ class GameViewController: UIViewController { InputButton(inputButton: N_Button) } + + func InputButton(inputButton: UIButton) { guard let letter = inputButton.titleLabel?.text else { return } - guessLetter(Character(letter)) + guessLetter(String(letter)) inputButton.isEnabled = false } - - func penduImage(nameFile: String) { - let image = UIImage(named: nameFile) - let imageView = UIImageView(image: image!) - imageView.frame = CGRect(x: 50, y: 250, width: 250, height: 250) - view.addSubview(imageView) - } - var currentWordState = "" + + var currentWordState: [String] = [] + var wordToGuess : String = "" + + var isWordFound = false + + var incorrectGuesses = 0 override func viewDidLoad() { view.addBackground() @@ -164,8 +162,8 @@ class GameViewController: UIViewController { print(wordToGuess) initializeWordState() updateWordLabel() + updateImage() - penduImage(nameFile: "humain8") let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40)) label.center = CGPoint(x: 170, y: 230) label.font = UIFont(name: "whatever it takes", size: 40) @@ -176,30 +174,140 @@ class GameViewController: UIViewController { } func initializeWordState() { - for _ in wordToGuess { - currentWordState += "_" - } - } + let words = wordToGuess.components(separatedBy: " ") + print(words) + for word in words { + var wordState = "" + for _ in word { + wordState += "_" + } + currentWordState.append(wordState) + } + } func updateWordLabel() { - wordLabel.text = currentWordState + let wordString = currentWordState.joined(separator: " ") + wordLabel.text = wordString } - func guessLetter(_ letter:Character) { - let guessedLetter = letter.uppercased() - guard wordToGuess.contains(guessedLetter) - else { - return + func checkIfWordFound() { + if currentWordState.joined() == wordToGuess { + isWordFound = true + wordLabel.textColor = UIColor.green + A_Button.isHidden = true + Z_Button.isHidden = true + E_Button.isHidden = true + R_Button.isHidden = true + T_Button.isHidden = true + Y_Button.isHidden = true + U_Button.isHidden = true + I_Button.isHidden = true + O_Button.isHidden = true + P_Button.isHidden = true + Q_Button.isHidden = true + S_Button.isHidden = true + D_Button.isHidden = true + F_Button.isHidden = true + G_Button.isHidden = true + H_Button.isHidden = true + J_Button.isHidden = true + K_Button.isHidden = true + L_Button.isHidden = true + M_Button.isHidden = true + W_Button.isHidden = true + X_Button.isHidden = true + C_Button.isHidden = true + V_Button.isHidden = true + B_Button.isHidden = true + N_Button.isHidden = true } - for (index, char) in wordToGuess.enumerated() { - if char.uppercased() == guessedLetter { - let startIndex = currentWordState.startIndex - let offsetIndex = currentWordState.index(startIndex, offsetBy: index) - - currentWordState.replaceSubrange(offsetIndex...offsetIndex, with: String(char)) + } + + func guessLetter(_ letter:String) { + let guessedLetter = letter.uppercased() + + var updateWordState = currentWordState + + var guessedCorrectly = false + + for (wordIndex, word) in wordToGuess.components(separatedBy: " ").enumerated() { + var updateWord = "" + let wordCharacters = Array(currentWordState[wordIndex]) + for (charIndex, char) in word.enumerated() { + let currentChar = String(char) + + if currentChar.uppercased() == guessedLetter { + updateWord += currentChar + guessedCorrectly = true + } else { + let currentWordStateChar = String(wordCharacters[charIndex]) + updateWord += currentWordStateChar + } + } + updateWordState[wordIndex] = updateWord } + currentWordState = updateWordState + updateWordLabel() + checkIfWordFound() + + if !guessedCorrectly { + updateImage() + } + + } + + + func updateImage() { + let maxIncorrectGuesses = 8 + + let imageName: String + + incorrectGuesses += 1 + + if incorrectGuesses <= maxIncorrectGuesses - 1 { + imageName = "humain\(incorrectGuesses)" + } else { + imageName = "humain8" + wordLabel.textColor = UIColor.red + wordLabel.text = "Perdu" + A_Button.isHidden = true + Z_Button.isHidden = true + E_Button.isHidden = true + R_Button.isHidden = true + T_Button.isHidden = true + Y_Button.isHidden = true + U_Button.isHidden = true + I_Button.isHidden = true + O_Button.isHidden = true + P_Button.isHidden = true + Q_Button.isHidden = true + S_Button.isHidden = true + D_Button.isHidden = true + F_Button.isHidden = true + G_Button.isHidden = true + H_Button.isHidden = true + J_Button.isHidden = true + K_Button.isHidden = true + L_Button.isHidden = true + M_Button.isHidden = true + W_Button.isHidden = true + X_Button.isHidden = true + C_Button.isHidden = true + V_Button.isHidden = true + B_Button.isHidden = true + N_Button.isHidden = true + } + + let image = UIImage(named: imageName) + let imageView = UIImageView(image: image!) + imageView.frame = CGRect(x: 50, y: 250, width: 250, height: 250) + view.addSubview(imageView) + + if let image = UIImage(named: imageName) { + imageView.image = image } - updateWordLabel() } + + }