// // ViewController.swift // Pendu // // Created by Sofiane Lasri-Trienpont on 09/05/2023. // import UIKit extension UIView { func addBackground(imageName: String = "fond_acceuil.png", contentMode: UIView.ContentMode = .scaleToFill) { // setup the UIImageView let backgroundImageView = UIImageView(frame: UIScreen.main.bounds) backgroundImageView.image = UIImage(named: imageName) backgroundImageView.contentMode = contentMode backgroundImageView.translatesAutoresizingMaskIntoConstraints = false addSubview(backgroundImageView) sendSubviewToBack(backgroundImageView) // adding NSLayoutConstraints let leadingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0.0) let trailingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0.0) let topConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0.0) let bottomConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0.0) NSLayoutConstraint.activate([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint]) } } class GameViewController: UIViewController { @IBOutlet weak var wordLabel: UILabel! @IBOutlet weak var score: UILabel! @IBOutlet weak var A_Button: UIButton! @IBOutlet weak var Z_Button: UIButton! @IBOutlet weak var E_Button: UIButton! @IBOutlet weak var R_Button: UIButton! @IBOutlet weak var T_Button: UIButton! @IBOutlet weak var Y_Button: UIButton! @IBOutlet weak var U_Button: UIButton! @IBOutlet weak var I_Button: UIButton! @IBOutlet weak var O_Button: UIButton! @IBOutlet weak var P_Button: UIButton! @IBOutlet weak var Q_Button: UIButton! @IBOutlet weak var S_Button: UIButton! @IBOutlet weak var D_Button: UIButton! @IBOutlet weak var F_Button: UIButton! @IBOutlet weak var G_Button: UIButton! @IBOutlet weak var H_Button: UIButton! @IBOutlet weak var J_Button: UIButton! @IBOutlet weak var K_Button: UIButton! @IBOutlet weak var L_Button: UIButton! @IBOutlet weak var M_Button: UIButton! @IBOutlet weak var W_Button: UIButton! @IBOutlet weak var X_Button: UIButton! @IBOutlet weak var C_Button: UIButton! @IBOutlet weak var V_Button: UIButton! @IBOutlet weak var B_Button: UIButton! @IBOutlet weak var N_Button: UIButton! @IBAction func A_Action(_ sender: Any) { InputButton(inputButton: A_Button) } @IBAction func Z_Action(_ sender: Any) { InputButton(inputButton: Z_Button) } @IBAction func E_Action(_ sender: Any) { InputButton(inputButton: E_Button) } @IBAction func R_Action(_ sender: Any) { InputButton(inputButton: R_Button) } @IBAction func T_Action(_ sender: Any) { InputButton(inputButton: T_Button) } @IBAction func Y_Action(_ sender: Any) { InputButton(inputButton: Y_Button) } @IBAction func U_Action(_ sender: Any) { InputButton(inputButton: U_Button) } @IBAction func I_Action(_ sender: Any) { InputButton(inputButton: I_Button) } @IBAction func O_action(_ sender: Any) { InputButton(inputButton: O_Button) } @IBAction func P_Action(_ sender: Any) { InputButton(inputButton: P_Button) } @IBAction func Q_Action(_ sender: Any) { InputButton(inputButton: Q_Button) } @IBAction func S_Action(_ sender: Any) { InputButton(inputButton: S_Button) } @IBAction func D_Action(_ sender: Any) { InputButton(inputButton: D_Button) } @IBAction func F_Action(_ sender: Any) { InputButton(inputButton: F_Button) } @IBAction func G_Action(_ sender: Any) { InputButton(inputButton: G_Button) } @IBAction func H_Action(_ sender: Any) { InputButton(inputButton: H_Button) } @IBAction func J_Action(_ sender: Any) { InputButton(inputButton: J_Button) } @IBAction func K_Action(_ sender: Any) { InputButton(inputButton: K_Button) } @IBAction func L_Action(_ sender: Any) { InputButton(inputButton: L_Button) } @IBAction func M_Action(_ sender: Any) { InputButton(inputButton: M_Button) } @IBAction func W_Action(_ sender: Any) { InputButton(inputButton: W_Button) } @IBAction func X_Action(_ sender: Any) { InputButton(inputButton: X_Button) } @IBAction func C_Action(_ sender: Any) { InputButton(inputButton: C_Button) } @IBAction func V_Action(_ sender: Any) { InputButton(inputButton: V_Button) } @IBAction func B_Action(_ sender: Any) { InputButton(inputButton: B_Button) } @IBAction func N_Action(_ sender: Any) { InputButton(inputButton: N_Button) } func InputButton(inputButton: UIButton) { guard let letter = inputButton.titleLabel?.text else { return } guessLetter(String(letter)) inputButton.isEnabled = false } var currentWordState: [String] = [] var gameEngine : GameEngine = GameEngine() var wordToGuess = "" var isWordFound = false var incorrectGuesses = 0 override func viewDidLoad() { view.addBackground() wordToGuess = gameEngine.getWordToGuess() super.viewDidLoad() initializeWordState() updateWordLabel() updateImage() score.textColor = UIColor.white score.text = "Score : 0" 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) label.textAlignment = .center label.textColor = UIColor.white label.text = "Pendu" self.view.addSubview(label) } func initializeWordState() { let words = wordToGuess.components(separatedBy: " ") print(words) for word in words { var wordState = "" for _ in word { wordState += "_" } currentWordState.append(wordState) } } func updateWordLabel() { let wordString = currentWordState.joined(separator: " ") wordLabel.text = wordString } 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 let emmitterLayer = CAEmitterLayer() emmitterLayer.emitterPosition = CGPoint(x: view.bounds.width / 2, y: view.bounds.height / 2) emmitterLayer.emitterShape = .point emmitterLayer.emitterMode = .outline emmitterLayer.emitterSize = CGSize(width: 5, height: 0) let confetti = CAEmitterCell() confetti.birthRate = 3 confetti.lifetime = 50 confetti.velocity = 100 confetti.velocityRange = 50 confetti.emissionLongitude = .pi confetti.spin = 2 confetti.spinRange = 8 confetti.scaleRange = 0.5 confetti.contents = UIImage(named: "confetti.png")?.cgImage emmitterLayer.emitterCells = [confetti] view.layer.addSublayer(emmitterLayer) emmitterLayer.beginTime = CACurrentMediaTime() DispatchQueue.main.asyncAfter(deadline: .now() + 3) { emmitterLayer.removeFromSuperlayer() } } } func guessLetter(_ letter:String) { let guessedLetter = letter.uppercased() var updateWordState = currentWordState let guessedCorrectly = gameEngine.guessLetter(letter: Character(letter)) score.text = "Score : " + String(gameEngine.getScore()) 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 } } }